|  |  |  |  | using System; | 
					
						
							|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace AllIn1VfxToolkit | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public class AllIn1LookAt : MonoBehaviour | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         //Otherwise we just update on Start | 
					
						
							|  |  |  |  |         [SerializeField] private bool updateEveryFrame; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         [Space, Header("Choose Target")] | 
					
						
							|  |  |  |  |         [SerializeField] private bool targetIsMainCamera; | 
					
						
							|  |  |  |  |         [SerializeField] private Transform target; | 
					
						
							|  |  |  |  |          | 
					
						
							|  |  |  |  |         private enum FaceDirection { | 
					
						
							|  |  |  |  |             Forward, | 
					
						
							|  |  |  |  |             Up, | 
					
						
							|  |  |  |  |             Right | 
					
						
							|  |  |  |  |         }; | 
					
						
							|  |  |  |  |         [Space, Header("Look At Direction")] | 
					
						
							|  |  |  |  |         [SerializeField] private FaceDirection faceDirection; | 
					
						
							|  |  |  |  |         [SerializeField] private bool negateDirection; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void Start() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if(targetIsMainCamera) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if(!(Camera.main is null)) target = Camera.main.transform; | 
					
						
							|  |  |  |  |                 if(target == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Debug.LogError("No main camera was found, AllIn1LookAt component of " + gameObject.name + " will now be destroyed. Please double check your setup"); | 
					
						
							|  |  |  |  |                     Destroy(this); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if(target == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Debug.LogError("No target was assigned, AllIn1LookAt component of " + gameObject.name + " will now be destroyed. Please double check your setup"); | 
					
						
							|  |  |  |  |                     Destroy(this); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |             if(!updateEveryFrame) LookAtCompute(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void Update() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if(updateEveryFrame) LookAtCompute(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void LookAtCompute() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             Vector3 lookAtVector = (target.position - transform.position).normalized; | 
					
						
							|  |  |  |  |             if(negateDirection) lookAtVector = -lookAtVector; | 
					
						
							|  |  |  |  |             switch(faceDirection) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 case FaceDirection.Forward: | 
					
						
							|  |  |  |  |                     transform.forward = lookAtVector; | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case FaceDirection.Up: | 
					
						
							|  |  |  |  |                     transform.up = lookAtVector; | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case FaceDirection.Right: | 
					
						
							|  |  |  |  |                     transform.right = lookAtVector; | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |