You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
| 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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |