您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    游戏物体跟着鼠标方向移动
    时间:2015-05-12 08:46 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印

    效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样。


    思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动。


    如果你看到这的话,最好先别往下看,自己按着这个思路试做一下,实在不行再看看我的哈~~~~


    var world:Vector3;
    var speed:float=0;//物体的移动速度
    function Update (){
      var screenpos=Camera.main.WorldToScreenPoint(transform.position);//物体的世界坐标转化成屏幕坐标
      var e:Vector3=Input.mousePosition;//鼠标的位置
      //当点击鼠标左键时
      if(Input.GetMouseButton(0)){
         e.z=screenpos.z;//1.因为鼠标的屏幕 Z 坐标的默认值是0,所以需要一个z坐标
         world=Camera.main.ScreenToWorldPoint(e); 
         speed=1;    
      }
      if(transform.position==world){      
         speed=0;
      }else{
         animation.Play("walk");//这是我自身带的一个默认动画,你可以把它删了
      }
      transform.LookAt(world); //物体朝向鼠标    
      transform.Translate(Vector3.forward*speed*Time.deltaTime);
      
    }


    当然,上面那个适合垂直平面,即摄像头垂直x-z平面,但一般游戏都不会垂直的。

    如果不垂直的话,用上面方法可能就会出现类似游戏对象穿透地面的现象,所以我们得改一下代码。


    就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下这句就行了


         world.x=Camera.main.ScreenToWorldPoint(e).x; 
         world.z=Camera.main.ScreenToWorldPoint(e).z;
         world.y=transform.position.y;





    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。