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

来源:互联网 发布:mac队基地 编辑:程序博客网 时间:2024/05/16 18:58

步骤

  • 步骤
    • 实现小地图
    • 转换坐标
    • 发出射线
    • 实现效果

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

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

4.实现效果

这里写图片描述

这里写图片描述

阅读全文
1 0