制作小地图所需素材下载处见:
小地图制作资源QQQQQQQQQQQQ_moba地图设计-Unity3D文档类资源-CSDN下载
首先在Unity导入资源包,然后创建基本的游戏场景,有地面和人物角色,然后再创建一个相机,注意找到它Camera组件上的TargetTexture,然后在Project面板上新建一个CustomTexture,将这个CustomTeture拖到相机Camera组件上的TargetTeture上,如下图所示:
这其实就已经自动生成了一个Texture,内容为相机视野,再接着在Project面板创建一个Material,将其Shader类型改为Custom/Mask, 然后把它的MainTeture设为NewCustomTeture,把MaskTeture设为资源包中Mask文件夹下面的Mask(其实Mask是一张白色圆形图片,背景色是透明的),具体表现如下:
那么这个时候已经做好了小地图的材质球,然后在Canvas下面创建一个图片,设置好图片的位置,找到图片Image组件中的Material,把做好的材质球拖进来。如下:
可以看到这个时候在游戏场景中已经显现了一个小地图:
然后在Hierarchy面板设置小地图相机的Culling Mask,这个根据自己意愿让哪一些可见,哪一些不可见,到此为止小地图已经完成大半,然后需要给场景中的人物角色添加一个小图标,然后让小地图相机能够看到这个角色图标
所以在人物角色物体的子层创建一个3D/Quad,取名为MiniIcon, 将其绕x轴旋转90度,然后把它摆放到人物的正上方,然后在资源包中找一个图标拖到Quad上, 注意要将Quad的材质球的Shader改为 Legacy Shaders/Transparent/Diffuse,即透明材质。(或者自己另外创建一个材质球,将其Shader设为Legacy Shaders/Transparent/Diffuse,然后选择自己喜欢的图标贴上材质球,然后再将材质球拖到MiniIcon的Material上)
结果如下:
为了更好的显示小地图角色图标,可以在MiniIcon下面再创建一个Quad, 然后放一张稍微透明点的图片,本文所用素材是前面下载根目录下的Direct1.png, 然后放置好位置,然后给MiniIcon添加标签Tag,名字为MiniMap. 然后设置前面创建小地图相机的Culling Mask, 让小地图相机可以看到MiniIcon,同理设置主相机,让主相机不能看到MiniIcon
最终结果如下:
到此完成,然后在游戏运行的时候,要始终让小地图相机跟随人物角色,这里有两种方式,第一种是直接将小地图相机拖到人物角色的子物体里面,这样即可,但是这样会导致当角色转动的时候,相机也会跟着转动,小地图中角色图标始终只会朝着一个方向
第二种跟随方法是写代码,给小地图相机添加一个脚本叫做MiniMap,脚本内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MiniMap : MonoBehaviour {
private Transform currentPlayer;
private Vector3 miniVec;
private GameObject miniMap;
// Use this for initialization
void Start () {
ShowMini(); //用来获得当前需要跟随的游戏角色
miniMap = GameObject.Find(“Canvas/MiniMap”);
}
// Update is called once per frame
void Update () {
if (currentPlayer != null)
{
miniVec = transform.position;
miniVec.x = currentPlayer.position.x;
miniVec.z = currentPlayer.position.z;
transform.position = miniVec;
}
}
public void ShowMini() {
miniMap.transform.GetComponent<Image>().enabled = true;
currentPlayer = GameFacade.Instance.PlayerMng.GetCurrentRoleGameObject().transform;
}
public void HideMini() {
miniMap.transform.GetComponent<Image>().enabled = false;
}
}
到此大功告成!