【Unity】物体移动方法总结

总结Unity中使用的所有移动方法

  1. Rigidbody

    前提;FixUpdate进行且添加刚体:

    • 使用刚体的速度(Velocity)属性:

      设置刚体速度可以让物体运动并且忽略静摩擦力,这会让物体快速从静止状态进入运动状态。

    rigidbody.velocity = Vector3.forward * speed;
    
    • 使用刚体的移动(MovePosition)方法:

      刚体受到物理约束的情况下,移动到指定点。

    rigidbody.MovePosition(transform.position + transform.forward * Time.deltaTime);
    
    • 使用刚体的推力(AddForce)方法:

      给刚体添加一个方向的力,这种方式适合模拟物体在外力的作用下的运动状态。

    rigidbody.AddForce(transform.forward);
    
  2. Transform

    • transform.Translate

      将物体从当前位置向指定方向移动,并且可以选择参照的坐标系。

    transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World);
    
    • transform.position

      直接更改物体的坐标简单粗暴。

     targetPosition = transform.position + transform.forward;
     transform.position = targetPosition;
    
  3. Vector3

    • Vector3.Lerp

      Lerp为线性插值,按照数字t在当前位置到目标位置之间插值

    float t = 0.5f;     // t的值在[0...1]
    transform.position = Vector3.Lerp(transform.position, targetPosition, t);
    
    • Vector3.Slerp

      Slerp为弧形插值,按照数字t在当前位置到目标位置之间插值

     transform.position = Vector3.Slerp(transform.position, targetPosition, t);
    
    • Vector3.MoveTowards

      这个函数基本上和Vector3.Lerp相同,而是该函数将确保我们的速度不会超过maxDistanceDelta。

    transform.position = Vector3.MoveTowards(transform.position, targetPosition, maxDistanceDelta);
    
    • Vector3.SmoothDamp

      将物体平滑地从A逐渐移动到B点,并且可以控制速度,最常见的用法是相机跟随目标。

    Vector3 targetPosition = new Vector3(0,0,10);   // 目标位置
    Vector3 currentVelocity = Vector3.zero;     // 当前速度,这个值由你每次调用这个函数时被修改
    float maxSpeed = 5f;    // 选择允许你限制的最大速度
    float smoothTime = 5f;      // 达到目标大约花费的时间。 一个较小的值将更快达到目标。
    
    transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref currentVelocity, smoothTime, maxSpeed);
    
  4. CharacterController

    • characterController.Move

      模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。

    characterController.Move(transform.forward * Time.deltaTime);
    
    • CharacterController.SimpleMove

      用于模拟简单运动,并且自动应用重力,返回值表示角色当前是否着地。

    characterController.SimpleMove(transform.forward * speed);
    

猜你喜欢

转载自blog.csdn.net/Xz616/article/details/135445334
今日推荐