Unity3d 在Unity 3D中移动游戏对象的最佳方式

Unity3d 在Unity 3D中移动游戏对象的最佳方式,unity3d,game-physics,Unity3d,Game Physics,我正在学习一些不同的Unity教程,每个教程中游戏对象的移动方式都有点不同 这些方法的优缺点是什么?第一人称RPG更喜欢哪种方法 // Here I use MovePosition function on the rigid body of this component Rigidbody.MovePosition(m_Rigidbody.position + movement); //Here I apply force to the rigid body and am able to c

我正在学习一些不同的Unity教程,每个教程中游戏对象的移动方式都有点不同

这些方法的优缺点是什么?第一人称RPG更喜欢哪种方法

// Here I use MovePosition function on the rigid body of this component
Rigidbody.MovePosition(m_Rigidbody.position + movement);

//Here I apply force to the rigid body and am able to choose force mode
Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);

// Here I directly change a transforms position value, in this case the cam
Transform.transform.position = playerTransform.position + cameraOffset;
谢谢

编辑

我注意到的是,当位置改变时,施加的力似乎会影响memic轮式车辆行走/跑步

  • Rigidbody.MovePosition(m_Rigidbody.position+movement)
  • 从文档中:

    如果在刚体上启用刚体插值,则调用Rigidbody.MovePosition会在渲染的任何中间帧中的两个位置之间产生平滑过渡。如果要在每个FixedUpdate中连续移动刚体,则应使用此选项。

  • Rigidbody.AddForce(15*Time.deltaTime,0,0,ForceMode.VelocityChange)
  • 这将使物体加速,因此它不会以恒定速度运动(这是因为牛顿第二定律,力=质量*加速度)。另外,如果有另一个力朝相反的方向运动,这个力可能会被抵消,物体根本不会移动

  • Transform.Transform.position=playerTransform.position+cameraOffset

  • 这将传送该对象。没有平稳的过渡,没有与游戏中已有的任何力量的相互作用,只是位置的瞬间变化。

    刚体和速度/物理

    我个人唯一一次使用rigidbodys系统是在实现我自己的(群集行为)时,因为您需要计算几个单独的向量并将它们全部应用到单元中

       Rigidbody.MovePosition(m_Rigidbody.position + movement);
    
    这将使用物理系统为您计算朝向目标的运动矢量,因此对象的速度和运动仍然会受到阻力、角度阻力等的影响

    我相信这个特殊的函数是对刚体.AddForce的包装

    优点:

    • 如果现实的身体反应是你想要的,那就好了
    缺点:

    • 如果您只想将一个对象从点A移动到点B,那么使用起来有点笨拙

      • 有时,某个地方设置的错误设置太高(例如:Mass>10000000)可能会导致行为中的错误,这可能是一个很难确定和缓解的问题
    注意:刚体与另一刚体碰撞时,会根据物理设置相互反弹

    它们也受到重力的影响。基本上,他们试图模仿现实生活中的物体,但有时很难驯服这些物体,让它们完全按照你的意愿去做

    刚体.AddForce
    基本上与上面相同,只是你自己计算向量

    举个例子,得到一个指向目标的向量

    Vector3 target = target.position - myPosition;
    
    Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
    
    如果你不打算在游戏中加入任何主要的物理力学,我建议你通过插入物体的位置来移动

    因为要让事情按照你想要的方式运行要容易得多,当然,除非你追求的是物理现实主义

    插值单位位置

    优点:

    • 也许一开始理解起来有点奇怪,但要让对象按你想要的方式移动要简单得多
    缺点:

    • 若你们想对影响你们的物体做出真实的反应,你们必须自己做很多工作。但有时,这比使用物理系统然后尝试更可取,正如我前面所说的驯服它
    你可以在口袋妖怪游戏中使用这种技术,你不会在口袋妖怪中停下来,等待灰烬停止滑动或撞到墙上,然后无法控制地向后反弹

    这个特殊的功能是设置对象的位置,比如传送,但是你也可以使用它来平滑地将角色移动到某个位置。我建议查找“tweens”,以便在变量之间平滑插值

        //change the characters x by + 1 every tick, 
    Transform.transform.position.x += 1f;