diff options
author | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
commit | 766cdff5ffa72b65d7f106658d1603f47739b2ba (patch) | |
tree | 34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/FollowLocalPos.cs |
+ init
Diffstat (limited to 'GameCode/FollowLocalPos.cs')
-rw-r--r-- | GameCode/FollowLocalPos.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/GameCode/FollowLocalPos.cs b/GameCode/FollowLocalPos.cs new file mode 100644 index 0000000..194f947 --- /dev/null +++ b/GameCode/FollowLocalPos.cs @@ -0,0 +1,57 @@ +using UnityEngine; + +public class FollowLocalPos : MonoBehaviour +{ + private Vector3 relative; + + private Vector3 relativeForward; + + private Vector3 relativeUp; + + public Transform target; + + public Player targetPlayer; + + private void Start() + { + if ((bool)target && relative == Vector3.zero) + { + Follow(target); + } + } + + private void LateUpdate() + { + if ((bool)target && target.gameObject.activeInHierarchy) + { + base.transform.position = target.TransformPoint(relative); + base.transform.rotation = Quaternion.LookRotation(target.TransformDirection(relativeForward), target.TransformDirection(relativeUp)); + } + else + { + Object.Destroy(base.gameObject); + } + } + + public void Follow(Transform targetTransform) + { + if ((bool)targetTransform) + { + target = targetTransform; + Player component = target.transform.root.GetComponent<Player>(); + Vector3 position = base.transform.position; + if ((bool)component) + { + targetPlayer = component; + base.transform.position -= base.transform.forward * 2f; + Vector3 position2 = target.position; + Vector3 vector = (base.transform.position - target.position).normalized * 1.1f; + position = position2 + vector; + base.transform.position = new Vector3(base.transform.position.x, base.transform.position.y, component.transform.position.z); + } + relative = targetTransform.InverseTransformPoint(position); + relativeForward = targetTransform.InverseTransformDirection(base.transform.forward); + relativeUp = targetTransform.InverseTransformDirection(base.transform.up); + } + } +} |