using System; using UnityEngine; public interface ILockOnTarget { public float lockonTargetRadius { set; get; } public bool lockonDebug { set; get; } public float lockonRaycastVerticalOffset { set; get; } Transform transform {get;} GameObject gameObject{ get; } abstract void OnTargetDelete(); void Help(){ SafelyDeleteTarget(); } public Vector3 GetReticlePosition(){ float upValue = 0f; if (gameObject.GetComponent()){ Bounds objectBounds = gameObject.GetComponent().bounds; upValue = objectBounds.size.y; upValue = 4f; } Vector3 reticlePosition = new Vector3(transform.position.x, transform.position.y + upValue, transform.position.z); return reticlePosition; } public void SafelyDeleteTarget(){ // gameObject. foreach (LockOnManager.ActiveLockOnTarget target in LockOnManager.Instance.activeTargets) { if (target.gameObject == this.gameObject) { GameObject clone = new GameObject{name = $"Target Clone of {gameObject.name}", transform = { position = transform.position}}; target.gameObject = clone; target.cinemachineTarget.Object = clone.transform; LockOnManager.Instance.QueueTargetRemoval(clone, true); } } } } public class PlayerCamera : MonoBehaviour{ void Start(){ } // Update is called once per frame void LateUpdate(){ } }