unity3d脚本之基础类(一)
Transfrom类
(一)作用:主要用于描述物体的位置、旋转、移动、缩放。
(1)每个物体都有一个Transfrom组件。
(2)Transfrom组件的所有属性都是相对其父物体进行衡量的
(3)如果物体没有父物体,这些属性则相对于世界坐标进行计算
(二)获取方式:
(1)先获取 GameObject ,然后再获取 transform;
GameObject a = GameObject.Find()—>a.transform
GameObject b = GameObject.Find()—>b.GetComponent<>()
注意使用GameObject.Find()方法的时候,查找的物体必须是active的,否则会发生空指针的情况
(2)直接挂载在相应的对象上(当脚本直接挂载在相应的对象上时,可以直接拿到 GameObject,无需再用 Find 方法);
- 小写的 gameObject;例如 :
Transform a = gameObject.transform
- this;例如:
Transform b = this.transform
- 直接写 transform 就可以拿到,这个算是 Unity 给出的语法糖;例如 :
Transform c = transform
(三)成员变量:(没有local前缀的都是世界坐标)
position:在世界空间坐标transform的位置。
localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。
eulerAngles:世界坐标系中的旋转(欧拉角)。
localEulerAngles:相对于父级的变换旋转角度。
right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)
up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)
forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)
rotation:世界坐标系中的旋转(四元数)。
localRotation:相对于父级的变换旋转角度。
localScale:相对于父级的缩放比例。
parent:父对象Transform组件。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
root:对象层级关系中的根对象的Transform组件。
childCount:子对象数量。
lossyScale:全局缩放比例(只读)。
(四)成员函数:(常用)
Translate:向某方向移动物体多少距离。
Rotate:按照指定欧拉角旋转。
RotateAround:按照多少度在世界坐标的某位置轴旋转物体。
LookAt:旋转物体使z轴指向目标物体。
Find:通过名字查找子物体并返回它。如果没有查找到子物体名字,将返回null。如果名字包含“/”字符它将向路径一样穿越层次。
Component 组件类
(一)作用:
最最重要的功能:component类提供了查找(当前物体后代、先辈)组件的功能
(二)成员变量:Component常用属性
gameObject 组件附加的游戏对象。组件总是被附加到游戏对象上。
transform 附加到此游戏对象Transform组件(如果没有则为空)。
tag 此游戏对象的标签。
collider 附加到此游戏对象的Collider (如无附加则为空)。
renderer 附加到此游戏对象Renderer组件(如果没有则为空)。
rigidbody 附加到此游戏对象Rigidbody组件(如果没有则为空)。
(三)成员函数:(Component常用方法)
找自身组件:
Getcomponent< type>() //返回游戏对象上type类型的组件
GetComponents < type>()//查找 [自身] 所有父类是Component的,type类型的组件 即 查找所有挂在物体上的组件
找后代组件(DFS):
GetComponentInChildren< type>() 获取后代物体中某一组件(某一组件在后代中,但不确定是哪一个后代,可用它查找)
GetComponentsInChildren< type>() //获取后代物体的指定组件(从自身开始查找)
找先辈:
GetComponentInParent 。。。同上
GetComponentsInParent 。。。同上
if(GUILayout.Button("改变颜色"))
{
//返回游戏对象上type类型的组件,若没有,返回无
this.GetComponent<MeshRenderer>().material.color = Color.red;
}
if(GUILayout.Button("GetComponents"))
{
//查找自身所有父类是Component的组件,即可查找出所有挂在物体上的组件
var allComponent=this.GetComponents<Component>();
foreach (var item in allComponent)
Debug.Log(item.GetType());
}
if (GUILayout.Button("GetComponentsInChildren"))
{
//获取后代物体的指定组件(从自身开始查找)
var allComponent = this.GetComponentsInChildren<MeshRenderer>();
foreach (var item in allComponent)
item.material.color = Color.blue;
}
if (GUILayout.Button("GetComponentInChildren"))
{
//深度优先搜索
//获取后代物体中某一组件(某一组件在后代中,但不确定是哪一个后代,可用它查找)
var item = this.GetComponentInChildren<AudioSource>();
item.loop = true;
}
GameObject 游戏对象
(一)作用:
主要作用:对游戏对象进行:激活/禁用、添加组件;通过Tag查找物体
(二)常见用法
有关激活/禁用游戏对象
GameObject.activeInHierarchy//【只读】场景中游戏对象实际被激活状态
GameObject.activeSelf//【只读】场景中游戏对象局部被激活状态(父辈禁用,即使自己的勾还有也是被禁用状态)
GameObject.SetActive(true/false)//激活、停用 此游戏对象
//【只读】场景中游戏对象实际被激活状态
Debug.Log("activeInHierarchy:"+ objectDemo.activeInHierarchy);
//【只读】场景中游戏对象局部被激活状态(就是面板上的小勾勾的状态)
//有的时候,他爸爸被禁用了,他也被禁用了
Debug.Log("activeSelf:"+ objectDemo.activeSelf);
//激活、停用 此游戏对象
objectDemo.SetActive(false);
有关给游戏对象添加组件
怎样用代码添加一个光?/怎么给物体添加组件?
首先,要清楚,不能直接new一个组件,
light = new Light();//错错错错错错错错错错错错错错错添加组件不能直接自己 new
要用AddComponent方法加,此方法里面会自己对相关组件实例化
gameObject.AddComponent< Type >()//返回值即此组件的引用
//1、创建物体
GameObject lightGO = new GameObject();// 嗯,只有GameObject我们可以自己new
//2、添加组件
//这里的返回值就是对这个light 的 引用
Light light=lightGO.gameObject.AddComponent<Light>();
light.color = Color.red;
light.type = LightType.Point;//点光源
//或者直接给自身游戏对象添加组件
this.gameObject.AddComponent<Light>();
有关通过Tag查找游戏对象
[慎用]GameObject.Find(“游戏对象名称”);//在场景中根据名称查找物体,往上、下多少辈都能查找 相当于大海里捞针
—— ps:transform.Find(“游戏对象名称”);//这个可以用只找孩子
GameObject.FindGameObjectsWithTag(“Enemy”); //获取所有使用该标签的物体(游戏场景里的所有),返回的是Gameobject数组
[首选]GameObject.FindWithTag(“Enemy”);//获取使用该标签的物体(单个应该是从上往下数首个)
//在场景中根据名称查找物体(慎用)
//往下多少辈都能查找相当于大海里捞针
GameObject.Find("游戏对象名称");
//这个可以用只找孩子
transform.Find("游戏对象名称");
//获取所有使用该标签的物体(游戏场景里的所有)
//返回的是Gameobject数组
GameObject[] allEnemy = GameObject.FindGameObjectsWithTag("Enemy");
print(allEnemy.Length);
//获取使用该标签的物体(单个应该是从上往下数首个)
//多用这个,毕竟Tag比物体名字少多了
GameObject obj=GameObject.FindWithTag("Enemy");
print(obj.name);
Object 基类
(一)作用:
- 根据组件类型查找对象;
- 克隆物体;
- 加载场景时保留目标对象;
- 删除游戏对象、组件或资源,是所有类的基类
(二)常见用法
- Object常用属性
name //访问到游戏物体的名称
- Object常用方法
都是静态方法可以直接用
DontDestroyOnLoad();//加载新场景时使目标对象不会被自动销毁
FindObjectOfType< >();//根据类型查找【对象】
FindObjectsOfType< >();// (没有父子物体的限制)
Instantiate();//克隆原始物体并返回克隆物体
Destroy(); //【删除一个游戏对象、组件或资源】
//加载新场景时使目标对象不会被自动销毁
DontDestroyOnLoad(transform.gameObject);
//根据类型查找【对象】 (没有父子物体的限制)
Object.FindObjectOfType<MeshRenderer>();
FindObjectsOfType<MeshRenderer>();
//克隆原始物体并返回克隆物体
GameObject ga=Instantiate(this.gameObject);
//销毁对象
//【删除一个游戏对象、组件或资源】
Destroy(this.transform);
//5s后删除对象
Destroy(gameObject,5);
这篇文章借鉴了一些其他文章,如有侵权,请联系我删除,谢谢!