Unity官方脚本(一)

来源:互联网 发布:linux连接工具 ssh 编辑:程序博客网 时间:2024/06/05 03:12

    • 一 时间周期
    • 二 空间向量
    • 三 空间向量计算
    • 四 时间差TimetimeDelta
    • 五 GameObject游戏对象以及相关组件和函数方法
    • 六 线性插值Lerp

一、 时间周期

  1. Awake()和Start()会在脚本加载后自动调用
  2. Awake()先被调用,即使脚本未被启用。此方法最好用来设置脚本之间的引用和初始化
  3. Start()在Awake()之后调用,第一次Update()调用之前,但必须是脚本已被启用的情况下。
  4. Update()每一帧都会被调用,大部分需要周期性改变的内容都放在这个函数里。非物理对象的移动、计时器、输入检测、通常都放在Update()中。Update()并不根据正常的时间轴调用,如果某一帧花费的时间大于下一帧,那么每帧调用的间隔将不同。
  5. FixedUpdate()根据正常的时间轴调用且每次调用间隔是相同的,调用FixedUpdate()后,会进行需要的物理计算。比如有刚体的物理对象,需要放在FixedUpdate()中。FixedUpdate()通常用于移动物理对象。

二、 空间向量

  1. 向量运算:向量是两点之间的一条线。
  2. 2D向量可以从原点(0,0)指向平面中任意一点
    这里写图片描述
  3. 3D与2D
    这里写图片描述
  4. Unity遵循左手坐标系法则。
    这里写图片描述

三、 空间向量计算

  1. 3D计算两点之间的距离:Unity中Vector3.Magnitude()会自动计算向量大小
    这里写图片描述
  2. 3D向量有两个常用函数,点积(通过两个向量计算出一个标量,是一个单一值)和叉积
  3. 点积:通过点积可以了解两个向量之间的关系。如果两个向量的点积为0,那么他们相互垂直。Unity中可以调用Vector3.Dot()自动计算点积
    这里写图片描述
  4. 叉积的结果不是一个单一标量值,而是另一个向量,这个向量垂直于之前的两个向量
    这里写图片描述
  5. 当你开发一个模拟飞行游戏时,或许会用到点积,你需要计算飞机的上向量与前向量的点积,如果两个向量相互垂直,也就是点积为0,那么飞机的阻力最小
    这里写图片描述
    如果点积增大为正值,表示飞机的爬升,可以增大阻力
    这里写图片描述
  6. Unity中调用Vector3.Cross()自动计算叉积。叉积在游戏中可以用于判断扭矩,从而转动坦克炮台,首先获取炮台当前朝向向量,和炮台应朝向的向量,通过他们的叉积可以计算出炮台的扭矩
    这里写图片描述

四、 时间差Time.timeDelta

  1. timeDelta表示两个值之间的差。Time类中的deltaTime属性表示Update()或fixedUpdate()每次调用的间隔,这可以让值平滑变化,可用于平滑移动或其他增量的计算。
    2.代码:
public class UsingDeltaTime : MonoBehavior{    public float speed = 8f;     public float countdown = 3.0f;     void Update()    {        countdown -= Time.deltaTime;        if(countdown <= 0.0f)        light.enabled = true;         if(Input.GetKey(KeyCode.RightArrow))        {            //以每秒移动多少            transform.position += new Vector3(speed * Time.deltaTime,0.0f,0.0f);        }    }}

五、 GameObject游戏对象以及相关组件和函数方法

  1. 设置启动或关闭对象:
    GameObject.SetActive(true/false);
  2. 检测对象自身和在“Hierarchy”中是否被启用:
    GameObject.activeSelf;
    GameObject.activeInHierarchy;
  3. TranslateRotate是两个常用的改变对象位置和旋转的函数,使用的坐标是自身坐标
    transform.Translate(new Vector3(0,0,1) * Time.deltaTime);//每秒单位沿着z轴移动
    transform.Rotate(Vector3.forward * turnSpeed * Time.deltaTime);//每秒单位沿着z轴移动
  4. 如果你要移动带有碰撞器的对象,某些需要由物理交互的对象时,就不要使用TranslateRotate,而是要使用专门移动物理对象的函数,除非你的刚体勾选了“Is Kinematic”选项。
  5. Destroy()可以销毁对象和组件:Destroy(gameOject);。Destroy()的第二个参数(可选):用于设置销毁的额延迟时间
    Destroy(GetComponent<MeshRenderer>());//销毁渲染组件
  6. LookAt()可以让对象的正前方,朝向设定的坐标方向。
public Transform target;void Update(){    transform.LookAt(target);}

六、 线性插值Lerp

这里写图片描述
这里写图片描述

0 0