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

来源:互联网 发布:影像测量软件 编辑:程序博客网 时间:2024/04/30 01:33

     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

0 0
原创粉丝点击