1. 程式人生 > >小地圖的製作

小地圖的製作

為了節約效能,這裡我們使用圖片作為小地圖的背景,而不是新新增一個相機實時渲染地形。

  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);

        }
    }
}