unity 常用API总结(二)(Time类,GameObject类,Transform类)

在这里插入图片描述

  • 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类在运动的控制上和其他方面也会经常用到,每个属性的含义都应牢记!

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值