Skip to content

Commit

Permalink
add fist making and look at while hitting with fist
Browse files Browse the repository at this point in the history
  • Loading branch information
stilnat committed Oct 20, 2024
1 parent 1fb145e commit d731a79
Show file tree
Hide file tree
Showing 4 changed files with 172 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,31 @@ AnimatorStateMachine:
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 6284056232029814084}
--- !u!1101 &-8804959485315052713
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: FingerFistRight
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 7332751797104629191}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-8540273196910157816
AnimatorState:
serializedVersion: 6
Expand Down Expand Up @@ -77,6 +102,32 @@ AnimatorStateTransition:
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-8486888245377331970
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Fist
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 1
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 4108574795491154050, guid: a02b13df827cb0e4cbcc3ddb9798d2ca, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-7444544489486254181
AnimatorState:
serializedVersion: 6
Expand Down Expand Up @@ -154,6 +205,31 @@ AnimatorStateTransition:
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-6777446332006973739
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: FingerFistLeft
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -8486888245377331970}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.25
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-6613564437633993527
AnimatorStateTransition:
m_ObjectHideFlags: 1
Expand Down Expand Up @@ -459,10 +535,14 @@ AnimatorStateMachine:
- serializedVersion: 1
m_State: {fileID: -7103739227936875670}
m_Position: {x: 390, y: 40, z: 0}
- serializedVersion: 1
m_State: {fileID: 7332751797104629191}
m_Position: {x: 391.74527, y: -41.014313, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions:
- {fileID: -798705749414654632}
- {fileID: -8532516871721363754}
- {fileID: -8804959485315052713}
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
Expand Down Expand Up @@ -717,6 +797,18 @@ AnimatorController:
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: FingerFistRight
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: FingerFistLeft
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
Expand Down Expand Up @@ -1078,10 +1170,14 @@ AnimatorStateMachine:
- serializedVersion: 1
m_State: {fileID: -3280232002450621640}
m_Position: {x: 360, y: 20, z: 0}
- serializedVersion: 1
m_State: {fileID: -8486888245377331970}
m_Position: {x: 346.1792, y: -62.712433, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions:
- {fileID: -4295741476027303128}
- {fileID: 4610505144418003519}
- {fileID: -6777446332006973739}
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
Expand Down Expand Up @@ -1247,6 +1343,32 @@ BlendTree:
m_UseAutomaticThresholds: 0
m_NormalizedBlendValues: 0
m_BlendType: 0
--- !u!1102 &7332751797104629191
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Fist
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 4108574795491154050, guid: a02b13df827cb0e4cbcc3ddb9798d2ca, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1101 &7932287715000747279
AnimatorStateTransition:
m_ObjectHideFlags: 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7822,7 +7822,8 @@ MonoBehaviour:
_addedNetworkObject: {fileID: 241836927429143711}
_networkObjectCache: {fileID: 241836927429143711}
_hands: {fileID: 3222345056416986628}
_lookAtTargetLocker: {fileID: 0}
_lookAtConstraint: {fileID: 2851688491558728783}
_lookAtTargetLocker: {fileID: 5358384094254398678}
--- !u!1 &4092542307493577921
GameObject:
m_ObjectHideFlags: 0
Expand Down
49 changes: 36 additions & 13 deletions Assets/Scripts/SS3D/Systems/Animations/HitAnimation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ public class HitAnimation : NetworkActor
[SerializeField]
private Hands _hands;

[SerializeField]
private MultiAimConstraint _lookAtConstraint;

[SerializeField]
private Transform _lookAtTargetLocker;

Expand Down Expand Up @@ -66,17 +69,9 @@ private void HitAnimate(Vector3 hitTargetPosition)

Vector3 fromHandToHit = hitTargetPosition - _hands.SelectedHand.HandBone.position;

float duration = 1f * Mathf.Min(fromHandToHit.magnitude, 0.7f);

// If item is too low, crouch to reach
if (_hands.SelectedHand.HandBone.transform.position.y - hitTargetPosition.y > 0.3)
{
GetComponent<HumanoidAnimatorController>().Crouch(true);
}
float duration = 0.7f * Mathf.Min(fromHandToHit.magnitude, 0.7f);

_hands.SelectedHand.PickupTargetLocker.transform.rotation = _hands.SelectedHand.HandBone.transform.rotation;

GetComponent<HumanoidAnimatorController>().Crouch(false);

Vector3 directionFromTransformToTarget = hitTargetPosition - transform.position;
directionFromTransformToTarget.y = 0f;
Expand All @@ -85,11 +80,34 @@ private void HitAnimate(Vector3 hitTargetPosition)

float timeToRotate = (Quaternion.Angle(transform.rotation, finalRotationPlayer) / 180f) * duration;

// In sequence, we first rotate toward the target, we then start ani
Sequence sequence = DOTween.Sequence();

// In sequence, we first rotate toward the target
sequence.Append(transform.DORotate(finalRotationPlayer.eulerAngles, timeToRotate));
sequence.Insert(timeToRotate*0.4f, AnimateHandPosition(hitTargetPosition, duration, finalRotationPlayer));
sequence.Join(AnimateHandRotation(hitTargetPosition, duration, finalRotationPlayer));

sequence.Join(DOTween.To(() => _lookAtConstraint.weight, x => _lookAtConstraint.weight = x, 1f, timeToRotate));

// A bit later but still while rotating, we start changing the hand position
sequence.Insert(timeToRotate * 0.4f, AnimateHandPosition(hitTargetPosition, duration, finalRotationPlayer));

// At the same time we move the hand, we start rotating it as well.
// We have only half the duration here so that hand is pointing in the right direction approximately when reaching the hit target
sequence.Join(AnimateHandRotation(hitTargetPosition, duration * 0.5f, finalRotationPlayer));

sequence.OnStart(() =>
{
_lookAtTargetLocker.position = hitTargetPosition;
if (_hands.SelectedHand.HandBone.transform.position.y - hitTargetPosition.y > 0.3)
{
GetComponent<HumanoidAnimatorController>().Crouch(true);
}
GetComponent<HumanoidAnimatorController>().MakeFist(true, _hands.SelectedHand.HandType == HandType.RightHand);
});
sequence.OnComplete(() =>
{
GetComponent<HumanoidAnimatorController>().Crouch(false);
GetComponent<HumanoidAnimatorController>().MakeFist(false, _hands.SelectedHand.HandType == HandType.RightHand);
});
}

private Tween AnimateHandRotation(Vector3 hitTargetPosition, float duration, Quaternion finalRotation)
Expand All @@ -100,7 +118,7 @@ private Tween AnimateHandRotation(Vector3 hitTargetPosition, float duration, Qua

Vector3 fromHandToHit = hitTargetPosition - _hands.SelectedHand.HandBone.position;
Quaternion newRotation = Quaternion.FromToRotation(_hands.SelectedHand.PickupTargetLocker.transform.up, transform.InverseTransformDirection(fromHandToHit)) * _hands.SelectedHand.PickupTargetLocker.transform.rotation;
Tween tween = _hands.SelectedHand.PickupTargetLocker.transform.DOLocalRotate(newRotation.eulerAngles, duration / 2, RotateMode.Fast);
Tween tween = _hands.SelectedHand.PickupTargetLocker.transform.DOLocalRotate(newRotation.eulerAngles, duration, RotateMode.Fast);
tween.Pause();

// restore the modified rotation
Expand Down Expand Up @@ -199,15 +217,20 @@ private Tween AnimateHandPosition(Vector3 hitTargetPosition, float duration, Qua
if (value == 2)
{
DOTween.To(() => _hands.SelectedHand.PickupIkConstraint.weight, x => _hands.SelectedHand.PickupIkConstraint.weight = x, 0f, duration);
DOTween.To(() => _lookAtConstraint.weight, x => _lookAtConstraint.weight = x, 0f, duration);
}
};

// Allows showing the trajectory in editor
tween.onUpdate += () =>
{
DebugExtension.DebugWireSphere(_hands.SelectedHand.PickupTargetLocker.position, 0.01f, 2f);
};

tween.Pause();

// We restore the rotation we modified
transform.rotation = currentRotation;
return tween;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,18 @@ public void Crouch(bool crouchState)
_animator.SetBool("Crouch", crouchState);
}

public void MakeFist(bool makeFist, bool isRight)
{
if (makeFist)
{
_animator.SetTrigger(isRight ? "FingerFistRight" : "FingerFistLeft");
}
else
{
_animator.SetTrigger(isRight ? "FingerRelaxedRight" : "FingerRelaxedLeft");
}
}

public void Throw(HandType handtype)
{
if (handtype == HandType.RightHand)
Expand Down

0 comments on commit d731a79

Please sign in to comment.