学习了一段时间,今天整理了一下物体移动的方法,据自己了解,总共总结了五种:
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)
转载请注明原文地址: https://ju.6miu.com/read-968446.html