小地图可以通过两种方式实现:
一、通过相机渲染方式实现:
在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;