diff options
| author | chai <215380520@qq.com> | 2023-11-02 11:51:31 +0800 |
|---|---|---|
| committer | chai <215380520@qq.com> | 2023-11-02 11:51:31 +0800 |
| commit | 7f493f682503f5186308de7b8f74b5b49233cfe4 (patch) | |
| tree | 8a91e2056bc79788ee4735dce88b8d516ba12beb /GameCode/RotateForwardToRVOVelocity.cs | |
+init
Diffstat (limited to 'GameCode/RotateForwardToRVOVelocity.cs')
| -rw-r--r-- | GameCode/RotateForwardToRVOVelocity.cs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/GameCode/RotateForwardToRVOVelocity.cs b/GameCode/RotateForwardToRVOVelocity.cs new file mode 100644 index 0000000..3bbf35f --- /dev/null +++ b/GameCode/RotateForwardToRVOVelocity.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +public class RotateForwardToRVOVelocity : MonoBehaviour +{ + public Transform transformToRotate; + + public PathfindMovement target; + + public AutoAttack attack; + + public float regularSmoothTime = 0.1f; + + public float attackSmoothTime = 0.05f; + + private Vector3 desiredForward; + + private Vector3 angularVelocityRef; + + private float minSqVelocity = 1.5f; + + private bool attackOverride; + + private void Start() + { + if ((bool)attack) + { + attack.onAttackTriggered.AddListener(OnAttack); + } + desiredForward = transformToRotate.forward; + } + + private void Update() + { + if ((bool)target && target.RVO.velocity.sqrMagnitude > minSqVelocity && !attackOverride) + { + desiredForward = target.RVO.velocity; + desiredForward.y = 0f; + desiredForward.Normalize(); + } + if (Vector3.Angle(transformToRotate.forward, desiredForward) > 3f) + { + if (attackOverride) + { + transformToRotate.forward = Vector3.SmoothDamp(transformToRotate.forward, desiredForward, ref angularVelocityRef, attackSmoothTime); + } + else + { + transformToRotate.forward = Vector3.SmoothDamp(transformToRotate.forward, desiredForward, ref angularVelocityRef, regularSmoothTime); + } + } + else + { + attackOverride = false; + } + } + + private void OnAttack() + { + desiredForward = attack.LastTargetPosition - transformToRotate.position; + desiredForward.y = 0f; + desiredForward.Normalize(); + attackOverride = true; + } +} |
