我的Unity(3)一点一滴 实现物体移动和旋转的方法总结(1)

    xiaoxiao2021-12-14  20

    学习了一段时间,今天整理了一下物体移动的方法,据自己了解,总共总结了五种: 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

    最新回复(0)