前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >控制人物移动篇

控制人物移动篇

作者头像
bering
发布2019-12-03 15:18:02
1.1K0
发布2019-12-03 15:18:02
举报
文章被收录于专栏:游戏开发之旅游戏开发之旅

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/CJB_King/article/details/52091163

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

  1. 利用transform的translate方法控制人物移动;(结合动画的控制就不说了)
代码语言:javascript
复制
 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()方法进行移动(包含动画控制部分),鼠标控制人物移动;

代码语言:javascript
复制
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属性来控制人物移动了

代码语言:javascript
复制
 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档