三大主流方法的区别"/>
uinty之物体移动的三大主流方法的区别
Transform组件
Rigidbody组件
CharacterController组件
Transform组件
用途:一般用于不需要模拟物体碰撞的移动,可以穿透其它物体
方法
- Transform.Translate(Vector3,Space):这个方法有六个构造函数,可以以自身坐标系为参考移动Space.self,也可以以世界坐标系为参考进行移动Space.world。
if (Input.GetKeyDown(KeyCode.W)){m_Transform.Translate(Vector3.forward,Space.world);}if (Input.GetKeyDown(KeyCode.S)){m_Transform.Translate(Vector3.back,Space.self);}
Rigidbody组件
用途:一般用于需要模拟物理碰撞效果的移动,如需要模拟物体间相互碰撞,摩檫力等
方法
- Rigidbody.MovePosition(Vector3):这个干法只有一个构造参数,是以世界坐标系进行移动。参数表示移动后的位置,所以参数还需要加上自己所在的位置。
if (Input.GetKeyDown(KeyCode.W)){//m_rig.MovePosition(m_Transform.position+ Vector3.forward);m_rig.AddForce(Vector3.forward*50, ForceMode.Acceleration);}if (Input.GetKeyDown(KeyCode.S)){//m_rig.MovePosition(m_Transform.position + Vector3.back);m_rig.AddForce(Vector3.back*3, ForceMode.VelocityChange);}
- Rigidbody.AddForce(Vector3,ForceMode):世界坐标系,ForceMode里有四个属性,速度、加速度、力、冲击力,这个参数表示给物体以何种形式的力。
- Rigidbody.AddRelativeForce(Vector3,ForceMode):和上面方法的用法一样,区别在于这个是自身坐标系。
CharacterController组件
用途:用于第一人称(游戏主角)和第三人称的具有人的行为的移动,可以模仿人的行为。
方法
- CharacterController.SimpelMove(Vector3):移动较为简单,有重力。
- CharacterController.Move(Vector3):移动较为复杂,没有重力
float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");m_CC.SimpleMove(new Vector3(h, 0, v)*5);
这些物体的移动方法,它们本质就是在直接或间接的改变Transform的position。
码字不易,觉得文章帮助到了你,给个赞呗!
更多推荐
uinty之物体移动的三大主流方法的区别
发布评论