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