unity如何在代码中禁用程序中的当前脚本或任何其他脚本?

时间:2015-12-22 20:51:52

标签: c# unity3d scripting

说我有3个名为BOB,ABE,GUY

的脚本

在脚本BOB中,我想启用ABE,并禁用GUY ...如何使用c#实现统一?

3 个答案:

答案 0 :(得分:1)

首先,您需要知道要启用/禁用脚本的gameObject。例如,如果BOB,ABE和GUY都在同一个对象上,你可以在BOB的代码中说:

this.GetComponent<ABE>().enabled = false; //disable ABE
this.GetComponent<GUY>().enabled = true; //enable GUY

如果您尝试禁用的脚本位于不同的游戏对象上,则必须拥有该对象。参见:

GameObject.Find
GameObject.FindWithTag

或许如果您正在处理碰撞,请参阅:

OnTriggerEnter
OnCollisionEnter

答案 1 :(得分:1)

如果您已将所有三个脚本都添加到同一个GameObject中,那么我会说 James Hogle 回答。

如果所有脚本都不同GameObjects,那么要在GUY中停用BOB,您可以在BOB中使用以下代码

GUY guy = FindObjectOfType<GUY>();
guy.enabled = false;

同样,您可以使用它来设置true或将其设为enable

答案 2 :(得分:0)

由于性能(尤其是在运行时),最好避免在Unity中使用GameObject.Find以及GameObject.GetComponent。

一个更好的解决方案是使ABE和GUY均为静态:

GUY.cs

public class GUY : MonoBehaviour {

    public static GUY guy;

    void Awake () {
        guy = this;
    }
}

ABE.cs:

public class ABE : MonoBehaviour {

    public static ABE abe;

    void Awake () {
        abe = this;
    }
}

现在,由于您是用这种方式(静态)编写其他脚本,因此您只需执行以下操作即可:

BOB.cs:

    // Enable ABE
    ABE.abe.enabled = true;
    // Disable GUY
    GUY.guy.enabled = false;

有关此主题的更多信息:

Avoid using GameObject.Find

Slow/Bad Unity function for performance