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

本文关键字:脚本 其他 程序 任何 代码 unity | 更新日期: 2023-09-27 18:27:56

假设我有三个脚本,分别是BOB、ABE、GUY

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

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

如果您在同一个GameObject中附加了所有三个脚本,那么我会说使用James Hogle答案。

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

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

类似地,您可以使用它来设置true或使其成为enable

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

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

如果你试图禁用的脚本位于不同的gameObject上,那么你必须掌握该对象。参见:

游戏对象。查找
GameObject.FindWithTag

或者,如果你正在处理碰撞,请参阅:

OnTriggerEnter
OnCollisionEnter

由于性能原因(尤其是在运行时),最好避免使用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;

关于此主题的进一步阅读:

避免使用GameObject。查找

性能的慢/坏Unity功能