unity 中用gameobject monbeahiviour prefab结构有啥优缺点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 中用gameobject monbeahiviour prefab结构有啥优缺点相关的知识,希望对你有一定的参考价值。

参考技术A

static GameObject CreatePrimitive(PrimitiveType type);


可以根据PrimitiveType创建五种类型的基础模型


PrimitiveType.Plane,PrimitiveType.Cube,PrimitiveType.Sphere,PrimitiveType.Capsule,PrimitiveType.Cylinder


Unity3D提供一种被称为Prefab的预置对象,它是以文件的形式保存在硬盘上的一个GameObject,它里面可能包含了各种设置,组件,还有一些脚本。Prefab允许我们在不同的Scene,甚至Project中使用同一个对象,例如我实现了一个子弹,通过打包成Prefab,我可以在另外一个游戏里面直接使用它。


当一个Prefab对象被修改的时候,它的所有实例都会相应地被修改


在代码里面动态地实例化一个Prefab对象


public GameObject obj;

obj = Instantiate( obj  );


要先创建一个公有变量,然后把这个Prefab拖到这个变量上,然后才可以用它来实例化对象(我感到一种蛋蛋的忧伤,能不拖吗)


通过Resources这个类的静态方法可以将Prefab对象动态加载进来,创建GameObject


GameObject之间的通讯,在游戏中,我们往往需要知道其他对象的一些信息,所以我们经常需要动态地查询另外一个GameObject


    查找父节点 transform.parent

2. 查找子节点 transform.Find(quot;namequot;);  transform.Find(quot;Arm/Hand/Fingerquot;); 没有找到会返回null,名字如果包含quot;/quot;字符将像路径一样穿越层次


3. 查找场景中的其他GameObject 

GameObject.Find 从Scene下开始查找,根据GameObject的名字进行查找,允许使用quot;/quot;穿越层次查找,

GameObject.FindWithTag根据Tag查找一个GameObject,

GameObject.FindGameObjectsWithTag 根据Tag批量查找GameObject


GameObject的name和Tag可以直接设置,但Tag需要在标签管理器先定义一个Tag,这个Tag才可用,你不能将一个未定义的Tag赋给GameObject的Tag变量


最后还有一种搓搓的通讯方法,通过Message来调用其他GameObject,默认是垃圾群发,也可以将一个Object穿进去,然后调它的方法


methodName为方法名,value为方法的参数,options表示是否必须有对象接收该消息(如果是,且没有对象接受,u3d报错)


//调用本级别所有的GameObject上所有脚本的methodName方法

void SendMessage(string methodName, object value = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);


//朝本级别和上级父节点发送调用命令

void SendMessageUpwards()


//目标是本级别和全部子节点

void BroadcastMessage()


调用Object的Destroy方法可以销毁一个GameObject,组件,或者资源。这是一个静态方法,函数的原型为 static void Destroy(Object obj, float t = 0.0F );


可以通过将this传入,销毁自己。


GameObject的成员变量很多

本回答被提问者采纳

unity基础(GameObject transform)

参考技术A GameObject是unity所有实体的基类

常用的函数

1.GameObject.Find(“Cube”);

可以查找并获取一个指定的name为Cube的对象。然后进行其他操作。

2.GameObject.FindWithTag(“_cube");

和Find函数相似,不同之处在于该方法是通过标签(tag)值查找

3.GameObject.SetActive(true);

激活/停用此游戏对象(如下图1.1所示打钩(true)的时候该游戏对象就属于激活状态,去掉打钩(false)就属于停用状态即游戏对象也就不会显示在你的视野内)

4.GameObject.GetComponent

获取组件:如果这个游戏对象附件了一个type名称类型的组件,则返回该组件,否则为空。

hinge=gameObject.GetComponent("HingeJoint")asHingeJoint;

hinge.useSpring=false;

是一个每个对象都用的组件,用于储存并操控物体的位置、旋转和缩放。(每一个Transform可以有一个父级,允许你分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。他们也支持计数器(enumerator),因此你可以使用循环遍历子对象。)

1.transform.Find

是通过名字查找到子对象并返回他。

2.Transform.Translate  平移

向莫一个方向进行移动多少的距离

移动变换由x沿着x轴,y沿着y轴,z沿着z轴

transform.Translate(0,0, Time.deltaTime);

transform.Translate(0, Time.deltaTime,0, Space.World);

3.Transform.parent

通过该方法可以找到父对象,然后可以进行对父对象操作(如改变父对象名字)

_child.gameObject.transform.parent.gameObject.name = "ParentBox";

4.Transform.root

返回最根部父类进行操作

string name=_child.gameObject.transform.root.gameObject.name;

Debug.Log(name);

5.Transform.position

在世界坐标系中transform的·位置

6.Transform.rotation

Unity以四元数储存旋转角度。要旋转一个对象使用Transform.Rotate,使用Transform.eulerAngles以欧拉角设置旋转角度。

7.Transform.localScale

相对于父级对象进行缩放(局部缩放)

transform.localScale = new Vector3(0.5f,0.5f, 0.5f);

(为=时是对该物体进行缩小到后面参数的大小,+=时是对该物体进行放大)

8.Transform.forward

向前在世界空间坐标,变换的蓝色轴。也就是z轴。
在世界空间坐标,变换的蓝色轴。也就是z轴。

以上是关于unity 中用gameobject monbeahiviour prefab结构有啥优缺点的主要内容,如果未能解决你的问题,请参考以下文章

Unity中用AB包加载出来物体,如何将其localRotation设置为vector3(0,0,0);

如何在Unity3d中实现和网页数据的交互

图解unity下gameobject和transform的区别和关联

unity基础(GameObject transform)

unity 我的动画总是只播放第一帧无限卡

Unity Gameobject Transform