签到领奖

Unity3D 鼠标点击控制角色行走

[复制链接]
查看: 2145|回复: 0
3江湖小虾
501/500
发表于 2015-5-3 10:29:20 | 显示全部楼层 |阅读模式

鉴于用键盘方向键或w、a、s、d键操作角色行走的不便,经过和同事的一番倒腾,实现了鼠标控制角色行走、转向。


Unity3d 鼠标点击控制角色行走实现的过程如下:


1、获取目标点:通过相机向屏幕发射射线,射线会与地面collider发生碰撞,获取碰撞点坐标。

2、计算两者夹角:通过角色的position和目标点差值,计算出从角色当前position到目标点的向量,用此向量和角色朝向transfrom.Forward,计算出两者间的夹角。

3、旋转角色:通过调用transform.RotateAround函数实现角色旋转,使角色朝向目标点。

4、角色移动:通过实时改变角色position实现角色移动。


unity3d 鼠标点击控制角色行走开发过程中遇到角色旋转问题,不能很好的判断该顺时或逆时针旋转,导致角色朝向不正确,进而导致不能正确的移动到目标点。另外发现unity3d中的rotation初始角度为0时,当给它一个负旋转角度时,它不会逆时针旋转该角度,相反而是顺时针旋转(负角度+360),所以会导致朝向偏差。最后通过向量的叉乘,取其结果的Y坐标,根据其正负,改变两者夹角的正负。


[AppleScript] 纯文本查看 复制代码
<font style="color:rgb(85, 85, 85)"><font style="background-color:rgb(255, 255, 255)"><font face="Helvetica, Helvetica, sans-serif"><font style="font-size:12px">void Update ()
    {
  
    if(Input.GetMouseButtonDown(0))
    {
        RayControl();
    }
    if(flagMove)
        {
        if(Vector3.Distance(transform.position,mousePos)>1)
        {
         transform.Translate(transform.worldToLocalMatrix* transform.forward * Time.deltaTime*5);
        }
        else
        {
         flagMove=false;
        }
    }
}
  
    void RayControl()
    {
         Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);// 向屏幕发射线
         if(Physics.Raycast(ray,out hit,200))//射线的碰撞检测
         {
         GameObject targetPos=GameObject.CreatePrimitive(PrimitiveType.Sphere);
         targetPos.transform.localScale=new Vector3(0.5f,0.5f,0.5f);
          mousePos=hit.point;
          mousePos.y=transform.position.y;
          targetPos.transform.position=mousePos;
          targetDir=mousePos-transform.position;//目标点的朝向               Vector3 tempDir=Vector3.Cross(transform.forward,targetDir.normalized);
           float dotValue=Vector3.Dot(transform.forward,targetDir.normalized);
           float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//计算夹角
           if(tempDir.y<0)
           {
            angle=angle*(-1);
           }
           transform.RotateAround(transform.position,Vector3.up,angle);//旋转角色
           flagMove=true;
        }
    }</font></font></font></font>


最近访问 头像模式 列表模式
+1
2145°C
沙发哦 ^ ^ 马上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

在线客服(工作时间:9:00-22:00)
010-82609395
泰斗社区公众号

Copyright   ©2015-2016  【泰斗社区】-虚拟现实,微信开发,unity3d,unity3d教程下载首选u3d,unity3d官网  Powered by©Discuz!  技术支持:迪恩网络     ( 沪ICP备14023207号-9 )