您的位置:首页 > 移动开发 > Unity3D

Unity基础知识—GameObject

2020-07-18 04:11 477 查看

文章目录

常用属性和方法

静态方法

方法名 作用
Destroy( GameObject Obj,float f ) 销毁对象,Obj是要销毁的对象,f是时间用来延时销毁,默认是0不写的时候表示立即销毁
DontDestroyOnLoad(GameObject Obj) 加载到新场景时该物体 (Obj) 不会被销毁,但是要小心,要避免在场景切换回来时又执行一次, 最好加一个判断
FindObjectOfType() 按类型查找游戏对象 T 是要查找的类型,比如Transform
FindObjectsOfType() 按类型查找多个游戏对象 T 是要查找的类型,比如Transform
Instantiate(Object original); original:用来做复制操作的对像物体,源对象
Instantiate(Object original, Transform parent); parent:实例化对象的父对象,在完成实例化函数处理后,实例化对象将在父对象下,是父对象的子对象
Instantiate(Object original, Transform parent, bool instantiateInWorldSpace); instantiateInWorldSpace:个值为TRUE,表示实例化对象相对于世界坐标系的位置不变,相对于父对象的坐标值变了。为false,表示实例化对象相对于父对象的坐标值不变,但在世界坐标系中的位置变了。
Instantiate(Object original, Vector3 position, Quaternion rotation); position:实例化的对象的位置坐标,rotation:实例化的对象的旋转坐标(旋转四元数)
Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent); 实例化的对象的时候传入坐标值、角度值并设置父对象

GameObject的GetInstanceID()和GetHashCode()

这两个方法都是获取游戏对象的唯一ID标识。在做对象缓存池时,可以用到。
同一个Prefab,不管是Inspector挂上去的还是用Resource.Load()动态加载的,这个ID都是一样的。只有当Instantiate成对象之后,每个对象间的ID才会有区别。
不同的Prefab,ID是不一样的
两个方法获取到的值是一样的

属性

名称 作用
activeInHierarchy 表示gameobject在场景中的是否显示,也就是说要使这个值为true,这个物体及其所有父物体(及祖先物体)的activeself状态都为true,若有一个父物体为false则为false。
activeSelf 物体本身的active状态,对应于其在inspector中的checkbox是否被勾选。
isStatic 这个是用于遮挡剔除,看是否一个对象能被看做一个静态的遮挡。
layer 游戏对象的层
scene 游戏对象的场景
tag 游戏对象的标签
transform 游戏对象的transform组件

Layer的概念:
一方面相机中可以设置是否渲染某layer

另一方面可以再raycast中设置是否忽略检测某layer。

layermask参数设置的一些总结:
1 << 10 打开第10的层。
~(1 << 10) 打开除了第10之外的层。
~(1 << 0) 打开所有的层。
(1 << 10) | (1 << 8) 打开第10和第8的层。

方法

名称 作用
AddComponent() 添加组件,T 是要添加的组件类型
BroadcastMessage() 将消息传递给对象和其所有子对象的所有脚本
SendMessage() 将消息传递给对象的所有脚本
SendMessageUpwards() 将消息传递给对象和其所有父对象的所有脚本
SetActive(bool b) 改变的是物体自身的activeSelf状态,所以,对一个物体SetActive时,其在场景中可能不会被激活,因为其祖先物体可能存在未被激活的。
CompareTag(string s) 判断标签是否和 s 相同
GetComponent() 获得 T 组件的信息
GetComponentst() 获得多个 T 组件的信息
GetComponentsInChildren(bool b); T是组件类型 b为true,游戏对象下的子物体激活的没激活的都会被拿到,包括游戏对象本身 b为false 没激活的不会被拿到
GetComponentsInParent(bool b); 同上,但是获取的是父对象

”SendMessage“、”SendMessageUpwards“、”BroadcastMessage“他们都有同样的参数

名称 作用
methodName 用来接收的方法名
value 是object类型,若是多个参数则可以通过传入object数组来进行
options 可以不加,用来抛出错误

利用RequireComponent添加一个组件

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Transform))]
[RequireComponent(typeof(PlayerController))]

RequireComponent作用是这个类一定需要哪些组件,如果目前这些组件没有被加上,就自动加上。

静态方法

名称 作用
CreatePrimitive() 创建基本物体(比如正方体) 例如:
CreatePrimitive(PrimitiveType.Plane);
Find(String s) 通过对象Name来查找一个游戏对象,但是不能找到非激活的对象
FindWithTag(String s) 通过标签来查找一个游戏对象,但是不能找到非激活的对象
FindGameObjectsWithTag(String s) 通过标签来查找多个游戏对象,但是不能找到非激活的对象

拓展HideFlags

名称 作用
None 默认情况,正常可见对象
HideInHierarchy 在Hierarchy视图中隐藏,并且如果它保存在一个资源中,不会显示在Project视图中
HideInInspector 在Inspector视图中隐藏,无法查看其相关的组件
DontSaveInEditor
NotEditable 对象可以显示在Inspector视图中,但是不能被编辑
DontSaveInBuild
DontUnloadUnusedAsset
DontSave 对象不会保存到场景中,当一个新的场景创建的时候也不会被销毁
HideAndDontSave 是HideInHierarchy和DontSave的组合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: