优化小地图(非RawImage方法,节省性能)

一、小地图设计

1.首先俯视需要用到的地图,截一张俯视图(ps让美工修一下,大小可以采用512 * 512 其他的也可以)。
2.我们创建一个大小一样cube让这个大小刚好包围我们需要的地图场地。
3.通过3D世界坐标转换成屏幕的2D坐标显示小地图。

二、功能实现

1.截取俯视图

优化小地图(非RawImage方法,节省性能)_第1张图片

2.创建Cube包裹住场地,并且创建一个子物体坐标为(0,0,0)

在这里插入图片描述
优化小地图(非RawImage方法,节省性能)_第2张图片

此时cube的子物体的坐标如下

优化小地图(非RawImage方法,节省性能)_第3张图片

这里说一下我们只需要将我们小地图中的人物的transform.position 实时赋值给 当前子物体,然后获得子物体的localposition就可以获得当前的坐标比例,然后将其转换到2D UI上即可
3.创建UI显示小地图

在这里插入图片描述

BG就是半透的球场
Role1是下图的红色和黄色小标签

小地图如下

优化小地图(非RawImage方法,节省性能)_第4张图片

坐标转换代码如下:


    /// 
    /// 需要转换在小地图的人物
    /// 
    public Transform role;

    /// 
    /// 球场子物体
    /// 
    public Transform pos1;

    /// 
    /// 球场
    /// 
    public Transform Ground;

    /// 
    /// 小地图Img
    /// 
    private Image Img;

	/// 
    /// 父级宽度
    /// 
    private float width;
	
	/// 
    /// 父级高度
    /// 
    private float height;

    private void Start()
    {
        Img = GetComponent<Image>();
        width = Img.transform.parent.GetComponentInParent<RectTransform>().sizeDelta.x;
        height = Img.transform.parent.GetComponentInParent<RectTransform>().sizeDelta.y;
    }

    private void Update()
    {
        pos1.position = role.position;
        transform.localPosition = new Vector3 (pos1.localPosition.z * width, - pos1.localPosition.x * height, 0);
    }

你可能感兴趣的:(Unity)