ооооо
This commit is contained in:
95
Assets/Standard Assets/Utility/ActivateTrigger.cs
Normal file
95
Assets/Standard Assets/Utility/ActivateTrigger.cs
Normal file
@ -0,0 +1,95 @@
|
||||
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);
|
||||
Destroy(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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user