Unity3D中调用其他GameObject脚本
调用其他实例的脚本是一种很常用的需求,在 Unity3D 中实现起来也有多种方法,
假设在 ScriptB 有一个 DoSomething 函数,如下所示:using UnityEngine;
public class ScriptB : MonoBehaviour
{
public void DoSomething()
{
Debug.Log("Hi there");
}
}在 ScriptA 中如果要访问某个 GameObject 的 ScriptB 脚本中的 DoSomething 函数:
using UnityEngine;
public class ScriptA : MonoBehaviour
{
public ScriptB other;
void Update()
{
other.DoSomething();
}
}
注意 ScriptA 有一个 ScriptB 类型的公共变量,这是一个绝妙的小技巧,如此一
来你便可以通过编辑器拖拽任何含有 ScriptB 这一脚本的 GameObject 至该变量
上(因为是 public 的,所以暴露于编辑器界面中),Unity 会自动识别你需要赋
值的不是那个 GameObject,而 是它所包含的 ScriptB 脚本。
除此之外,如果你不喜欢这种在编辑器中直接赋值的办法,你可以通过
GameObject.Find(“somename”) 来获取 GameObject:GameObject go = GameObject.Find("somegameobjectname");
ScriptB other = (ScriptB) go.GetComponent(typeof(ScriptB));
other.DoSomething();
不过需要注意的是 GameObject.Find()的执行效率非常低,所以如果可能的话还是
尽可能使用“直接赋值法”吧。 楼主是超人 好帖就是要顶 真心顶 很好哦 LZ真是人才 好帖就是要顶 说的非常好 很好哦 不错不错