初面网初面网

几种移动方式的视线

使用Transform组件

transform.position transform.Translate

注意:transform.Translate是相对移动,transform.position是绝对移动。transform.Translate移动时,如果物体有刚体组件,会触发碰撞事件,而transform.position不会。

用例:

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)。

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,瞬间改变速度,不受质量影响

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),没有重力,自行计算下落。

void Update()
{
  characterController.SimpleMove(Vector3.forward * speed);
  characterController.Move(Vector3.forward * speed * Time.deltaTime);
}

更新于 2025/2/26