Unity3d - Transform & Time & Mathf & Coroutine(协同程序)

Transform

Transform组件控制游戏对象在场景中的位置、旋转和大小比例,每个游戏对象都包含一个Transform组件。

成员变量:

成员变量说明
position世界坐标系中的位置
localPosition父对象局部坐标系中的位置
eulerAngles世界坐标系中以欧拉角表示的旋转
localEulerAngles父对象局部坐标系中的欧拉角
right对象在世界坐标系中的右方向
up对象在世界坐标系中的上方向
forward对象在世界坐标系中的前方向
rotation世界坐标系中以四元数表示的旋转
localRotation父对象局部坐标系中以四元数表示的旋转
localScale父对象局部坐标系中的缩放比例
parent父对象的Transform组件
worldToLocalMatrix世界坐标系到局部坐标系的变换矩阵
localToWorldMatrix局部坐标系到世界坐标系的变换矩阵
root对象层级关系中根对象的Transform组件
childCount子孙对象的数量
lossyScale全局缩放比例


成员函数:

成员函数说明
Translate按指定的方向和距离平移
Rotate按指定的欧拉角旋转
RotateRound按给定旋转轴和旋转角度进行旋转
LookAt旋转使得自身的前方向指定目标的位置
TransformDirection将一个方向从局部坐标系变换到世界坐标系
InverseTransformDirection将一个方向从世界坐标系转换为局部坐标系
TransformPoint将一个位置从局部坐标系转换为世界坐标系
InverseTransformPoint将一个位置从局部坐标系转换为世界坐标系
DetachChildren与所有子物体接触父子关系
Find按名称查找子对象
IsChildOf判断是否是指定对象的子对象
// 物体向前移动
void Update () {
    var speed=2.0f;
    transform.Translate(Vector3.forward * Time.deltaTime* speed); 
}
// 绕自身Y轴旋转
void Update () {
    var speed=30.0f;
    //Time.deltaTime表示距上一次调用所用的时间。
    transform.Rotate(Vector3.up * Time.deltaTime*speed); 
}
// 物体绕世界坐标轴Y轴旋转
void Update()
{
    var speed = 30.0f;
    transform.RotateAround(Vector3.zero, Vector3.up, speed * Time.deltaTime);
}

// RotateAround源码
/// <summary>
///   <para>Rotates the transform about axis passing through point in world coordinates by angle degrees.</para>
/// </summary>
/// <param name="point"></param>
/// <param name="axis"></param>
/// <param name="angle"></param>
public void RotateAround(Vector3 point, Vector3 axis, float angle)
{
  Vector3 position = this.position;
  Vector3 vector3 = Quaternion.AngleAxis(angle, axis) * (position - point);
  this.position = point + vector3;
  this.RotateAroundInternal(axis, angle * ((float) Math.PI / 180f));
}

Time

Unity中可以通过Time类来获取和时间有关的信息,可以用来计算帧率,调整时间流速等功能。Time类包含了一个重要的变量就是deletaTime,它表示距上一次调用所用的时间。

成员变量:

成员变量说明
time游戏从开始到现在经历的时间(秒)
timeSinceLevelLoad从帧的开始时间(秒),从关卡加载完成开始计算
deltaTime上一帧耗费的时间(秒)
fixedTime最近FixedUpdate的时间,该时间从游戏开始计算
fixedDeltaTime物理引擎和FixedUpdate的更新时间间隔
maximumDeltaTime一帧的最大耗费时间
smoothDeltaTimeTime.deltaTime的平滑淡出
timeScale时间流逝速度的比例,可以用来制作慢动作
frameCount已渲染的帧的总数
realtimeSinceStartup游戏从开始到现在经历的真实时间(秒),该时间不会受timeScale影响
captureFramerate固定帧率设置

Random

Random用于生成随机数。

成员变量:

成员变量说明
seed随机数生成器种子
value返回一个0~1之间的随机浮点数,包括0、1
insideUnitSphere返回位于半径为1的球体内的一个随机点
insideUnitCircle返回位于半径为1的圆内的一个随机点
onUnitSphere返回半径为1的球面上一个随机点
rotation返回一个随机旋转
rotationUnifrom返回一个均匀分布的随机旋转


成员函数:

成员函数说明
Range返回min和max之间的一个随机浮点数,包含min和max

Mathf

成员变量:

成员变量说明
PI圆周率,3.1415926
Infinity正无穷大
NegativeInfinity负无穷大
Deg2Rad度到弧度的转换系数,0.01745329f
Rad2Deg弧度到度的转换系数,57.29578f
Epsilon一个很小的浮点数


成员函数:

成员函数说明
Sin计算角度(单位为弧度)的正弦值
Cos计算角度(单位为弧度)的余弦值
Tan计算角度(单位为弧度)的正切值
Sqrt计算平方根
Abs计算绝对值
Min返回若干数中的最小数
Max返回若干数中的最大数
PowPow(f,p)返回f的p次方
CellCell(f)返回大于或等于f的最小整数
FloorFloor(f)返回小于或等于f的最大整数
RoundRound(f)返回浮点数f四舍五入后的整数
Clamp将数值限制在min和max之间
Clamp01将数值限制在0和1之间

利用Mathf.SmoothDamp函数可以制作相机的缓冲跟踪效果,让物体的移动不是那么僵硬,而是做减速的缓冲效果。


public class SmoothDamp : MonoBehaviour
{
    public Transform target;
    public float smoothTime = 0.3F;
    private float yVelocity = 0.0F;

    // Update is called once per frame
    void Update()
    {
        float newPosition = Mathf.SmoothDamp(transform.position.y, target.position.y, ref yVelocity, smoothTime);
        transform.position = new Vector3(transform.position.x, newPosition, transform.position.z);
    }
}

Coroutine(协同程序)

Coroutine也称为协同程序或者协程,协同程序可以和主程序并行运行,和多线程类似。协同程序可以用来实现让一段程序等待一段时间后继续运行的有效结果。

和协同有关的函数:

函数说明
StartCoroutine启动一个协同程序
StopCoroutine停止一个协同程序
StopAllCoroutine停止所有协同程序
WaiteForSeconds等待若干秒
WaiteForFixedUpdate等待知道下一次FixedUpdate的调用
WaitForSecondsRealtime等待若秒,不受timeScale影响
WaitUntil等待某个条件成立再执行
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值