Unity-点击屏幕进行移动

  • Post author:
  • Post category:其他




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 Rendere


r


勾掉 它是渲染的意思  但是另一个

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默认沿着物体移动的方法












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