Unity 通过等比例换算实现游戏中小地图

2022-08-29 15:47:55 浏览数 (2)

小地图可以通过两种方式实现:

一、通过相机渲染方式实现:

在Project窗口中右键创建Render Texture资产,使用一个相机以俯视视角渲染地面,将Target Texture属性设为创建的Render Texture,同时新建RawImage将其Texture属性也设为同一张Render Texture。

二、通过等比例换算实现:

原理如下:

水平比例 = 地形长度 / 小地图Image的长度

垂直比例 = 地形宽度 / 小地图Image的宽度

以地形左下角作为基准点

x = 人物位置与基准点的水平距离

y = 人物位置与基准点的垂直距离

人物在小地图中的位置(anchoredPosition) = new Vector2(x / 水平比例, y / 垂直比例)

代码语言:javascript复制
using UnityEngine;

public class MiniMap : MonoBehaviour
{
    //基准点位置
    [SerializeField] private Transform basePoint;
    //人物位置
    [SerializeField] private Transform target;
    //地形宽度
    [SerializeField] private float terrainWidth;
    //地形长度
    [SerializeField] private float terrainLength;
    //小地图宽度
    [SerializeField] private float miniMapWidth;
    //小地图长度
    [SerializeField] private float miniMapLength;

    //水平比例
    private float horizontalRate;
    //垂直比例
    private float verticalRate;

    private RectTransform rt;

    private void Start()
    {
        rt = GetComponent<RectTransform>();
        horizontalRate = terrainLength / miniMapLength;
        verticalRate = terrainWidth / miniMapWidth;
    }

    private void Update()
    {
        float x = Mathf.Abs((target.position - basePoint.position).x);
        float y = Mathf.Abs((target.position - basePoint.position).z);
        rt.anchoredPosition = new Vector2(x / horizontalRate, y / verticalRate) - rt.rect.size * .5f;
    }
}

人物图标Image的Anchors、Pivot均设为0,此时图标以左下角为基准点,所以为了对应中心位置,需要减去图标大小一半的偏移量。

代码语言:javascript复制
rt.anchoredPosition = new Vector2(x / horizontalRate, y / verticalRate) - rt.rect.size * .5f;

0 人点赞