Unity-点击屏幕进行移动

时间:2024-05-31 11:20:44
Unity中实现点击屏幕进行移动

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

Unity-点击屏幕进行移动

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 适用于碰撞检测的

Unity-点击屏幕进行移动

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

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

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

Unity-点击屏幕进行移动

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

                                          屏幕转换为视窗          ScreenToViewportPoint

                                          屏幕转换为世界          ScreenToWorldPoint

                                          视窗转换为屏幕          ViewToScreenPoint

Unity-点击屏幕进行移动

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

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

                                             射线投射   起点  方向  长度 

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

Unity-点击屏幕进行移动

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

Unity-点击屏幕进行移动

Unity-点击屏幕进行移动

第二种写法

Unity-点击屏幕进行移动

解释:先定义目标点位置  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默认沿着物体移动的方法