Unity制作小地图

  • Post author:
  • Post category:其他


制作小地图所需素材下载处见:

小地图制作资源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;

}

}

到此大功告成!



版权声明:本文为qq_36450306原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。