孙广东 2015.6.25
这个在AssetStore上有几个不错的插件, 除了知道原理,能自己实现还是好的。
非常多插件是不会直接使用的。而是要依据自己项目的需求进行改动或者就是自己写。
那么我们要怎么弄呢? 大家能够先了解一下:https://www.assetstore.unity3d.com/en/#!/content/10043 项目Demo的代码,就会看到小地图的应用。事实上原理都是一样的。关于这一部分,网上也是有一箩筐。
按部就班的实现这个功能:
步骤1:
在菜单条中选择【GameObject】-》【Create Other】-》【Camera】 创建一个新的摄像机。它将作为小地图的专用摄像机。调整他的位置,使其在场景上方垂直向下。 然后将其设置为Orthographic, 取消透视并调整Size的值,改变视图大小,设置Viewport Rect 改变摄像机显示区域的位置和大小, 如图所看到的:
步骤2:
执行游戏。屏幕的右上方即会出现一个小地图,但根本看不清里面的东西。可能位置不对。
如今的小地图摄像机和正常摄像机的显示是一样的,仅仅只是它是从上向下看。接下来,我们要做的是使小地图摄像机仅仅专注自己须要的东西。并通过脚本使小地图摄像机的视图不管在何种分辨率下永远是一个正方形。
步骤3:
创建一个球体,命名为dummy。 将其材质设置为,红色Self-Illumin/Diffuse, 它将作为敌人的 “替代体” 仅仅能显示在小地图之中,并不能在主摄像机视图显示出来。将球体Sphere Collider 去掉。我们仅仅须要它的显示功能。
步骤4:
创建一个Layer。命名为dummy, 并设置球体的Layer位dummy。
步骤5:
将球体置于敌人Prefab的层级之下,这样它会随着敌人的移动而移动,如图所看到的:
步骤6:
选择 主摄像机,取消显示 dummy层,球体在主摄像机视图中将不会被显示出来,如图所看到的:
步骤7:
选择小地图摄像机,使其仅仅显示level 和 dummy 层。这样在小地图中仅仅能看到场景和球体。
如图所看到的
步骤8:
使用同样的方法为主角也创建一个”替代体“ 。能够为其制定与敌人不同的颜色。
步骤9:
创建脚本 MiniCamera.cs ,将其指定给小地图摄像机,加入代码例如以下:
using UnityEngine;
using System.Collections;
[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:
由于主摄像机上已经有了一个AudioListener, 同一个场景中仅仅同意存在一个该组件,所以要取消选中(或删除)小地图摄像机的【AudioListener】,如图所看到的。
OK 完成。
假设希望继续改进小地图的显示。还能够为场景专门制作一个用于小地图显示的模型。