Unity制作小地图

       制作小地图所需素材下载处见:https://download.csdn.net/my/uploads

      首先在Unity导入资源包,然后创建基本的游戏场景,有地面和人物角色,然后再创建一个相机,注意找到它Camera组件上的TargetTexture,然后在Project面板上新建一个CustomTexture,将这个CustomTeture拖到相机Camera组件上的TargetTeture上,如下图所示:

Unity制作小地图_第1张图片

这其实就已经自动生成了一个Texture,内容为相机视野,再接着在Project面板创建一个Material,将其Shader类型改为Custom/Mask, 然后把它的MainTeture设为NewCustomTeture,把MaskTeture设为资源包中Mask文件夹下面的Mask(其实Mask是一张白色圆形图片,背景色是透明的),具体表现如下:

Unity制作小地图_第2张图片

那么这个时候已经做好了小地图的材质球,然后在Canvas下面创建一个图片,设置好图片的位置,找到图片Image组件中的Material,把做好的材质球拖进来。如下:

Unity制作小地图_第3张图片

可以看到这个时候在游戏场景中已经显现了一个小地图:

Unity制作小地图_第4张图片

然后在Hierarchy面板设置小地图相机的Culling Mask,这个根据自己意愿让哪一些可见,哪一些不可见,到此为止小地图已经完成大半,然后需要给场景中的人物角色添加一个小图标,然后让小地图相机能够看到这个角色图标

所以在人物角色物体的子层创建一个3D/Quad,取名为MiniIcon, 将其绕x轴旋转90度,然后把它摆放到人物的正上方,然后在资源包中找一个图标拖到Quad上, 注意要将Quad的材质球的Shader改为 Legacy Shaders/Transparent/Diffuse,即透明材质。(或者自己另外创建一个材质球,将其Shader设为Legacy Shaders/Transparent/Diffuse,然后选择自己喜欢的图标贴上材质球,然后再将材质球拖到MiniIcon的Material上)

结果如下:

Unity制作小地图_第5张图片

为了更好的显示小地图角色图标,可以在MiniIcon下面再创建一个Quad, 然后放一张稍微透明点的图片,本文所用素材是前面下载根目录下的Direct1.png, 然后放置好位置,然后给MiniIcon添加标签Tag,名字为MiniMap. 然后设置前面创建小地图相机的Culling Mask, 让小地图相机可以看到MiniIcon,同理设置主相机,让主相机不能看到MiniIcon

最终结果如下:

Unity制作小地图_第6张图片

到此完成,然后在游戏运行的时候,要始终让小地图相机跟随人物角色,这里有两种方式,第一种是直接将小地图相机拖到人物角色的子物体里面,这样即可,但是这样会导致当角色转动的时候,相机也会跟着转动,小地图中角色图标始终只会朝着一个方向     

第二种跟随方法是写代码,给小地图相机添加一个脚本叫做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().enabled = true;
        currentPlayer = GameFacade.Instance.PlayerMng.GetCurrentRoleGameObject().transform;
    }
    public void HideMini() {
        miniMap.transform.GetComponent().enabled = false;
    }
}

到此大功告成!

你可能感兴趣的:(Unity组件学习)