主要是一个继承的思想,我们的MonoBehaviour是一个子类,可以直接调用父类的方法。。
主要是面对对象的思想,这里不深表。
一.Component类
1.位置,旋转,大小的改变等
public float x = 0;
public float y = 0;
public float z = 0;
public float w = 0;
private void Update()
{
this.transform.rotation = new Quaternion(w, x, y, z);
}
this是这个物体,transform组件下面的rotation,这个rotation是个四元数,由于四元数是个结构体,我们new构建一个结构体四个变量public控制可以在编辑器中改变,Update来更方便的观察角度的改变。
2.改变颜色
private void Start()
{
this.GetComponent<MeshRenderer>().material.color = Color.gray;
}
我们直接在start方法中调用,this获取这个游戏对象,getcomponent获取组件meshrenderer下面的材质,材质里包含颜色,在color这个结构体内可选择颜色。
先展示这两个,其实调用的方法都是一样的,其他的按下不表
二.transform类
3.世界位置,相对位置
世界位置“Position”:相对与(0,0,0)世界坐标.
相对位置“localPosition”:相对于父物体的位置
当然这是关于中心的,这个中心是关于模型的
对与子物体来说他的位置一都是相对位置,是相对于父物体的位置,当我们将其调至(0,0,0)时他与父物体重合,同样包括旋转缩放都是相对于父物体的。
当我们要调用世界位置时就调用position就好了
private void Start()
{
this.GetComponent<Transform>().localPosition = Vector3.zero;
this.GetComponent<Transform>().position = Vector3.zero;
}
关于大小也有相对大小与相关于世界的大小当我们Vector3(1,1,1)时对于父物体来说他是相对于世界来说的,都是1m,当对于子物体来说就是关于父物体的放大缩小倍数。
localScale:与父物体缩放比例。
lossyScale(实际缩放比例):与父物体缩放比例*自身缩放比例。
this.GetComponent<Transform>().localScale = Vector3.one;
还有一点是 localScale是get和set的
而lossyScale是只读的
4.translate移动(常用)
首先他是一种方法
包含方向和距离
private void Start()
{
this.transform.Translate(Vector3.one);
}
向自身坐标系的向量方向移动一米
private void Start()
{
this.transform.Translate(1,1,1,Space.Self);
}
他还有一个重载可以选择在世界坐标轴移动。
private void Start()
{
this.transform.RotateAround(Vector3.zero, Vector3.up, 30);
}
还有一个围绕旋转RotateAround(点,轴,角度)。
rotate的其他与transla一样这里就不赘述。
5.关系
private void Start()
{
Transform root=this.transform.root;
Transform parent=this.transform.parent;
}
获取根物体以及获取父物体。
public Transform tf;
private void Start()
{
//世界坐标
this.transform.SetParent(tf);
//locationposition坐标
this.transform.SetParent(tf,false);
}
改变父物体
这里有两个重载,不加false默认ture,这个含义是指当前坐标是否是世界坐标。
早期可读可写tf,现在是只能获取了,否则警告
public Transform chlidTF;
private void Start()
{
chlidTF = this.transform.Find("子物体名称");
chlidTF = this.transform.Find("子物体名称 /子物体名称/子物体名称");
}
寻找子物体(找不到子物体的子物体)
找物体用路径,当路径不变时可以用这个路径,但是如果当路径发生改变,程序就会异常所以一般不用这个用法。
private void Start()
{
int count=this.transform.childCount;
for(int i = 0; i < count; i++)
{
Transform child = this.transform.GetChild(i);
}
}
根据索引获取子物体
总结:
transform类提供了物体与物体之间的关系位置等方法(包括查找(父,根,子),变换组件,改变位置,角度,大小,移动,旋转,围绕旋转等)
三,GameObject类
场景里面所以实体的基类(Hierarchy内的物体)
1.变量
activeInHierarchy(场景里面的物体是否已经激活)
activeSelf(只读)(激活状态)
setActive(设置物体的禁用启用)
区别:警用一个物体可以将其激活状态取消,或者将其父物体的激活状态取消,activeInHierarchy是指这个物体实际的激活状态,而activeSelf是物体自身激活状态(其实就是那个勾)。
还包括layer(层级),scene(场景),tag(标签),transfrom(位置)等其他变量
2.方法
private void Start()
{
//创建一个物体
GameObject lightgo = new GameObject();
//通过这个物体创建这个组件light这个光源
Light light = lightgo.AddComponent<Light>();
//设置光源颜色
light.color = Color.white;
//设置光源类型:点光源
light.type = LightType.Point;
}
添加组件方法:AddComponent<>()我们要先建立一个物体再将组件添加上去
private void Start()
{
//慎用!!他会遍历所以场景中的物体,再一些大的项目中物品数目很多
GameObject.Find(" 游戏对象名称");
// 用于寻找所以使用该标签的物体,它返回的是一个数组
GameObject[] alltagitem = GameObject.FindGameObjectsWithTag("tag");
//用于寻找使用该标签的物体(单个)
GameObject item = GameObject.FindGameObjectWithTag("tag");
}
四,object类
1.变量
name:访问游戏物体的名称
2.函数
destroy("object"):删除一个游戏对象.
private void Start()
{
//根据类型查找对象
Object.FindObjectOfType<MeshRenderer>();
Object.FindObjectsOfType<MeshRenderer>();
}
我们可以用第二个方法查找所有敌人
也可以用第一个方法找到玩家(一般玩家就一个)