找回密码
 立即注册
查看: 8166|回复: 100

[脚本] Unity3D中调用其他GameObject脚本

[复制链接]
发表于 2012-11-18 18:54 | 显示全部楼层 |阅读模式

调用其他实例的脚本是一种很常用的需求,在 Unity3D 中实现起来也有多种方法,
假设在 ScriptB 有一个 DoSomething 函数,如下所示:
  1. using UnityEngine;

  2. public class ScriptB : MonoBehaviour
  3. {
  4. public void DoSomething()
  5. {
  6. Debug.Log("Hi there");
  7. }
  8. }
复制代码
在 ScriptA 中如果要访问某个 GameObject 的 ScriptB 脚本中的 DoSomething 函数:

  1.         using UnityEngine;

  2.         public class ScriptA : MonoBehaviour
  3.         {
  4.             public ScriptB other;
  5.             void Update()
  6.             {
  7.                other.DoSomething();
  8.             }
  9.         }
复制代码
注意 ScriptA 有一个 ScriptB 类型的公共变量,这是一个绝妙的小技巧,如此一
来你便可以通过编辑器拖拽任何含有 ScriptB 这一脚本的 GameObject 至该变量
上(因为是 public 的,所以暴露于编辑器界面中),Unity 会自动识别你需要赋
值的不是那个 GameObject,而        是它所包含的 ScriptB 脚本。

除此之外,如果你不喜欢这种在编辑器中直接赋值的办法,你可以通过
GameObject.Find(“somename”)        来获取 GameObject:
  1. GameObject go = GameObject.Find("somegameobjectname");

  2. ScriptB other = (ScriptB) go.GetComponent(typeof(ScriptB));

  3. other.DoSomething();
复制代码
不过需要注意的是 GameObject.Find()的执行效率非常低,所以如果可能的话还是
尽可能使用“直接赋值法”吧。
发表于 2017-6-2 17:32 | 显示全部楼层
楼主是超人
发表于 2017-6-2 17:49 | 显示全部楼层
好帖就是要顶
发表于 2017-6-2 17:58 | 显示全部楼层
真心顶
发表于 2017-6-2 17:59 | 显示全部楼层
很好哦
发表于 2017-6-2 17:36 | 显示全部楼层
LZ真是人才
发表于 2017-8-26 10:01 | 显示全部楼层
好帖就是要顶
发表于 2017-8-26 10:10 | 显示全部楼层
说的非常好
发表于 2017-8-26 09:52 | 显示全部楼层
很好哦
发表于 2017-8-26 10:02 | 显示全部楼层
不错不错
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-10 21:04 , Processed in 0.297536 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表