6
6
using Unity . CharacterController ;
7
7
using Unity . Mathematics ;
8
8
using UnityEngine ;
9
+ using Random = UnityEngine . Random ;
9
10
10
11
[ Serializable ]
11
12
public struct ThirdPersonCharacterData : IComponentData
@@ -70,12 +71,19 @@ struct KyleAnimationData : IComponentData
70
71
// Read-Only Properties
71
72
public float SpeedChangeRate ;
72
73
public float FallTimeout ;
74
+ public float FootstepAudioVolume ;
73
75
74
76
// Read-Write Properties
75
77
public float MotionBlend ;
76
78
public float FallTimeoutDelta ;
77
79
}
78
80
81
+ public class KyleAnimationManagedData : IComponentData
82
+ {
83
+ public AudioClip LandingAudioClip ;
84
+ public AudioClip [ ] FootstepAudioClips ;
85
+ }
86
+
79
87
[ UpdateInGroup ( typeof ( SimulationSystemGroup ) ) ]
80
88
[ UpdateAfter ( typeof ( FixedStepSimulationSystemGroup ) ) ]
81
89
[ UpdateAfter ( typeof ( ThirdPersonPlayerVariableStepControlSystem ) ) ]
@@ -126,6 +134,7 @@ public void OnUpdate(ref SystemState state)
126
134
ref var animationData = ref SystemAPI . GetComponentRW < KyleAnimationData > ( characterData . AnimationEntity ) . ValueRW ;
127
135
var characterInput = characterAspect . CharacterInput . ValueRO ;
128
136
var characterBody = characterAspect . CharacterAspect . CharacterBody . ValueRO ;
137
+ var localTransform = characterAspect . CharacterAspect . LocalTransform . ValueRO ;
129
138
var targetSpeed = characterInput . SprintIsHeld ? characterData . SprintSpeed : characterData . WalkSpeed ;
130
139
131
140
// Update Motion Blend
@@ -152,6 +161,23 @@ public void OnUpdate(ref SystemState state)
152
161
else
153
162
animator . SetBool ( AnimIDFreeFall , true ) ;
154
163
}
164
+
165
+ // Handle Animation Events
166
+ var animatorEvents = SystemAPI . ManagedAPI . GetComponent < KyleAnimatorEvents > ( characterData . AnimationEntity ) ;
167
+ var managedData = SystemAPI . ManagedAPI . GetComponent < KyleAnimationManagedData > ( characterData . AnimationEntity ) ;
168
+ while ( animatorEvents . MoveNextFootstep ( ) )
169
+ {
170
+ if ( managedData . FootstepAudioClips . Length > 0 )
171
+ {
172
+ var index = Random . Range ( 0 , managedData . FootstepAudioClips . Length ) ;
173
+ AudioSource . PlayClipAtPoint ( managedData . FootstepAudioClips [ index ] , localTransform . Position , animationData . FootstepAudioVolume ) ;
174
+ }
175
+ }
176
+
177
+ while ( animatorEvents . MoveNextLand ( ) )
178
+ {
179
+ AudioSource . PlayClipAtPoint ( managedData . LandingAudioClip , localTransform . Position , animationData . FootstepAudioVolume ) ;
180
+ }
155
181
}
156
182
}
157
183
}
0 commit comments