91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace HighlightPlus {
 | |
| 
 | |
| 	[RequireComponent (typeof(HighlightEffect))]
 | |
| 	[HelpURL("https://kronnect.freshdesk.com/support/solutions/42000065090")]
 | |
| 	public class HighlightManager : MonoBehaviour {
 | |
| 		public LayerMask layerMask = -1;
 | |
| 		public Camera raycastCamera;
 | |
| 		public RayCastSource raycastSource = RayCastSource.MousePosition;
 | |
| 
 | |
| 		HighlightEffect baseEffect, currentEffect;
 | |
| 		Transform currentObject;
 | |
| 
 | |
| 		void OnEnable () {
 | |
| 			currentObject = null;
 | |
| 			currentEffect = null;
 | |
| 			if (baseEffect == null) {
 | |
| 				baseEffect = GetComponent<HighlightEffect> ();
 | |
| 				if (baseEffect == null) {
 | |
| 					baseEffect = gameObject.AddComponent<HighlightEffect> ();
 | |
| 				}
 | |
| 			}
 | |
| 			raycastCamera = GetComponent<Camera> ();
 | |
| 			if (raycastCamera == null) {
 | |
| 				raycastCamera = GetCamera ();
 | |
| 				if (raycastCamera == null) {
 | |
| 					Debug.LogError ("Highlight Manager: no camera found!");
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		void OnDisable () {
 | |
| 			SwitchesCollider (null);
 | |
| 		}
 | |
| 
 | |
| 		void Update () {
 | |
| 			if (raycastCamera == null)
 | |
| 				return;
 | |
| 			Ray ray;
 | |
| 			if (raycastSource == RayCastSource.MousePosition) {
 | |
| 				ray = raycastCamera.ScreenPointToRay (Input.mousePosition);
 | |
| 			} else {
 | |
| 				ray = new Ray (raycastCamera.transform.position, raycastCamera.transform.forward);
 | |
| 			}
 | |
| 			RaycastHit hitInfo;
 | |
| 			if (Physics.Raycast (ray, out hitInfo, raycastCamera.farClipPlane, layerMask)) {
 | |
| 				// Check if the object has a Highlight Effect
 | |
| 				if (hitInfo.collider != currentObject) {
 | |
| 					SwitchesCollider (hitInfo.collider.transform);
 | |
| 				}
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             // no hit
 | |
|             SwitchesCollider (null);
 | |
| 		}
 | |
| 
 | |
| 		void SwitchesCollider (Transform newObject) {
 | |
| 			if (currentEffect != null) {
 | |
| 				currentEffect.SetHighlighted (false);
 | |
|                 currentEffect = null;
 | |
| 			}
 | |
| 			currentObject = newObject;
 | |
|             if (newObject == null) return;
 | |
|             HighlightTrigger ht = newObject.GetComponent<HighlightTrigger>();
 | |
|             if (ht != null && ht.enabled)
 | |
| 				return;
 | |
| 			
 | |
| 			HighlightEffect otherEffect = newObject.GetComponent<HighlightEffect> ();
 | |
| 			currentEffect = otherEffect != null ? otherEffect : baseEffect;
 | |
| 			currentEffect.SetTarget (currentObject.transform);
 | |
| 			currentEffect.SetHighlighted (true);
 | |
| 		}
 | |
| 
 | |
| 		public static Camera GetCamera() {
 | |
| 			Camera raycastCamera = Camera.main;
 | |
| 			if (raycastCamera == null) {
 | |
| 				raycastCamera = FindObjectOfType<Camera> ();
 | |
| 			}
 | |
| 			return raycastCamera;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| } |