步骤

1.实现小地图

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

undefined

2.转换坐标

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

undefined

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

undefined

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 });
    }
    

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

4.实现效果

undefined
undefined