unity我如何在代码中禁用程序中的当前脚本或任何其他脚本
本文关键字:脚本 其他 程序 任何 代码 unity | 更新日期: 2023-09-27 18:27:56
假设我有三个脚本,分别是BOB、ABE、GUY
在脚本BOB中,我想启用ABE,并禁用GUY。。。使用c,如何在统一中实现这一点?
如果您在同一个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功能