版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gsm958708323/article/details/82878071
为了节约性能,这里我们使用图片作为小地图的背景,而不是新添加一个相机实时渲染地形。
- 首先,需要裁剪地形。
在Scene视图下,将视角调整到合适,裁剪的效果的如下的:位置。
2.新建Image,导入裁剪素材
3.新建一个箭头来模拟Player,添加MiniMap脚本。
制作过程:
- 人物旋转和箭头同步
- 人物与地形的比例关系
- 箭头和小地图的比例关系
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LitMap : MonoBehaviour
{
/// <summary>
/// 地形
/// </summary>
private Terrain terrain;
private Transform player;
/// <summary>
/// 小地图
/// </summary>
private RectTransform miniMap;
/// <summary>
/// 箭头
/// </summary>
private RectTransform arrow;
// Use this for initialization
void Start()
{
player = GameObject.FindWithTag("Player").transform;
terrain = GameObject.FindWithTag("Terrain").GetComponent<Terrain>();
miniMap = transform.parent.GetComponent<RectTransform>();
arrow = GetComponent<RectTransform>();
//Debug.Log(player.name + terrain.name + arrow.name + miniMap.name);
}
// Update is called once per frame
void Update()
{
if (player && terrain)
{
/*
* 人物旋转和箭头同步
* 1.人物与地形的比例关系
* 2.箭头和小地图的比例关系
*/
arrow.rotation = Quaternion.Euler(0, 0, -player.transform.rotation.eulerAngles.y + 90);
float tmpX = player.position.x / terrain.terrainData.size.x;
float tmpY = player.position.z / terrain.terrainData.size.z;
tmpX = miniMap.rect.x * tmpX;
tmpY = miniMap.rect.y * tmpY;
//转换为屏幕坐标
arrow.anchoredPosition = new Vector2(-tmpX, -tmpY);
}
}
}