- Time.time :(只读)当前游戏时间
- Time.daltaTime :(只读)完成最后一帧所需的时间。 因为unity中一秒一般会调用50帧,所以每一帧的时间基本在0.02秒左右,(波动是由于硬件在每一帧处理的事情消耗的时间有所差异) 比如当控制物体运动时,数字与Time.deltaTime相乘时,基本上可以表达:我想将此对象每秒移动10米,而不是每帧10米。
例:该代码块的作用是将物体沿y轴方向每秒移动10米
public class ExampleClass : MonoBehaviour {
void Update() {
float translation = Time.deltaTime * 10;
transform.Translate(0, 0, translation);
}
}
- Time.fixedTime :(只读)固定增量时间。每一帧会固定增加0.02秒。
如图所示
- Time.fixedDeltaTime :完成最后一帧所消耗的固定时间。这个每一帧所消耗的时间是固定的,都为0.02秒。
如图所示
- Time.realtimeSinceStartup :(只读)自游戏开始时的时间。(注意:当游戏暂停时也会计时,编辑器暂停时也会计时,相当于现实中的时间不会暂停)
- Time.smoothDeltaTime :(只读)平滑增量时间。
- Time.timeSinceLevelLoad :(只读)自加载关卡的时间。(每重新加载一个关卡则会重新计时)
- Time.timeScale :时间缩放,当值为0时游戏暂停。
创建游戏物体的三种方式
- 1、通过构造方法。
GameObject gameObject = new GameObject(string name);
- 2、通过静态方法Instantiate(一个已存在的游戏物体):通过已存在的游戏物体制作一个clone体。
GameObject cube = new GameObject("MyCube");
GameObject.Instantiate(cube);
结果
游戏中会创建一个已存在物体的clone。
- 3、通过静态方法CreatePrimitive(PrimitiveType.unity中的基本物体)
GameObject中的属性
- activeInHierarchy :判断物体是否是active状态,true表示是,false表示不是。
- layer :游戏对象所在的图层。图层的范围为[0 … 31]。图层可用于从相机进行选择性渲染或忽略射线广播。
- scene :游戏物体所属的场景。
GameObject cube = new GameObject("MyCube");
Debug.Log(cube.scene.name);
结果
- tag :游戏物体的标签。
- transform :附加在游戏物体上的Transform组件信息。
GameObject中的公有方法
- AddComponent :通过游戏物体添加组件
cube.AddComponent<组件名(或者脚本名)>();
组件可以是任何unity中的组件,也可以是脚本
cube.AddComponent<Rigidbody>();//为cube添加刚体组件
- BroadcastMessage :public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver);
调用所有拥有methodName的物体中的methodName,同时该物体的子物体也会调用methodName
//在一个游戏物体上挂载广播信息脚本
public GameObject cube;
Use this for initialization
void Start()
{
cube.BroadcastMessage("Method", 5.0f, SendMessageOptions.DontRequireReceiver);
}
//在另一个cube中写入被广播的信息并挂载该脚本
void Method()
{
Debug.Log("qqqq");
}
会输出cube的Method方法中的值
如果cube拥有子物体,并且子物体上也挂载了Method方法的脚本,则子物体的Method() 方法也会输出
- SendMessage :void SendMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver)
和BoardcastMessage方法作用类似,只是该方法只会调用发送信息目标物体中的methodName。 - SendMessageUpwards :void SendMessageUpwards(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver)
和BroadcastMessage相反,是逐级往上(往父物体)调用。 - CompareTag :比较两个游戏物体的tag是否相同,返回一个bool值。
- GetComponent :获取当前游戏物体的某个组件。
cube.GetComponent<Transform>();//获取cube的Transform组件
- GetComponentInChildren :获取当前游戏物体和它的子物体中的某个组件,仅当在活动GameObject上找到组件时,才返回该组件。未找到则向子物体组件中寻找,直到找到并返回第一个找到的组件。
- GetComponentInParent :获取当前游戏物体和它的父物体中的某个组件,仅当在活动GameObject上找到组件时,才返回该组件。未找到则向父物体组件中寻找,直到找到并返回第一个找到的组件。
- GetComponents :返回所有同一类型的需要获取的组件,结果为一个Component数组,用来存储组件。
- GetComponentsInChildren :返回该物体与所有子物体中的需要获取的组件。
- GetComponentsInParent :返回该物体与所有父物体中的需要获取的组件。
- SetActive :设置当前游戏物体是否处于active状态,需传递一个bool值;
cube.SetActive(true);
GameObject中的静态方法
- Find :通过名字寻找游戏物体
GameObject.Find("MyCube");//寻找名为MyCube的游戏物体
- FindGameObjectsWithTag :通过标签寻找所有与标签相符的游戏物体。
GameObject.FindGameObjectsWithTag("MainCamera");//寻找标签为MainCamera的所有的游戏物体
- FindWithTag :通过标签寻找与标签相符的游戏物体。
GameObject.FindWithTag("MainCamera");//寻找标签为MainCamera的游戏物体
继承的属性
- name :返回游戏物体的名字。
继承的公有方法
- GetInstanceID :返回游戏物体实例化的ID,ID值唯一。
- ToString :返回游戏物体的名字。
继承的静态方法
- Destroy :销毁游戏对象,组件或asset。延迟销毁。
Destroy(gameObject);//销毁游戏物体
Destroy(GetComponent<Rigidbody>());//销毁该游戏物体上的刚体组件
Destroy(gameObject, 5);//在5秒后销毁游戏物体
- DestroyImmediate :立即销毁对象,组件或asset,不建议使用,因为立即销毁有可能会损坏资源,改用延迟销毁会安全些。
- FindObjectOfType :返回第一个已被加载的active的对象。
Position, rotation and scale of an object.
Every object in a scene has a Transform.
Transform中的属性
- childCount :输出当前游戏物体的子物体个数。(注:如果子物体包含子物体,则不算在其中)
例:当前CubeParent的childCount为2
- eulerAngles :欧拉角,就是游戏物体Transform组件中的rotation的值。说到欧拉角就需要介绍一下四元数Quaternion,欧拉角和四元数都可以控制物体的旋转。
四元数:一种特殊表示旋转的量
GameObject cube;
private void Start()
{
cube = GameObject.Find("MyCube");
cube.transform.eulerAngles = new Vector3(45, 45, 45);// 将物体沿各轴旋转45度
cube.transform.rotation = Quaternion.Euler(45, 45, 45);//将物体沿各轴旋转45度
}
- localPosition :相对于父物体的位置,如果没有父物体则相当于position。
- localRotation :相对于父物体的旋转。
Unity在内部将旋转存储为四元数。 若要旋转对象,请使用Transform.Rotate。 使用Transform.localEulerAngles将旋转修改为欧拉角。
- localScale :相对于父物体的scale。
- parent :当前物体的父物体。
- position :当前物体的位置。
- rotation :当前物体的旋转。
Transform中的公有方法
- Find(string n) :寻找名为n的物体。
- GetChild(int index) :按索引返回一个Transform。
cube = GameObject.Find("MyCube");
print(cube.transform.GetChild(1).name);
- LookAt :旋转变换,使正向矢量指向/ target /的当前位置。
public void LookAt(Transform target);
public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
public void LookAt(Vector3 worldPosition);
public void LookAt(Vector3 worldPosition, Vector3 worldUp = Vector3.up);
target :Object to point towards.
worldUp :Vector specifying the upward direction.
worldPosition :Point to look at.
- Rotate :控制物体的旋转
public void Rotate(Vector3 eulers, Space relativeTo = Space.Self);
传递一个欧拉角,第二个参数时相对于哪个物体旋转,默认为自身。
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
传递三个角度
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
axis:旋转的轴 ,angle:旋转的角度
- SetParent :设置当前物体的父物体。
- SetPositionAndRotation :设置transform的位置和旋转。
- SetAsFirstSibling :将当前transform设置成列表中第一个。
例:
运行前:
public class Test15 : MonoBehaviour {
RectTransform secondImage;
private void Start()
{
secondImage = (RectTransform)transform.Find("SecondImage");
secondImage.SetAsFirstSibling();
}
}
运行后:
- SetAsLastSibling :将当前transform设置成列表中最后一个。
- Translate :使物体向某个方向移动。
public void Translate(Vector3 translation);//向translation方向移动
public void Translate(Vector3 translation, Space relativeTo = Space.Self);
public void Translate(float x, float y, float z);//x轴向x方向移动,y轴向y方向移动,z轴向z方向移动
public void Translate(float x, float y, float z, Space relativeTo = Space.Self);
public void Translate(Vector3 translation, Transform relativeTo);
继承的属性
- gameobject :获取此组件所属的游戏物体。
- tag :此游戏物体的标签。
- transform :次游戏物体的transform组件。
- name :次游戏物体的名字。
继承的公有方法
和GameObject方法作用都一样
BroadcastMessage
CompareTag
GetComponent
GetComponentInChildren
GetComponentInParent
GetComponents
GetComponentsInChildren
GetComponentsInParent
SendMessage
SendMessageUpwards
GetInstanceID
ToString
继承的静态方法
Destroy
DestroyImmediate
FindObjectOfType
FindObjectsOfType
Instantiate
总结
GameObject类和Transform类是非常常用的两个类,每个方法都需要牢记!
Time类在运动的控制上和其他方面也会经常用到,每个属性的含义都应牢记!