资源大湿 发表于 2012-11-18 18:54

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()的执行效率非常低,所以如果可能的话还是
尽可能使用“直接赋值法”吧。

xieyuansong 发表于 2017-6-2 17:32

楼主是超人

devilcom 发表于 2017-6-2 17:49

好帖就是要顶

梦之舞 发表于 2017-6-2 17:58

真心顶

ting471238321 发表于 2017-6-2 17:59

很好哦

lionelcg 发表于 2017-6-2 17:36

LZ真是人才

磊锅子 发表于 2017-8-26 10:01

好帖就是要顶

makx 发表于 2017-8-26 10:10

说的非常好

okvn 发表于 2017-8-26 09:52

很好哦

okvn 发表于 2017-8-26 10:02

不错不错
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Unity3D中调用其他GameObject脚本