Unity小地图Map

从网上搜了一下,基本上的Map都是通过一些屏幕宽度跟鼠标位置计算出相对位置,然后根据地图的比例算出来的,这样的地图只能靠近屏幕的角落(当然不排除可以把另外一部分减去也可以)

 

今天我提供一个另外思路的Map,废话少说,直接上的代码

 

思路为把鼠标位置转为UGUI位置,然后把此位置跟UI地图作比较,然后根据比例算出位置

 

1、创建RenderTexture,命名为Map,设置大小为256x256,当然设置16:9的也可以,但是一定要跟MapCamera对上

 

2、创建RawImage放置第一步创建的RenderTexture的Map,大小设置为256x256

 

3、创建MapCamera,设置视口等属性

 

 

3、创建地块,创建Target,在Target里面创建一个Canvas并设置成为世界UI

 

4、把需要MapCamera显示的物体设置成同一个层级(Layer),我这里设置的事Map

 

5、最后看一下定位的代码

public class MapManager : MonoBehaviour
{
    [SerializeField]
    private Canvas canvas;

    [SerializeField]
    private Vector2 mapRtSize;    //RT大小,或者自动获取RT的Size

    [SerializeField]
    private Vector2 mapSize;     //地图大小

    [SerializeField]
    private Transform target;

    private Vector2 mapScale;    //地图缩放比例
    private void Start()
    {
        mapScale = mapRtSize / mapSize;
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 pos;
            RectTransform rt = canvas.transform as RectTransform;
            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rt, Input.mousePosition, canvas.worldCamera, out pos))
            {   //鼠标位置转为UGUI位置

                pos = pos - GetComponent<RectTransform>().anchoredPosition;
                Debug.Log(pos);
                if (Math.Abs(pos.x) > mapRtSize.x/2)   //限制位置
                {
                    pos = new Vector2(mapRtSize.x/2, pos.y);
                }
                if (Math.Abs(pos.y) > mapRtSize.y/2)
                {
                    pos = new Vector2(pos.x, mapRtSize.y/2);
                }
                target.position = new Vector3(pos.x/mapScale.x, 0, pos.y/mapScale.y);
            }
        }
    }

}

 

6、最后上传一下工程(版本Unity2018.3.14f1)

 https://files.cnblogs.com/files/ZhiXing-Blogs/Map.zip

posted @ 2020-05-25 11:24  狂奔的老鳖  阅读(455)  评论(0编辑  收藏  举报