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

本文总结了Unity中实现物体移动的五种方法,包括使用transform.Translate和rotate、利用position和rotation属性、通过刚体MovePosition和MoveRotation、利用动画自带位移以及添加力等方式,并提供了具体的代码示例。
学习了一段时间,今天整理了一下物体移动的方法,据自己了解,总共总结了五种:

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值