利用OnAnimatorove函数控制人物的移动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用OnAnimatorove函数控制人物的移动相关的知识,希望对你有一定的参考价值。

     unity中控制人物移动有很多方法,经过这么长时间的学习后,我总结了一些;

  1. 利用transform的translate方法控制人物移动;(结合动画的控制就不说了)

        

 float mx = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
 float mz = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;
 
 transform.translate(mx,0,mz);

 2.利用Rigidbody组件rigidbody.MovePosition()方法进行移动(包含动画控制部分),鼠标控制人物移动;

void  FixedUpdate()
{
    float h=Input.GetAxis("Horizontal");
    float v=Input.GetAxis("Vertical");
    Move(h,v);
    Turning();
    Animating(h,v);
}
void Move(float h,float v)
{
    Vector3 movement;
    movement.Set(h,0,v);
    movement=movement.normalized*speed*Time.deltaTime;
    rigidbody.MovePosition(transform.position+movement);
}
void Turning()
{
    Ray camRay=Camera.main.ScreenPointToRay(Input.mousePosition);
    RayCastHit hitInfo;
    if(Physics.RayCast(camRay,out hitInfo,distance,floorMask))
    {
        Vector3 playerToMouse=hitInfo.point-transform.position;
        playerToMouse.y=0;
        Quaternion newRotation=Quaternion.LookRotation(playerToMouse);
        rigidbody.MovePosition(newRotation);
    }
}
void Animating(float h,float v)
{
    bool walking=h!=0||v!=0;
    m_ator.SetBool("Walk",walking);
}

3.还有一种就是利用Rigidbody的velocity属性来控制人物移动了

 float moveSpeed =10;
    Animator m_ator;
    Rigidbody rigid;
    Vector3 m_Pos;
    void Start () {
        m_ator = transform.GetComponent<Animator>();
        rigid = transform.GetComponent<Rigidbody>();
        m_Pos = transform.position;
    }
 void Update () {
        float mx = Input.GetAxis("Horizontal") ;
        float mz = Input.GetAxis("Vertical") ;
        Vector3 nowVelocity = rigid.velocity;
        if (Mathf.Abs(mx) > 0.01f || Mathf.Abs(mz) > 0.01f)
        {
            m_Pos = transform.position;
             transform.LookAt(m_Pos+new Vector3(mx, 0, mz));
            rigid.velocity = new Vector3(mx * moveSpeed, nowVelocity.y * moveSpeed, mz * moveSpeed);
            m_ator.SetBool("Walk",true);
        }
        else {
            rigid.velocity = new Vector3(0,nowVelocity.y*moveSpeed,0);
            m_ator.SetBool("Walk",false);
        }
        
       
 }


本文出自 “51CTO_King” 博客,请务必保留此出处http://cjboking.blog.51cto.com/11020113/1784536

以上是关于利用OnAnimatorove函数控制人物的移动的主要内容,如果未能解决你的问题,请参考以下文章

3D人物移动控制实现方案

关于用过控制人物移动的方法

unity3d 第三人称视角的人物移动以及相机控制

Easy Touch 摇感控制人物移动

关于Unity中ARPG游戏人物移动

Unity鼠标控制人物移动(即鼠标点击地面人物自动寻路到点击处)