在实际的脚本编程中,使用查找方法,调用对象,是不可避免的,但是一般耗时的并且不可避免的代码调用,都放在初始化函数当中,
这也就是为什么游戏当中初始化的时间很长的原因,当然也可以避免游戏初始化时间过长,这就要牺牲及时的效率
会使得游戏的过程不流畅,导致游戏所有的动作都需要一定的时间,当然效率和时间当中,要有取舍,这也是不可避免的
不建议对物体进行 activie = false; 处理,因为一旦养成这样的习惯,当大量的脚本挂在物体上面的时候,而且有其他的脚本对activie = false;物体的脚本
进行调用的时候,一旦脚本找不到该物体,就会引起一系列的代码崩溃,使得程序出现错误
如果想使得游戏物体隐藏,最好直接使得该物体的scale(0,0,1)【2D】或者是scale(0,0,0)【3D】
在Unity当中,想要对不同对象的脚本进行调用
物体A挂了脚本A,物体B挂了脚本B
物体B的脚本B想要使用物体A的脚本A
首先要获得当前物体A,然后获得物体A的 组件 脚本A
GameObject.Find()
GameObject root = GameObject.Find(“GameObject”);
GameObject root = GameObject.Find(“GameObject/Cube”);
找到的物体基本上是没有同名的,如果有同名的,则会找到第一个
如果需要找到大量同名的不同对象,参考FindGameObjectsWithTag的使用方法
在LTest里面调用DBtest.cs文件
首先声明
private DBtest dbtest;//当然是否是公有成员,最好是私有成员,这样在调用的时候就不会弄混
DBtest.cs文件内容首先要声明
public string hello;
FindGameObjectsWithTag
var respawns = GameObject.FindGameObjectsWithTag ("enemy");
foreach (var respawn in respawns) [这里应该是foreach,而不是for循环]}
如果标签enemy中,有大量不同的对象,可以遍历每个对象,找到对应的名字或者属性,方法如上所示
Transform.Find()
foreach (Transform t in GetComponentsInChildren
{
print("name:" + t.name + "\n");
if (t.GetComponent
{
t.GetComponent
}
}
Transform EGO = Resources.Load("EmptyGO",typeof(Transform))as Transform;
gob = Instantiate(EGO);
//加载图片,进行接收
//添加加载到的图片资源到2D精灵组件
GameObject.SendMessage("HelloFuction");
GameObject代表你找到的对象,HelloFuction意思是名字是HelloFuction的函数
SendMessageUpwards
它的作用和SendMessage类似,只不过它不仅会向当前对象推送一个消息,也会向这个对象的父对象推送这个消息(记住,是会遍历所有父对象)。
相关资料: