You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.4 KiB
95 lines
3.4 KiB
using System; |
|
using UnityEngine; |
|
using Object = UnityEngine.Object; |
|
|
|
namespace UnityStandardAssets.Utility |
|
{ |
|
public class ActivateTrigger : MonoBehaviour |
|
{ |
|
// A multi-purpose script which causes an action to occur when |
|
// a trigger collider is entered. |
|
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 |
|
} |
|
|
|
public Mode action = Mode.Activate; // The action to accomplish |
|
public Object target; // The game object to affect. If none, the trigger work on this game object |
|
public GameObject source; |
|
public int triggerCount = 1; |
|
public bool repeatTrigger = false; |
|
|
|
|
|
private void DoActivateTrigger() |
|
{ |
|
triggerCount--; |
|
|
|
if (triggerCount == 0 || repeatTrigger) |
|
{ |
|
Object currentTarget = target ?? gameObject; |
|
Behaviour targetBehaviour = currentTarget as Behaviour; |
|
GameObject targetGameObject = currentTarget as GameObject; |
|
if (targetBehaviour != null) |
|
{ |
|
targetGameObject = targetBehaviour.gameObject; |
|
} |
|
|
|
switch (action) |
|
{ |
|
case Mode.Trigger: |
|
if (targetGameObject != null) |
|
{ |
|
targetGameObject.BroadcastMessage("DoActivateTrigger"); |
|
} |
|
break; |
|
case Mode.Replace: |
|
if (source != null) |
|
{ |
|
if (targetGameObject != null) |
|
{ |
|
Instantiate(source, targetGameObject.transform.position, |
|
targetGameObject.transform.rotation); |
|
DestroyObject(targetGameObject); |
|
} |
|
} |
|
break; |
|
case Mode.Activate: |
|
if (targetGameObject != null) |
|
{ |
|
targetGameObject.SetActive(true); |
|
} |
|
break; |
|
case Mode.Enable: |
|
if (targetBehaviour != null) |
|
{ |
|
targetBehaviour.enabled = true; |
|
} |
|
break; |
|
case Mode.Animate: |
|
if (targetGameObject != null) |
|
{ |
|
targetGameObject.GetComponent<Animation>().Play(); |
|
} |
|
break; |
|
case Mode.Deactivate: |
|
if (targetGameObject != null) |
|
{ |
|
targetGameObject.SetActive(false); |
|
} |
|
break; |
|
} |
|
} |
|
} |
|
|
|
|
|
private void OnTriggerEnter(Collider other) |
|
{ |
|
DoActivateTrigger(); |
|
} |
|
} |
|
}
|
|
|