简体   繁体   English

停用其他游戏对象的脚本

[英]Deactivate other gameObject's script

I am using one script for multiple gameObjects.我正在为多个游戏对象使用一个脚本。 If my current gameObject is triggered, I want the script to be deactivated on all other gameObjects except for current gameObject.如果我当前的游戏对象被触发,我希望在除当前游戏对象之外的所有其他游戏对象上停用该脚本。 I can set current script to be active after I have disabled it.禁用后,我可以将当前脚本设置为活动状态。 But I do not want it to be enabled as false at all.但我根本不希望它被启用为假。 How do I achieve this?我如何实现这一目标?

public MyScript[] myScript;

void Start () {
        myScript= FindObjectsOfType (typeof (MyScript)) as MyScript[];
    }

void Activated() {
        for (int i = 0; i < myScript.Length; i++) {
            myScript[i].enabled = false; //All other scripts except for current gameObject's script
        }
  1. Event System事件系统

Something like this.像这样的东西。

public class MyScript : MonoBehaviour
{
    public static event Action<GameObject> Triggered;

    private void Start()
    {
        MyScript.Triggered += OnTriggered;
    }

    private void OnTriggered(GameObject triggeredGameObject)
    {
        if (triggeredGameObject != gameObject)
        {
            enabled = false;
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        Triggered?.Invoke(gameObject);
    }
}
  1. Your Way你的方式

You need to pass your triggered gameobject into the Activated function somehow so you make a comparison您需要以某种方式将触发的游戏对象传递给 Activated function 以便进行比较

    public MyScript[] myScript;
    
    void Start () {
            myScript= FindObjectsOfType (typeof (MyScript)) as MyScript[];
        }
    
    void Activated(GameObject triggeredGameObject)// pass the triggered gameobject here
 {
            for (int i = 0; i < myScript.Length; i++) 
{
           if(triggeredGameObject != myScript[i].gameObject)
                myScript[i].enabled = false;
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM