小地图的制作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gsm958708323/article/details/82878071

为了节约性能,这里我们使用图片作为小地图的背景,而不是新添加一个相机实时渲染地形。

  1. 首先,需要裁剪地形。
    在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);

        }
    }
}

猜你喜欢

转载自blog.csdn.net/gsm958708323/article/details/82878071
今日推荐