您的位置:首页 > 移动开发 > Unity3D

Unity-点击屏幕进行移动

2018-02-01 16:43 579 查看
Unity中实现点击屏幕进行移动

1,首先获取点击事件   是在void Update里每帧都要监测






Input.GetMouseButton(0) 是输入鼠标抬起事件  0鼠标左键  1鼠标右键  2鼠标中键

Input.touchCount==1  移动平台  如手指触摸屏幕  1个手指1  2个手指2  3个手指3

2,点击事件在什么位置

      1>首先在Hierarchty面板创建一个空物体起名Road(路)  在它的底下在建一个空物体改名叫Ground(地面),再在它的下面建一个平面Plane给名叫Ground,将Mesh Renderer勾掉 它是渲染的意思  但是另一个Mesh
Collider 适用于碰撞检测的







  2>做发先从摄像机发出射线和地面碰撞,碰到的点就是移动的点

Ray ray =Camera.main.ScreenpointToRay(Input.mouseposition) 

射线          主摄像机          摄像机到屏幕一个点        鼠标位置






上面这张图是射线转换图     摄像机到屏幕一个点   ScreenPointToRay

                                          屏幕转换为视窗          ScreenToViewportPoint

                                          屏幕转换为世界          ScreenToWorldPoint

                                          视窗转换为屏幕        
 ViewToScreenPoint







3>定义一个光线碰撞投射信息   RayCastHit  hitInfo

4>有了射线就要进行碰撞  if(Physics.RayCast(ray,out hitInfo))  碰到一个动画返回一个true

                                             射线投射   起点  方向  长度 

角色位置到鼠标位置和朝向



以下两张图是一个完整的简单的点击屏幕进行移动的写法





第二种写法



解释:先定义目标点位置  public Vector3 m_Targetpos   定义目标速度   public  float  m_Speed

         if(hitInfo.collider.gameObject.Equals("Ground",System StringComParison.CurrentCultureIgnoreCase))如果碰到地面返回一个点,在这里需要定义一个点

        m_Targetpos=hitInfo.point;  目标位置等于射线点的位置

       if(Vector3.Distance(m_Targetpos,transform.position))
 Distance两点之间的距离


     Vector3.forward是一个定值,它没有任何意义!它仅仅代表Vector3(0,0,1)

 
    Space.Self应用变换相对于局部坐标系统,也叫本地坐标,自身坐标。

 
    transform.Translate默认沿着物体移动的方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity