Unity3d获取游戏对象的几种方法

Unity3d获取游戏对象的几种方法,第1张

根据自己的理解写一点吧,纯手写。第一题:

1,脚本中定义public变量,然后在检视面板(inspector)中拖拽赋值获取

2,使用GameObjectFind+游戏物体名字获取如:GameObjectFind("cube");

3,使用GameObjectFindGameObjectWithTag或者GameObjectFindWithTag+游戏物体标签的方式获取

3,很少用的一个FindObjectOfType+游戏对象类型获取,例如:GUITexture s = FindObjectOfType(typeof(GUITexture));

4,(这个应该也算)对于实例化(克隆)出来的游戏物体,可以直接获得控制全:例如:

game =(GameObject) Instantiate(prefab,transformposition,transformrotation);

第二题:名字和标签主要作用是识别物体。标签还可以对场景中的游戏物体分类(layer:层也有这个功能)

不太清楚实际情况,但是,

(1)你这样写的前提是,A 和 B 必须同时实例化到同一个gameObject上(这两个脚本得同时应用到一个物体上),否则你的a = GetComponent<A>()肯定为null ,因为B调用这个Get,而他本身所处的gameObject本没有A这个脚本组件,A的实例在另一个物体上。 估计这是你报错的一个原因。

(2)用static声明全局变量似乎没必要,static的作用应该是让变量在类被实例之前就得到实例化。用static的话,那么应该是要达到这样的目的,即用类名直接调用变量或函数(Mathf类里面的很多数学数值和函数都是这样的例子),你这个情况如果用了static那就最好应该为了这样的目的:

ARoadnodecount

(3)实时 *** 作数组,最好用List<>,具体可以参考msdn List的用法,

(4)如果你的目的只是为了让B能够通过代码访问A的变量,一般的public 变量就足够,其余你只需要解决B通过何种途径正确访问A。比如,你可以把A做成singleton:

static A instance;

Awake(){ instance = this;}),让A有一个static实例指向自己, 那B就直接用 Ainstance 来获取A的实例,这样就可以在任何地方直接访问A的变量和函数。

又或者用 GameObjectFind("名字") 遍历所场景中所有有的对象,最后用GetComponent找到A的实例,这个方法效率很低,最好是在初始化函数里调用。

Start方法。Start方法在游戏场景加载时被调用,在该方法内可以写一些游戏场景初始化之类的代码,unity中的脚本分为不同的方法,当游戏场景加载时被调用的是Start方法。unity中的脚本可以理解为附加在游戏对象上用于定义游戏对象行为的指令代码,脚本和组件的用法相同,必须绑定在游戏对象上才能开始其生命周期。

以上就是关于Unity3d获取游戏对象的几种方法全部的内容,包括:Unity3d获取游戏对象的几种方法、unity中怎样调用其他脚本变量、unity中的脚本分为不同的方法,当游戏场景加载时被调用的是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10197097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存