Appearance
几种移动方式的视线
使用Transform组件
transform.position transform.Translate
注意:transform.Translate是相对移动,transform.position是绝对移动。transform.Translate移动时,如果物体有刚体组件,会触发碰撞事件,而transform.position不会。
用例:
csharp
void Update()
{
transform.Translate(Vector3.forward * Time.deltaTime * speed);
transform.Translate(Vector3.forward * Time.deltaTime * speed, Space.Self); // 默认Self。Space.World
transform.position += new Vector3(0, 0, speed * Time.deltatime);
}
使用Vector3差值
Vector3.Lerp,一般用于两个点之间的插值,比如摄像机跟随,物体移动等。 Vector3.Slerp,一般用于球面插值,比如摄像机旋转,物体旋转等。 Vector3.MoveTowards,一般用于物体移动,比如敌人追击玩家,物体移动到指定位置等。匀速。如果值为负会远离目标。 Vector3.SmoothDamp,一般用于物体移动,比如玩家移动,摄像机跟随等。特定是越靠近目标速度越慢。
前三个的参数都是:起点(V3),终点(V3),速度或时间(float)。 SmoothDamp的参数是:起点(V3),终点(V3),平滑时间(float),速度(float)。
csharp
void Update()
{
transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * speed);
transform.position = Vector3.Slerp(transform.position, target.position, Time.deltaTime * speed);
transform.position = Vector3.MoveTowards(transform.position, target.position, Time.deltaTime * speed);
transform.position = Vector3.SmoothDamp(transform.position, target.position, ref velocity, smoothTime);
}
使用Rigidbody组件
rigidbody.velocity, 瞬间给予物体一个速度。是一个属性,而非方法。放在Update中。 rigidbody.AddForce(方向力V3, 力类型ForceMode), 建议放在FixedUpdate中, 适合模拟物理运动。 rigidbody.MovePosition,
ForceMode有四种: Force, 可持续的力,受质量影响。默认。 Acceleration, 可持续的加速度,不受质量影响。 Impulse,瞬间冲击力,受质量影响 VelocityChange,瞬间改变速度,不受质量影响
csharp
void Update()
{
rigidbody.velocity = Vector3.forward * speed;
rigidbody.AddForce(Vector3.forward * speed);
rigidbody.MovePosition(transform.position + Vector3.forward * speed * Time.deltaTime);
}
使用角色控制器组件
SimpleMove(方向力V3), Y轴无效,自带刚体,以秒为单位。 Move(方向力V3),没有重力,自行计算下落。
csharp
void Update()
{
characterController.SimpleMove(Vector3.forward * speed);
characterController.Move(Vector3.forward * speed * Time.deltaTime);
}