学习了一段时间,今天整理了一下物体移动的方法,据自己了解,总共总结了五种:
1.transform.Translate()方法和rotate方法
这个移动放在Update里面,Translate里面是一个Vector3类型,但是世界坐标的,不要放transform.forward
具体原因,Transform自己调用,然后又沿着自己的前方移动,就乱了。
// //控制人物移动
// 使用translate 和rotate
// transform.Translate (Vector3.forward * ver * Time.deltaTime * m_speed)
// transform.Rotate (transform.up * hor * m_speed)
2.使用position和rotation
position可以使用自己的前方,注意是+=;
rotation 注意是旋转轴,注意是*=;
//使用 position和rotation
// transform.position += transform.forward * m_speed * ver * Time.deltaTime
// transform.rotation *= Quaternion.Euler (0f, m_speed * hor, 0f)
3.使用刚体MovePosition和MoveRotation
使用这个方法需要对象添加刚体,在脚本中获得组件,然后才能使用
据我看来,第一种写法,位置加的是Transform.position.第二种方法,是rigidbody的位置,我个人感觉刚体已经在人身上了,移动的时候会一起移动,但是肯定会区别,目前没发现,大家如果有什么想法可以留言。
(1)第一种写法
//使用Moveposition和MoveRotation 需要刚体
m_rigidbody.MovePosition (transform.position + transform.forward * m_speed * Time.deltaTime * ver)
//注意旋转的时候,需要是四元数类型.Quaternion中有一个方法,
m_rigidbody.MoveRotation (transform.rotation * Quaternion.AngleAxis (hor * m_speed, transform.up))
(2)另一种写法
Rigidbody m_Rig
m_Rig = GetComponent<Rigidbody> ()
float ver = Input.GetAxis ("Vertical")
Vector3 tarPos = Vector3.forward * Time.deltaTime * 50f * ver
tarPos += m_Rig.position
m_Rig.MovePosition (tarPos)
float hor = Input.GetAxis ("Horizontal")
Quaternion qua = Quaternion.AngleAxis (hor * Time.deltaTime * 30f, transform.up)
qua *= m_Rig.rotation
m_Rig.MoveRotation (qua)
4 可以使用动画自带的位移。
5.添加力,获得刚体组件,AddForce();方法
void Start ()
{
//获得人物控制器
m_rigidbody = GetComponent<Rigidbody> ()
//获取动画控制器
m_animator = GetComponent <Animator> ()
//获取人物角色控制器
m_CharacterController = GetComponent <CharacterController> ()
}
void Update ()
{
float hor = Input.GetAxis ("Horizontal")
float ver = Input.GetAxis ("Vertical")
//控制人物移动动画,
m_animator.SetFloat ("torun", ver)