Unity技术笔记:微缩小地图的一个简易版解决方案

需求:假如在第一人称游戏中,需要做一个小地图。为了美观和简便选择做成正方形

小地图拿来干嘛呢?用于实时检测自身相对于小地图的位置,顺便监测敌人相距自身的距离远近,从而方便玩家判断危险性和优先级。


方案大致思路:用一个正投影Orthographic的相机(取消透视的那种相机),竖直正对场景朝下看。在敌人和主角脚下固定一个物体(比如球体)用一些显眼的颜色渲染,从而作为指示器,方便在地图中指示。

通过一系列设置达到:主摄像机不显示特殊物体,作为小地图的相机只显示特殊物体+场景。

同时需要对地图用的摄像机的边框进行设置,避免形状不符合预期。


一、相机设置

1、相机参数调整

相机面向正对竖直朝下,设为Orthographic,调整Size值,调整Viewport Rect到自己满意为止。

解释:

Size:可以看作是取景范围大小。

ViewportRect中:XYWH四个量取值范围0-1,四个值指示将在屏幕上绘制此摄像机视图的位置。

X、Y——代表绘制摄像机视图的起始水平位置、起始垂直位置

W(Width)H(Height)——代表屏幕上摄像机输出的宽度、高度。

特别注意:删除相机上的AudioListener组件,同一个场景,只允许一个AudioListener。

------------

2、让主摄和地图摄像机只专注自己的

——给主角和敌人脚下各自放不同颜色的比较大的基本球体,shader可以选个LegacyShader/Self-illumin/Diffuse(自发光着色器,自身会发光,同时会响应场景中平行光),然后放到对应主角/敌人的层级之下。

它将作为只能显示在小地图摄像机中的代表物。(删除Collider,因为用不到)

——给代表物设置新Layer

——随后让主摄像机不显示这一层(Camera-->Culling Mask);让小地图摄像机只显示地图层和新Layer层

-------------

二、脚本控制小地图摄像机的细节

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MapCamera : MonoBehaviour
{
    void Start()
    {
        //屏幕分辨率获取
        float ratio = (float)Screen.width / (float)Screen.height;
        this.GetComponent().rect = new Rect((1 - 0.2f), (1 - 0.2f * ratio), 0.2f, 0.2f * ratio);
    }

    
}
细节解释:

1、Screen.width、Screen.height:以像素为单位的当前屏幕窗口宽/高;是int。

这里获取到宽/高比,用来调整小地图窗口使其变为正方形。否则得到的窗口比例和屏幕比例将保持一致,就不是正方形了。

2、Camera.rect:摄像机屏幕上是以标准化坐标呈现的。rect中的四个值范围从0(左/下)到1(右/上)。

——这里Camera中的所谓rect结构体3种构造方式,用到了第三种:
public Rect(Rect source);

public Rect(Vector2 position, Vector2 size);

public Rect(float x, float y, float width, float height);

——其中x和y分别表示矩形的XY坐标;在这里理解为矩形的左下角点位的位置

(注意有一个例外是 GUI 和 GUILayout 类的Rect,这俩例外情况中的 Y 向下增加。即矩形的左上角位置)

——width是矩形的宽度,根据X测量得到

——Height是矩形高度,根据Y测量得到

笔记记录中,如果有考虑不周或者谬误,欢迎评论留言指正~

你可能感兴趣的:(unity,游戏,笔记,小地图,游戏引擎,Camera,组件)