![Unity 3D\2D手机游戏开发:从学习到产品(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/490/26943490/b_26943490.jpg)
3.8 小地图
现在的游戏已经有模有样,但因为四面八方都是敌人,我们在游戏的时候可能搞不清敌人都在哪里,最后我们将为游戏添加一个小地图,用来查看敌人的位置。
步骤 01 在菜单栏中选择【GameObject】→【Create Other】→【Camera】,创建一个新的摄像机,它将作为小地图的专用摄像机。调整它的位置,使其在场景上方垂直向下,然后将其设置为Orthographic,取消透视并调整Size的值改变视图大小,设置Viewport Rect改变摄像机显示区域的位置和大小,如图3-21所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0101_0002.jpg?sign=1739557122-qFbWmIw4wKPRTQQd5FUqq78NnFsJ997Z-0-6955dc9effde3462c6977abca570486a)
图3-21 设置小地图摄像机
步骤 02 运行游戏,屏幕的右上方即会出现一个小地图,但根本看不清里面的东西,可能位置也不正确,如图3-22所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0101_0004.jpg?sign=1739557122-88auHJpODMq9xx2FobpuEvutDyKjuunl-0-edffbb6047847033e440ce30c14c8253)
图3-22 小地图
现在的小地图摄像机与正常摄像机的显示是一样的,只不过它是从上向下看。接下来,我们要做的是使小地图摄像机与主摄像机只专注显示自己需要的东西,并通过脚本使小地图摄像机的视图无论在何种分辨率下永远是一个正方形。
步骤 03 创建一个球体并命名为dummy,将其材质设为红色Self-Illumin/Diffuse,它将作为敌人的“代替体”,只能显示在小地图中,并不能在主摄像机视图显示出来。将球体的Sphere Collider取消,如图3-23所示,我们只需要它的显示功能。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0102_0002.jpg?sign=1739557122-Iaw0qFbJoiXMx2D1c22fCYrWj2BgiQP4-0-2fde97ab5d40918c167f7cc10e3117e3)
图3-23 取消球体的碰撞组件
步骤 04 创建一个新的Layer,命名为dummy,并设置球体的Layer为dummy。
步骤 05 将球体置于敌人Prefab的层级之下,这样它会随着敌人的移动而移动,如图3-24所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0102_0005.jpg?sign=1739557122-NNpi7VEV5O8JGJMF0B74DvMsYS2vudWD-0-a46bfc0c6b2450dc80525db3ddc11d35)
图3-24 关联球体和敌人
步骤 06 选择主摄像机,取消显示dummy层,球体在主摄像机视图中将不会被显示出来,如图3-25所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0103_0001.jpg?sign=1739557122-cy9DS7gm99eSH2TFWVesj5G0SNjQ8i7S-0-fcc2478b05b1401098a53b5ea9ec3acc)
图3-25 在主摄像机视图中隐藏球体
步骤 07 选择小地图摄像机,使其只显示level和dummy层,这样在小地图中只能看到场景和球体,如图3-26所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0103_0002.jpg?sign=1739557122-VFCGDnt3Qd2WfJi5fxh1UeTIMF9tBGe6-0-3d2a326a8ac2463208989c97a76e5f4b)
图3-26 在小地图摄像机视图中只显示球体和场景
步骤 08 使用相同的方法为主角也创建一个“代替体”,可以为其指定与敌人不同的颜色。
步骤 09 创建脚本MiniCamera.cs,将其指定给小地图摄像机,添加代码如下:
using UnityEngine; [AddComponentMenu("Game/MiniCamera")] public class MiniCamera : MonoBehaviour { // Use this for initialization void Start () { // 获得屏幕分辨率比例 float ratio = (float)Screen.width / (float)Screen.height; // 使摄像机视图永远是一个正方向,rect的前两个参数表示XY位置,后两个参数是XY大小 this.GetComponent<Camera>().rect = new Rect((1-0.2f), (1-0.2f * ratio), 0.2f, 0.2f * ratio); } }
这里的代码很简短,主要是使小地图摄像机的视图永远是一个正方形。
步骤 10 因为主摄像机上已经有一个Audio Listener,同一个场景中只允许存在一个该组件,所以要取消选中(或删除)小地图摄像机的【Audio Listener】复选框,如图3-27所示。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0103_0004.jpg?sign=1739557122-Q0oOoM7n2MBukr4IuYeImX189X52QSvX-0-cea85f8d23a504a4101ec641b138e1db)
图3-27 取消选中【Audio Listener】复选框
运行游戏,最后的效果如图3-28所示。如果希望继续改进小地图的显示,还可以为场景专门制作一个用于小地图显示的模型。
![](https://epubservercos.yuewen.com/6A4FC9/15367245604191906/epubprivate/OEBPS/Images/figure_0103_0005.jpg?sign=1739557122-g018PqX7gzbh4gNv1ZFq3mHllsdw9hLl-0-3728b3b0178d5e86053069fcd9064284)
图3-28 最后的小地图效果
本章的示例工程文件保存在资源文件目录c03_FPS中。在资源文件目录build\fps下保存有已经编译好的版本,可以直接运行游戏。