Wrong way indicator, collision sound, fixed winner screen

This commit is contained in:
John Wigner 2025-02-01 19:54:08 -05:00
parent 21c8a650e3
commit 9f10cbc5fc
9 changed files with 692 additions and 118 deletions

View File

@ -136,6 +136,154 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &759185982889710626
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1251444078252046342}
- component: {fileID: 9182074428259740160}
m_Layer: 0
m_Name: Trail (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1251444078252046342
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 759185982889710626}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -1.51}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2739604471974086380}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!96 &9182074428259740160
TrailRenderer:
serializedVersion: 3
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 759185982889710626}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 0
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Time: 0.05
m_PreviewTimeScale: 1
m_Parameters:
serializedVersion: 3
widthMultiplier: 2
widthCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.76580465
value: 0.35365856
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorGradient:
serializedVersion: 2
key0: {r: 1, g: 0.9882353, b: 0.2509804, a: 1}
key1: {r: 1, g: 1, b: 1, a: 1}
key2: {r: 0, g: 0, b: 0, a: 0}
key3: {r: 0, g: 0, b: 0, a: 0}
key4: {r: 0, g: 0, b: 0, a: 0}
key5: {r: 0, g: 0, b: 0, a: 0}
key6: {r: 0, g: 0, b: 0, a: 0}
key7: {r: 0, g: 0, b: 0, a: 0}
ctime0: 0
ctime1: 65535
ctime2: 0
ctime3: 0
ctime4: 0
ctime5: 0
ctime6: 0
ctime7: 0
atime0: 0
atime1: 65535
atime2: 0
atime3: 0
atime4: 0
atime5: 0
atime6: 0
atime7: 0
m_Mode: 0
m_ColorSpace: 0
m_NumColorKeys: 2
m_NumAlphaKeys: 2
numCornerVertices: 0
numCapVertices: 0
alignment: 0
textureMode: 0
textureScale: {x: 1, y: 1}
shadowBias: 0.5
generateLightingData: 0
m_MinVertexDistance: 0.1
m_MaskInteraction: 0
m_Autodestruct: 0
m_Emitting: 1
m_ApplyActiveColorSpace: 1
--- !u!1 &1269682946183619831
GameObject:
m_ObjectHideFlags: 0
@ -152,7 +300,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &2684802689901416212
Transform:
m_ObjectHideFlags: 0
@ -284,6 +432,142 @@ TrailRenderer:
m_Autodestruct: 0
m_Emitting: 1
m_ApplyActiveColorSpace: 1
--- !u!1 &3137021681585047558
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4209967134487703583}
- component: {fileID: 4851873612469887564}
- component: {fileID: 4764067250207221816}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4209967134487703583
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3137021681585047558}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 6150292465518131551}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 1200, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4851873612469887564
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3137021681585047558}
m_CullTransparentMesh: 1
--- !u!114 &4764067250207221816
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3137021681585047558}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: wrong way !!
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 978007a8ddca8ef408c6e3469f9496d1, type: 2}
m_sharedMaterial: {fileID: 706495386608451938, guid: 978007a8ddca8ef408c6e3469f9496d1, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 0.81568635, g: 0.13333334, b: 0, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 72
m_fontSizeBase: 72
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 256
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &3205211927287796582
GameObject:
m_ObjectHideFlags: 0
@ -396,6 +680,7 @@ RectTransform:
- {fileID: 7211960240219488103}
- {fileID: 2718635251434518077}
- {fileID: 218548550622008583}
- {fileID: 4209967134487703583}
m_Father: {fileID: 2739604471974086380}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -1007,7 +1292,7 @@ AudioSource:
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: 08201d878210b114e813f4133c6fd322, type: 3}
m_Resource: {fileID: 8300000, guid: 08201d878210b114e813f4133c6fd322, type: 3}
m_PlayOnAwake: 1
m_PlayOnAwake: 0
m_Volume: 0.32
m_Pitch: -1.76
Loop: 0
@ -1136,7 +1421,7 @@ AudioSource:
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: c953c4df8e4207f4db2ac3d8603809d9, type: 3}
m_Resource: {fileID: 8300000, guid: c953c4df8e4207f4db2ac3d8603809d9, type: 3}
m_PlayOnAwake: 1
m_PlayOnAwake: 0
m_Volume: 0.471
m_Pitch: 1
Loop: 0
@ -1260,6 +1545,7 @@ Transform:
- {fileID: 9160487209143755372}
- {fileID: 360567747910623970}
- {fileID: 2684802689901416212}
- {fileID: 1251444078252046342}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &7162886650759621711
@ -1450,6 +1736,7 @@ MonoBehaviour:
- {fileID: 0}
- {fileID: 0}
canAccelerate: 0
wrongWayText: {fileID: 0}
hoverHeight: 3
raycastDistance: 20
smoothTerrainLayer:
@ -1467,6 +1754,8 @@ MonoBehaviour:
timeBeforeReset: 3
trackRaycastDistance: 20
trackTag: Track
collisionSound: {fileID: 0}
audioSource: {fileID: 0}
--- !u!114 &7105996084223619230
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -348,7 +348,7 @@ AudioSource:
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: ad8a021cc75c4d2498f62c9468f0c57a, type: 3}
m_Resource: {fileID: 8300000, guid: ad8a021cc75c4d2498f62c9468f0c57a, type: 3}
m_PlayOnAwake: 1
m_PlayOnAwake: 0
m_Volume: 1
m_Pitch: 1
Loop: 0
@ -477,7 +477,7 @@ AudioSource:
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: b7c5bbd3b60bdec4c970a96f623bb757, type: 3}
m_Resource: {fileID: 8300000, guid: b7c5bbd3b60bdec4c970a96f623bb757, type: 3}
m_PlayOnAwake: 1
m_PlayOnAwake: 0
m_Volume: 1
m_Pitch: 1
Loop: 0

View File

@ -119,6 +119,17 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!114 &121175909 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 5216672097827285888, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
m_PrefabInstance: {fileID: 6682387771288872990}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &149090130 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 7330093094718640193, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
@ -883,6 +894,17 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 3270263327541053123, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
m_PrefabInstance: {fileID: 6388558628322318749}
m_PrefabAsset: {fileID: 0}
--- !u!114 &418144275 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4764067250207221816, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
m_PrefabInstance: {fileID: 6388558628322318749}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &456547926 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 8956791611276861029, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
@ -3313,6 +3335,135 @@ MonoBehaviour:
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
--- !u!1 &2055079843
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2055079844}
- component: {fileID: 2055079845}
m_Layer: 0
m_Name: Collision
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2055079844
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2055079843}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1703462600}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!82 &2055079845
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2055079843}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: 6769b43fd3db2634f9e81c93ac3e093e, type: 3}
m_Resource: {fileID: 8300000, guid: 6769b43fd3db2634f9e81c93ac3e093e, type: 3}
m_PlayOnAwake: 0
m_Volume: 0.463
m_Pitch: -1.95
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!64 &2140352485
MeshCollider:
m_ObjectHideFlags: 0
@ -6130,6 +6281,18 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 341120459158792421, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: audioSource
value:
objectReference: {fileID: 2055079845}
- target: {fileID: 341120459158792421, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: wrongWayText
value:
objectReference: {fileID: 418144275}
- target: {fileID: 341120459158792421, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: collisionSound
value:
objectReference: {fileID: 8300000, guid: 6769b43fd3db2634f9e81c93ac3e093e, type: 3}
- target: {fileID: 341120459158792421, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: 'checkpoints.Array.data[0]'
value:
@ -6674,6 +6837,18 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3137021681585047558, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: m_Name
value: WrongWay
objectReference: {fileID: 0}
- target: {fileID: 3137021681585047558, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4764067250207221816, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: m_fontColor32.rgba
value: 4278198992
objectReference: {fileID: 0}
- target: {fileID: 6552287091957501518, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
propertyPath: raceManager
value:
@ -6684,7 +6859,10 @@ PrefabInstance:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 2739604471974086380, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
insertIndex: -1
addedObject: {fileID: 2055079844}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: dd7b06eb9076d6c429cee20c704cae64, type: 3}
--- !u!1 &6466939393724566181 stripped
@ -6885,6 +7063,14 @@ PrefabInstance:
propertyPath: m_Name
value: RaceManager
objectReference: {fileID: 0}
- target: {fileID: 5216672097827285888, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: m_fontSize
value: 72
objectReference: {fileID: 0}
- target: {fileID: 5216672097827285888, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: m_fontSizeBase
value: 72
objectReference: {fileID: 0}
- target: {fileID: 5961961246965211052, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
@ -6933,10 +7119,18 @@ PrefabInstance:
propertyPath: playerUI
value:
objectReference: {fileID: 377076480}
- target: {fileID: 8956791611276861029, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: totalLaps
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8956791611276861029, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: finishLine
value:
objectReference: {fileID: 1535149051}
- target: {fileID: 8956791611276861029, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: victoryText
value:
objectReference: {fileID: 121175909}
- target: {fileID: 8956791611276861029, guid: 3d3c243c1b15b8d47b49111dee600ae6, type: 3}
propertyPath: lapsLeftText
value:

View File

@ -1,7 +1,12 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI; // Required for UI elements
public class StableHovercarController : BaseHovercarController
{
[Header("UI")]
public TextMeshProUGUI wrongWayText;
[Header("Hover Settings")]
public float hoverHeight = 3.0f;
public float raycastDistance = 10.0f;
@ -18,9 +23,9 @@ public class StableHovercarController : BaseHovercarController
public float bumpyPositionAdjustmentSpeed = 5.0f;
[Header("Movement Settings")]
public float movementSpeed = 10.0f; // Max speed
public float acceleration = 5.0f; // How quickly to accelerate
public float deceleration = 7.0f; // How quickly to decelerate
public float movementSpeed = 10.0f;
public float acceleration = 5.0f;
public float deceleration = 7.0f;
public float rotationSpeed = 100.0f;
[Header("Reset Settings")]
@ -33,6 +38,9 @@ public class StableHovercarController : BaseHovercarController
[Tooltip("Tag used on the track geometry.")]
public string trackTag = "Track";
public AudioClip collisionSound;
public AudioSource audioSource;
private float currentSpeed = 0.0f;
private Rigidbody rb;
private RacerProgress racerProgress;
@ -42,6 +50,9 @@ public class StableHovercarController : BaseHovercarController
// Flag that indicates whether a raycast hit was detected in this physics update.
private bool groundContact = false;
// Timer to track how long the next checkpoint is not in front.
private float wrongWayTimer = 0.0f;
void Start()
{
rb = GetComponent<Rigidbody>();
@ -52,62 +63,115 @@ public class StableHovercarController : BaseHovercarController
{
Debug.LogWarning("No RacerProgress component found on this vehicle!");
}
if (wrongWayText != null)
{
wrongWayText.enabled = false; // Hide the "Wrong Way" message initially
}
}
void FixedUpdate()
{
HandleHovering();
HandleMovement();
CheckWrongWay();
// If we arent detecting ground/track contact, count up.
if (!groundContact)
{
noContactTimer += Time.fixedDeltaTime;
if (noContactTimer >= timeBeforeReset)
{
ResetToCheckpoint();
noContactTimer = 0.0f; // Reset timer after repositioning
noContactTimer = 0.0f;
}
}
else
{
// Reset the timer when ground/track is detected.
noContactTimer = 0.0f;
}
}
private void OnCollisionEnter(Collision collision)
{
// Check if the collided object has the "Racer" tag
if (collision.gameObject.CompareTag("Racer"))
{
// Play the sound effect
if (collisionSound != null && audioSource != null)
{
audioSource.PlayOneShot(collisionSound);
}
}
}
/// <summary>
/// Checks whether the next checkpoint is in the vehicle's forward hemisphere.
/// If it isnt for longer than one second, the "Wrong Way" warning is displayed.
/// </summary>
void CheckWrongWay()
{
// Validate that we have checkpoints and progress data.
if (checkpoints == null || racerProgress == null || checkpoints.Length == 0)
{
return;
}
// Determine the next checkpoint.
int nextCheckpointIndex = (racerProgress.currentCheckpointIndex + 1) % checkpoints.Length;
Transform nextCheckpoint = checkpoints[nextCheckpointIndex];
// Compute the direction from the vehicle to the next checkpoint.
Vector3 toNextCheckpoint = (nextCheckpoint.position - transform.position).normalized;
// Check if the next checkpoint is in front.
// A positive dot product means the checkpoint is in the forward hemisphere.
if (Vector3.Dot(transform.forward, toNextCheckpoint) > 0)
{
// Checkpoint is in front reset the timer and hide the warning.
wrongWayTimer = 0.0f;
if (wrongWayText != null)
{
wrongWayText.enabled = false;
}
}
else
{
// Checkpoint is behind; accumulate the timer.
wrongWayTimer += Time.fixedDeltaTime;
if (wrongWayTimer >= 1.0f)
{
if (wrongWayText != null)
{
wrongWayText.enabled = true;
}
}
}
}
void HandleHovering()
{
RaycastHit hit;
Vector3 rayOrigin = transform.position;
// Combine both terrain layers for the raycast.
LayerMask combinedLayer = smoothTerrainLayer | bumpyTerrainLayer;
// Cast a ray downward to detect the terrain.
if (Physics.Raycast(rayOrigin, -transform.up, out hit, raycastDistance, combinedLayer))
{
// We have ground contact.
groundContact = true;
// Determine the triangle on the mesh that was hit.
Mesh mesh = hit.collider.GetComponent<MeshFilter>().mesh;
int triangleIndex = hit.triangleIndex;
int vertex1Index = mesh.triangles[triangleIndex * 3 + 0];
int vertex2Index = mesh.triangles[triangleIndex * 3 + 1];
int vertex3Index = mesh.triangles[triangleIndex * 3 + 2];
// Convert the triangle vertices to world space.
Vector3 worldVertex1 = hit.collider.transform.TransformPoint(mesh.vertices[vertex1Index]);
Vector3 worldVertex2 = hit.collider.transform.TransformPoint(mesh.vertices[vertex2Index]);
Vector3 worldVertex3 = hit.collider.transform.TransformPoint(mesh.vertices[vertex3Index]);
// Interpolate to find the hit point on the triangle.
Vector3 interpolatedPoint = worldVertex1 * hit.barycentricCoordinate.x +
worldVertex2 * hit.barycentricCoordinate.y +
worldVertex3 * hit.barycentricCoordinate.z;
// Similarly, interpolate the normals.
Vector3 localNormal1 = mesh.normals[vertex1Index];
Vector3 localNormal2 = mesh.normals[vertex2Index];
Vector3 localNormal3 = mesh.normals[vertex3Index];
@ -115,43 +179,36 @@ public class StableHovercarController : BaseHovercarController
Vector3 worldNormal2 = hit.collider.transform.TransformDirection(localNormal2);
Vector3 worldNormal3 = hit.collider.transform.TransformDirection(localNormal3);
Vector3 interpolatedNormal = (worldNormal1 * hit.barycentricCoordinate.x +
worldNormal2 * hit.barycentricCoordinate.y +
worldNormal3 * hit.barycentricCoordinate.z).normalized;
worldNormal2 * hit.barycentricCoordinate.y +
worldNormal3 * hit.barycentricCoordinate.z).normalized;
// Choose the appropriate adjustment speed based on which terrain layer was hit.
float currentAdjustmentSpeed = smoothPositionAdjustmentSpeed;
if (IsInLayerMask(hit.collider.gameObject, bumpyTerrainLayer))
{
currentAdjustmentSpeed = bumpyPositionAdjustmentSpeed;
}
// Compute the target hover position.
Vector3 targetPosition = interpolatedPoint + interpolatedNormal * hoverHeight;
rb.MovePosition(Vector3.Lerp(transform.position, targetPosition, Time.fixedDeltaTime * currentAdjustmentSpeed));
// Smoothly rotate the vehicle to align with the terrain.
Quaternion targetRotation = Quaternion.FromToRotation(transform.up, interpolatedNormal) * transform.rotation;
rb.rotation = Quaternion.Slerp(rb.rotation, targetRotation, Time.fixedDeltaTime * 5.0f);
}
else
{
// No ground detected.
groundContact = false;
}
}
void HandleMovement()
{
// Get player input.
float input = Input.GetAxis("Vertical");
if (!canAccelerate) {
if (!canAccelerate)
{
input = 0;
}
// Calculate target speed.
float targetSpeed = input * movementSpeed;
// Smooth acceleration/deceleration.
if (input != 0)
{
currentSpeed = Mathf.Lerp(currentSpeed, targetSpeed, Time.fixedDeltaTime * acceleration);
@ -161,77 +218,50 @@ public class StableHovercarController : BaseHovercarController
currentSpeed = Mathf.Lerp(currentSpeed, 0, Time.fixedDeltaTime * deceleration);
}
// Apply forward movement.
rb.linearVelocity = transform.forward * currentSpeed;
// Apply rotation.
float turn = Input.GetAxis("Horizontal") * rotationSpeed;
rb.angularVelocity = transform.up * turn * Mathf.Deg2Rad;
}
void ResetToCheckpoint()
{
// Ensure checkpoints and progress tracking are valid.
if (checkpoints == null || checkpoints.Length == 0)
void ResetToCheckpoint()
{
Debug.LogWarning("No checkpoints have been assigned in the Inspector.");
return;
}
if (racerProgress == null)
{
Debug.LogWarning("RacerProgress component is missing. Cannot reset to checkpoint.");
return;
}
int cpIndex = racerProgress.currentCheckpointIndex;
if (cpIndex < 0 || cpIndex >= checkpoints.Length)
{
Debug.LogWarning("Invalid checkpoint index in RacerProgress!");
return;
}
if (checkpoints == null || checkpoints.Length == 0 || racerProgress == null)
{
return;
}
// Get the last checkpoint.
Transform lastCheckpoint = checkpoints[cpIndex];
int cpIndex = racerProgress.currentCheckpointIndex;
if (cpIndex < 0 || cpIndex >= checkpoints.Length)
{
return;
}
// Determine the next checkpoint in sequence.
int nextCheckpointIndex = (cpIndex + 1) % checkpoints.Length;
Transform nextCheckpoint = checkpoints[nextCheckpointIndex];
Transform lastCheckpoint = checkpoints[cpIndex];
int nextCheckpointIndex = (cpIndex + 1) % checkpoints.Length;
Transform nextCheckpoint = checkpoints[nextCheckpointIndex];
// Determine desired forward direction toward the next checkpoint.
Vector3 desiredForward = (nextCheckpoint.position - lastCheckpoint.position).normalized;
Vector3 desiredForward = (nextCheckpoint.position - lastCheckpoint.position).normalized;
Vector3 desiredUp = Vector3.up;
RaycastHit hit;
Vector3 rayOrigin = lastCheckpoint.position + Vector3.up * 1.0f;
// Determine the tracks surface normal using a raycast.
Vector3 desiredUp = Vector3.up; // Fallback if no track surface is detected.
RaycastHit hit;
Vector3 rayOrigin = lastCheckpoint.position + Vector3.up * 1.0f;
if (Physics.Raycast(rayOrigin, -Vector3.up, out hit, trackRaycastDistance))
{
if (hit.collider.CompareTag(trackTag))
if (Physics.Raycast(rayOrigin, -Vector3.up, out hit, trackRaycastDistance) && hit.collider.CompareTag(trackTag))
{
desiredUp = -hit.normal;
}
desiredForward = Vector3.ProjectOnPlane(desiredForward, desiredUp).normalized;
Quaternion desiredRotation = Quaternion.LookRotation(desiredForward, desiredUp);
transform.position = lastCheckpoint.position;
transform.rotation = desiredRotation;
currentSpeed = 0f;
rb.linearVelocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
}
// Adjust the forward vector to be perpendicular to the track's surface.
desiredForward = Vector3.ProjectOnPlane(desiredForward, desiredUp).normalized;
// Build the final rotation.
Quaternion desiredRotation = Quaternion.LookRotation(desiredForward, desiredUp);
// Reset position and orientation.
transform.position = lastCheckpoint.position;
transform.rotation = desiredRotation;
// Clear any existing velocity.
currentSpeed = 0f;
rb.linearVelocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;
Debug.Log("Vehicle reset to checkpoint: " + lastCheckpoint.name +
" with front facing: " + nextCheckpoint.name);
}
// Helper method to determine if a GameObject's layer is in a given LayerMask.
private bool IsInLayerMask(GameObject obj, LayerMask mask)
{

View File

@ -5,19 +5,29 @@ public class Checkpoint : MonoBehaviour
[Tooltip("The order index of this checkpoint along the track.")]
public int checkpointIndex = 0;
[Tooltip("The amount of checkpoints the player can skip without penalty.")]
public int skippableCheckpointsQty = 5;
private void OnTriggerEnter(Collider other)
{
RacerProgress progress = other.GetComponent<RacerProgress>();
if (progress != null && RaceManager.Instance != null)
{
// Only update if the racer is expecting this checkpoint next.
if (progress.currentCheckpointIndex == checkpointIndex)
int totalCheckpoints = RaceManager.Instance.numberOfCheckpoints;
// Check if this checkpoint is within the skippable range or expected next.
int distanceToCheckpoint = (checkpointIndex - progress.currentCheckpointIndex + totalCheckpoints) % totalCheckpoints;
if (distanceToCheckpoint == 0 || (distanceToCheckpoint <= skippableCheckpointsQty + 1))
{
int totalCheckpoints = RaceManager.Instance.numberOfCheckpoints;
// Update the current checkpoint index
progress.currentCheckpointIndex = (checkpointIndex + 1) % totalCheckpoints;
// If the racer just passed the final checkpoint, increment the lap count.
if (checkpointIndex == totalCheckpoints - 1)
{
progress.lapCount++;
}
}
}
}

View File

@ -31,6 +31,7 @@ public class RaceManager : MonoBehaviour
public CinemachineCamera victoryCamera;
public CinemachineCamera playerCamera;
public GameObject postRaceCanvas;
public TextMeshProUGUI victoryText;
public GameObject playerUI;
private List<RacerProgress> racers = new List<RacerProgress>();
@ -108,6 +109,12 @@ public class RaceManager : MonoBehaviour
{
foreach (RacerProgress racer in racers)
{
BaseHovercarController controller = racer.GetComponent<BaseHovercarController>();
if (controller != null)
{
controller.enabled = false; // Disable the movement script.
}
Rigidbody rb = racer.GetComponent<Rigidbody>();
if (rb != null)
{
@ -122,6 +129,12 @@ public class RaceManager : MonoBehaviour
{
foreach (RacerProgress racer in racers)
{
BaseHovercarController controller = racer.GetComponent<BaseHovercarController>();
if (controller != null)
{
controller.enabled = true; // Disable the movement script.
}
racer.GetComponent<BaseHovercarController>().canAccelerate = true;
Rigidbody rb = racer.GetComponent<Rigidbody>();
if (rb != null)
@ -143,14 +156,19 @@ public class RaceManager : MonoBehaviour
}
private void UpdatePositionUI(int position)
{
playerPositionText.text = GetPrettyPosition(position);
}
private string GetPrettyPosition(int position)
{
if (position < 4)
{
playerPositionText.text = placeMapping[position - 1];
return placeMapping[position - 1];
}
else
{
playerPositionText.text = position + "th";
return position + "th";
}
}
@ -178,15 +196,25 @@ public class RaceManager : MonoBehaviour
private void TriggerPostRaceEvents()
{
LockRacers();
if (victoryCamera != null && playerVehicle != null && playerCamera != null)
{
victoryCamera.gameObject.SetActive(true);
playerCamera.gameObject.SetActive(false);
}
if (postRaceCanvas != null) postRaceCanvas.SetActive(true);
if (postRaceCanvas != null)
{
int playerPosition = GetPlayerPosition();
postRaceCanvas.SetActive(true);
if (playerPosition == 1) {
victoryText.text = "You win";
}
else
{
victoryText.text = "you placed " + GetPrettyPosition(playerPosition);
}
}
if (playerUI != null) playerUI.SetActive(false);
LockRacers(); // Lock racers at the end of the race
}
}

View File

@ -33,28 +33,28 @@ MonoBehaviour:
m_Settings:
m_SettingsList:
m_List:
- rid: 6527416841684648058
- rid: 6527416841684648059
- rid: 6527416841684648070
- rid: 6527416841684648071
- rid: 6852985685364965378
- rid: 6852985685364965379
- rid: 6852985685364965380
- rid: 6852985685364965381
- rid: 6527416841684648060
- rid: 6527416841684648061
- rid: 6527416841684648072
- rid: 6527416841684648073
- rid: 6852985685364965384
- rid: 6852985685364965385
- rid: 6527416841684648062
- rid: 6527416841684648063
- rid: 6527416841684648064
- rid: 6527416841684648065
- rid: 6527416841684648066
- rid: 6527416841684648067
- rid: 6527416841684648074
- rid: 6527416841684648075
- rid: 6527416841684648076
- rid: 6527416841684648077
- rid: 6527416841684648078
- rid: 6527416841684648079
- rid: 6852985685364965392
- rid: 6527416841684648068
- rid: 6527416841684648080
- rid: 6852985685364965394
- rid: 8712630790384254976
- rid: 6954400632628051968
- rid: 6527416841684648069
- rid: 6527416841684648081
m_RuntimeSettings:
m_List:
- rid: 6852985685364965378
@ -97,14 +97,14 @@ MonoBehaviour:
references:
version: 2
RefIds:
- rid: 6527416841684648058
- rid: 6527416841684648070
type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
m_StripUnusedPostProcessingVariants: 1
m_StripUnusedVariants: 1
m_StripScreenCoordOverrideVariants: 1
- rid: 6527416841684648059
- rid: 6527416841684648071
type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3}
@ -116,7 +116,7 @@ MonoBehaviour:
m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3}
m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3}
m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3}
- rid: 6527416841684648060
- rid: 6527416841684648072
type: {class: Renderer2DResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_Version: 0
@ -131,7 +131,7 @@ MonoBehaviour:
m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2}
- rid: 6527416841684648061
- rid: 6527416841684648073
type: {class: UniversalRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_DefaultMaterial: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
@ -140,7 +140,7 @@ MonoBehaviour:
m_DefaultTerrainMaterial: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2}
m_DefaultDecalMaterial: {fileID: 2100000, guid: 31d0dcc6f2dd4e4408d18036a2c93862, type: 2}
m_DefaultSpriteMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
- rid: 6527416841684648062
- rid: 6527416841684648074
type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime}
data:
m_Version: 0
@ -153,13 +153,13 @@ MonoBehaviour:
m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3}
m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3}
m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3}
- rid: 6527416841684648063
- rid: 6527416841684648075
type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3}
m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3}
m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3}
- rid: 6527416841684648064
- rid: 6527416841684648076
type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_Version: 1
@ -172,12 +172,12 @@ MonoBehaviour:
skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3}
renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
- rid: 6527416841684648065
- rid: 6527416841684648077
type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_Version: 1
m_ProbeVolumeDisableStreamingAssets: 0
- rid: 6527416841684648066
- rid: 6527416841684648078
type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_Version: 1
@ -187,21 +187,21 @@ MonoBehaviour:
probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3}
probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3}
numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3}
- rid: 6527416841684648067
- rid: 6527416841684648079
type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_version: 0
m_IncludeReferencedInScenes: 0
m_IncludeAssetsByLabel: 0
m_LabelToInclude:
- rid: 6527416841684648068
- rid: 6527416841684648080
type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
data:
m_Version: 1
probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3}
probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3}
probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3}
- rid: 6527416841684648069
- rid: 6527416841684648081
type: {class: UniversalRenderPipelineEditorAssets, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
data:
m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: eda47df5b85f4f249abf7abd73db2cb2, type: 2}

BIN
Assets/Sounds/Clang.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 6769b43fd3db2634f9e81c93ac3e093e
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant: