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(); 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); } } }