运动本质
u3d中物体运动的本质都是改变物体的position
- Transform.Translate
使物体在当前坐标下移动一段距离,可以设置根据本地坐标系还是世界坐标系
horseGameObject.transform.Translate(Vector3.forward * horseMoveSpeed * Time.deltaTime);
- 设置position
简单粗暴直接修改物体的坐标 - 插值运动
3.1 Vector3.Lerp线性插值
3.2 Vector3.Slerp球形插值
3.3 Vector3.MoveTowards
3.4 Vector3.SmoothDamp 平滑阻尼
常用于相机跟随移动
各参数含义:
1.current 当前物体位置
2.target 目标物体位置
3.ref currentVelocity 当前速度,这个值由你每次调用这个函数时被修改(注:ref 关键字指参数按引用传递, 按引用传递的效果是,对所调用方法中参数进行的任何更改都反映在调用方法中。)
4.smoothTime 到达目标的时间,较小的值将快速到达目标
5.maxSpeed 所允许的最大速度,默认无穷大
6.deltaTime 自上次调用这个函数的时间,默认为Time.deltaTime
float smoothTime = 0.1f;
Vector3 velocity = Vector3.zero;
Vector3 newPos = this.camPosList[this.camPosNum];
camRoot.transform.position = Vector3.SmoothDamp(camRoot.transform.position, newPos, ref velocity, smoothTime);
if (Vector3.Distance(newPos, camRoot.transform.position) < 0.1)
{
}
- 刚体运动
4.1 给刚体添加力addforce
模拟给物理施加一个力后的物理运动,受到各种摩擦力影响
transform.GetComponent<Rigidbody>().AddForce(newDir * 1f, ForceMode.Impulse);
4.2 设置刚体速度velocity
忽略物理摩擦力,使得物体瞬间达到目标运动速度,受物理碰撞影响
transform.GetComponent<Rigidbody>().velocity = Vector3.up
4.2 刚体的MovePosition方法
使得物体在受到物理约束的情况下,运动到指定位置