69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using UnityEngine;
 | 
						|
 | 
						|
public class ActivateTrigger : MonoBehaviour
 | 
						|
{
 | 
						|
    public enum Mode
 | 
						|
    {
 | 
						|
        Trigger = 0, // Just broadcast the action on to the target
 | 
						|
        Replace = 1, // replace target with source
 | 
						|
        Activate = 2, // Activate the target GameObject
 | 
						|
        Enable = 3, // Enable a component
 | 
						|
        Animate = 4, // Start animation on target
 | 
						|
        Deactivate = 5 // Decativate target GameObject
 | 
						|
    }
 | 
						|
 | 
						|
    /// The action to accomplish
 | 
						|
    public Mode action = Mode.Activate;
 | 
						|
 | 
						|
    /// The game object to affect. If none, the trigger work on this game object
 | 
						|
    public Object target;
 | 
						|
    public GameObject source;
 | 
						|
    public int triggerCount = 1;///
 | 
						|
    public bool repeatTrigger = false;
 | 
						|
 | 
						|
    void DoActivateTrigger()
 | 
						|
    {
 | 
						|
        triggerCount--;
 | 
						|
 | 
						|
        if (triggerCount == 0 || repeatTrigger)
 | 
						|
        {
 | 
						|
            Object currentTarget = target != null ? target : gameObject;
 | 
						|
            Behaviour targetBehaviour = currentTarget as Behaviour;
 | 
						|
            GameObject targetGameObject = currentTarget as GameObject;
 | 
						|
            if (targetBehaviour != null)
 | 
						|
                targetGameObject = targetBehaviour.gameObject;
 | 
						|
 | 
						|
            switch (action)
 | 
						|
            {
 | 
						|
                case Mode.Trigger:
 | 
						|
                    targetGameObject.BroadcastMessage("DoActivateTrigger");
 | 
						|
                    break;
 | 
						|
                case Mode.Replace:
 | 
						|
                    if (source != null)
 | 
						|
                    {
 | 
						|
                        Object.Instantiate(source, targetGameObject.transform.position, targetGameObject.transform.rotation);
 | 
						|
                        DestroyObject(targetGameObject);
 | 
						|
                    }
 | 
						|
                    break;
 | 
						|
                case Mode.Activate:
 | 
						|
                    targetGameObject.active = true;
 | 
						|
                    break;
 | 
						|
                case Mode.Enable:
 | 
						|
                    if (targetBehaviour != null)
 | 
						|
                        targetBehaviour.enabled = true;
 | 
						|
                    break;
 | 
						|
                case Mode.Animate:
 | 
						|
                    targetGameObject.animation.Play();
 | 
						|
                    break;
 | 
						|
                case Mode.Deactivate:
 | 
						|
                    targetGameObject.active = false;
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    void OnTriggerEnter(Collider other)
 | 
						|
    {
 | 
						|
        DoActivateTrigger();
 | 
						|
    }
 | 
						|
} |