Unity3D小地图制作方法,有一些代码看不懂,求解释!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D小地图制作方法,有一些代码看不懂,求解释!!!相关的知识,希望对你有一定的参考价值。

参考技术A 我是看懂了,不过怎么说呢。
map.width/mapWidth
*
x
得到是小地图中x
的位置
,map.width/2
为什么要加这个呢!因为在世界地图中原点是在大地图的正中间(估计你就是这没看懂吧),map_cube.width/2
是主角贴图的一半,
Screen.width
-
map.width
是屏幕左侧到小地图左侧的距离。
至于在y轴上有点意思,GUI
坐标是左上角为起点和屏幕坐标以左下角为起点,所以map.height
-
((map.height/mapHeight
*
z)
就正好是主角在小地图上的位置,map.height
/
2
和上面一样是将原点放到中间。

小地图制作

  • 使用Camera渲染出来的Render Texture

    利用正交相机渲染,然后显示出来

    步骤:

    • 为需要在小地图上显示的物体做好图标,小图标可以已Quad作为载体

         

    • 不同的GO设置好不同的Layer

      GO头顶的图标作为Minimap,地面是Ground,人物类的是Human等等,根据需求分好.

         

    • 设置添加正交相机

      模拟一个最常见的情况:相机从玩家头顶往下看.所以相机可以直接作为Player子物体,然后设置为正交,然后可以屏蔽某些Layer.

      设置成正交相机:

      屏蔽掉Human,只显示头顶的图标

         

    • 创建一个Render Texture,并指定给正交相机的Target Texture

         

         

    • 到这里已经能看到 想要的东西了.下面需要把它显示到UI上.

         

         

    • 使用UGUI作为UI显示

      创建一个Material,Main Texture 是我们前面创建的Render Texture,Mask Texture(用一个自定义的shader,添加个圆形遮罩).

         

    • UGUI中创建一个Raw Image.指定前面创建的Material给Raw Image的material.

      实际效果:

   

   

   

  • 自己计算需要在小地图上显示的物体,并更新位置

    我们自己 创建一个"图片",然后根据周围的物体,在这个"图片"上创建对应的图标.

    • 准备一个背景图片

      这里用的UGUI的Image配合一张灰色图片做背景.

    • 做一个prefab

      所有的物件都用这个Prefab来显示,不同的GO 我们用不同的Source Image;

    • 作为背景的Image添加一个脚本,来生成别的GO的 Icon

      using UnityEngine;

      using UnityEngine.UI;

         

      public class Minimap_ugui : MonoBehaviour

      {

      public static Minimap_ugui _instance;

      public GameObject iconPrefab;

      void Awake()

      {

      _instance = this;

      }

         

      public GameObject AddIcon(Sprite icon)

      {

      GameObject go = Instantiate(iconPrefab, this.gameObject.transform);

      go.GetComponent<Image>().sprite = icon;

         

      return go;

      }

      }

    • 每一个需要在MiniMap中显示图标的物体添加如下脚本

      using UnityEngine;

         

      public class MinimapItem_ugui : MonoBehaviour

      {

      public Sprite icon;//这个GO需要什么图标就设置在这里

         

      private GameObject minimapIconGo;

      private Transform iconTrans;

      private Transform player;

         

      void Start()

      {

      player = GameObject.FindGameObjectWithTag("Player").transform;

         

      minimapIconGo = Minimap_ugui._instance.AddIcon(icon);

      iconTrans = minimapIconGo.transform;

      }

         

      void FixedUpdate()//根据GO和player的位置关系.计算得到在小地图中的位置,并更新

      {

      Vector3 offset = transform.position - player.position;

      iconTrans.localPosition = new Vector3(offset.x, offset.z, 0) * 5;

      }

         

      void OnDestroy()

      {

      Destroy(this.minimapIconGo);

      }

      }

    • 效果:

         

    思考:只是很简单的例子.根据游戏开发的实际需求,可能实现方法也有不同.

       

欢迎交流 : D:workhai@Outlook.com

以上是关于Unity3D小地图制作方法,有一些代码看不懂,求解释!!!的主要内容,如果未能解决你的问题,请参考以下文章

unity小地图制作___按比例尺图标布局

Unity3D制作小地图

c++模板如何学好啊?愁,看不懂,求指导

java中 index怎么用啊,这个关于index的代码看不懂,求讲解~~

求CTF主题壁纸制作

如何系统的学习 Unity 3D 中的 shader 编写