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

【unity3d学习笔记】实现点击小地图让角色移动至对应位置

2017-07-30 20:59 405 查看

步骤

步骤
实现小地图

转换坐标

发出射线

实现效果

1.实现小地图

小地图使用Render Texture是很容易实现的,演示效果如下图所示:



2.转换坐标

当点击小地图时,可以获得点击位置的屏幕空间下的坐标,如果点击位置位于小地图周围的深色区域,则不予处理,当点击到小地图上时,需要将点击位置转换到小地图坐标系:



在屏幕空间中左下角为(0,0),右上角为(1,1)所以坐标变换只需要进行比例变换就行,不过要考虑两个坐标原点之间的偏移,因为在做的时候用的1920*1080分辨率,所以所有的比例按照这个数值进行计算,只要将图片锚点设置好后,并且画布设置为随屏幕大小自适应后其他比例也可以使用,这里我用来存放render texture的Raw Image的宽高都为1000:

设点击位置在屏幕空间下为(s_x,s_y),转换后在小地图坐标系下为(m_x,m_y);

则转换式为:



3.发出射线

转换后的坐标与实现小地图Camera的视图空间相同,此时可以让小地图Camera产生射线与场景发生碰撞获得位置信息.

主要代码:

public void OnPointerClick(PointerEventData eventData) {
Vector2 tempVector = new Vector2(eventData.pointerCurrentRaycast.screenPosition.x / Screen.width, eventData.pointerCurrentRaycast.screenPosition.y / Screen.height);
Vector2 raypoint=new Vector2((tempVector.x-(460/1920.0f))/(1000/1920.0f),(tempVector.y-(40/1080.0f))/(1000/1080.0f));
Ray ray = Camera.main.ViewportPointToRay(raypoint);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity)) {
//设置玩家移动目标为点击地点
player.SetDestination(hit.point);
}
//LineRender指向点击位置
lineDraw.SetPositions(new Vector3[2] { Vector3.zero, hit.point });
}


将改代码放于小地图上即可。

a48b

4.实现效果



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