利用OnAnimatorove函数控制人物的移动
unity中控制人物移动有很多方法,经过这么长时间的学习后,我总结了一些;
利用transform的translate方法控制人物移动;(结合动画的控制就不说了)
floatmx=Input.GetAxis("Horizontal")*moveSpeed*Time.deltaTime;floatmz=Input.GetAxis("Vertical")*moveSpeed*Time.deltaTime;transform.translate(mx,0,mz);
2.利用Rigidbody组件rigidbody.MovePosition()方法进行移动(包含动画控制部分),鼠标控制人物移动;
voidFixedUpdate(){floath=Input.GetAxis("Horizontal");floatv=Input.GetAxis("Vertical");Move(h,v);Turning();Animating(h,v);}voidMove(floath,floatv){Vector3movement;movement.Set(h,0,v);movement=movement.normalized*speed*Time.deltaTime;rigidbody.MovePosition(transform.position+movement);}voidTurning(){RaycamRay=Camera.main.ScreenPointToRay(Input.mousePosition);RayCastHithitInfo;if(Physics.RayCast(camRay,outhitInfo,distance,floorMask)){Vector3playerToMouse=hitInfo.point-transform.position;playerToMouse.y=0;QuaternionnewRotation=Quaternion.LookRotation(playerToMouse);rigidbody.MovePosition(newRotation);}}voidAnimating(floath,floatv){boolwalking=h!=0||v!=0;m_ator.SetBool("Walk",walking);}
3.还有一种就是利用Rigidbody的velocity属性来控制人物移动了
floatmoveSpeed=10;Animatorm_ator;Rigidbodyrigid;Vector3m_Pos;voidStart(){m_ator=transform.GetComponent<Animator>();rigid=transform.GetComponent<Rigidbody>();m_Pos=transform.position;}voidUpdate(){floatmx=Input.GetAxis("Horizontal");floatmz=Input.GetAxis("Vertical");Vector3nowVelocity=rigid.velocity;if(Mathf.Abs(mx)>0.01f||Mathf.Abs(mz)>0.01f){m_Pos=transform.position;transform.LookAt(m_Pos+newVector3(mx,0,mz));rigid.velocity=newVector3(mx*moveSpeed,nowVelocity.y*moveSpeed,mz*moveSpeed);m_ator.SetBool("Walk",true);}else{rigid.velocity=newVector3(0,nowVelocity.y*moveSpeed,0);m_ator.SetBool("Walk",false);}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。