制作小地图:小地图自刷新制作小地图

  原理:用不同的图标表示场景中不同的游戏物体,将(场景中)游戏物体位置实时放置小地图上,并控制图标的位置更新

   好处:可更好控制小地图上所需要显示的游戏物体

  游戏项目已托管到Github上:  传送门

  使用Camera渲染制作Minimap小地图:  传送门

小地图效果

(不足:并未对超出地图中的物体进行销毁~)

脚本

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Minimap : MonoBehaviour {
  6.  
  7. //单例模式
  8. public static Minimap _instance;
  9. public GameObject iconPrefab;
  10.  
  11. void Awake()
  12. {
  13. _instance = this;
  14. }
  15.  
  16. public GameObject AddIcon(string iconname)
  17. {
  18. GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);
  19. //设置图标的名字,更新图标的显示
  20. go.GetComponent<UISprite>().spriteName=iconname;
  21.  
  22. //把创建出来的图标返回出来
  23. return go;
  24. }
  25. }

Minimap.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class MinimapItem : MonoBehaviour {
  6.  
  7. public string iconName;
  8. private GameObject minimapIconGo;
  9. private Transform iconTrans;
  10. private Transform player;
  11.  
  12. void Start()
  13. {
  14. player = GameObject.FindGameObjectWithTag("Player").transform;
  15. minimapIconGo = Minimap._instance.AddIcon(iconName);
  16. iconTrans = minimapIconGo.transform;
  17. }
  18.  
  19. private void FixedUpdate()
  20. {
  21. Vector3 offset = transform.position - player.position;
  22. iconTrans.localPosition = new Vector3(offset.x, offset.z, )*;
  23. }
  24.  
  25. void OnDestroy()
  26. {
  27. Destroy(this.minimapIconGo);
  28. }
  29.  
  30. }

MinimapItem.cs

预制场景

  创建一个场景Gary_map

  调整场景灯光亮度Intensity为0.3

  添加一个Plane地面,给地面添加材质模拟地图场景

  添加一个Capsule物体作为玩家Player,为Player绑定PlayerMove脚本控制其移动

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class PlayerMove : MonoBehaviour {
  6.  
  7. public float speed = ;
  8.  
  9. // Use this for initialization
  10. void Start () {
  11.  
  12. }
  13.  
  14. // Update is called once per frame
  15. void Update () {
  16. float h = Input.GetAxis("Horizontal");
  17. float v = Input.GetAxis("Vertical");
  18.  
  19. transform.Translate(new Vector3(h,,v)*speed*Time.deltaTime);
  20. }
  21. }

PlayerMove.cs

  添加几个Capsule物体作为敌人Enemy,给Enemy添加脚本使其随机移动

  添加材质给Player,区别于敌人

  添加Ground标签给地面,Human标签给玩家和敌人(目的:只用来作为摄像机Culling Mask渲染层级,不做玩家和敌人区分)

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class EnemyMove : MonoBehaviour {
  6.  
  7. public float speed =;
  8.  
  9. private float timer = ;
  10. private float dirx = ;
  11. private float dirz = ;
  12. // Update is called once per frame
  13. void Update () {
  14. timer += Time.deltaTime;
  15. if (timer > )
  16. {
  17. dirx = Random.Range(-1f, 1f);
  18. dirz = Random.Range(-1f, 1f);
  19. timer = ;
  20. }
  21. transform.Translate(new Vector3(dirx, , dirz) * speed * Time.deltaTime);
  22. }
  23. }

EnemyMove.cs

 实现过程

  为了让图标显示在小地图上,先使用NGUI将要显示在地图上的图标制作成图集(Atlas Maker)

  图集用来显示不同的游戏物体对象,相同的游戏物体对象用同一种图集来表示

  添加一个UI Root,Delete掉背景,在Scene场景中添加一个Sprite用来显示小地图图标,将Sprite放置在UI Root右上角

  将UI Sprite下的Atlas图集选择Wooden Atlas,Sprite选择Highlight-Shadowed图集

  将其类型设置为Sliced(可剪切的),透明度可适当调低(opacity:100),位置Anchors设置为右上角

  将其重命名为minimap-bg

  minimap-bg作为所显示小地图的背景(圆形会更好)

  UI Root下创建一个Container容器,作为minimap的整体,位置设置为右上角

  UI Root下创建一个Sprite图片,用来表示玩家icon,将其重命名为player-icon

  将player-icon和minimap-bg放置在minimap父物体下

  player-icon代表游戏玩家,一般制作时都将游戏玩家显示在地图的正中心

  将player-icon制作为预制体minimap-ngui-icon

  在minimap上添加Minimap脚本,通过Minimap脚本获得场景中游戏物体的图标的名字,实时更新图标的显示

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class Minimap : MonoBehaviour {
  6.  
  7. //单例模式
  8. public static Minimap _instance;
  9. public GameObject iconPrefab;
  10.  
  11. void Awake()
  12. {
  13. _instance = this;
  14. }
  15.  
  16. public GameObject AddIcon(string iconname)
  17. {
  18. GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);
  19. //设置图标的名字,更新图标的显示
  20. go.GetComponent<UISprite>().spriteName=iconname;
  21.  
  22. //把创建出来的图标返回出来
  23. return go;
  24. }
  25. }

Minimap.cs

  给player添加Player标签,添加Minimap Item脚本

  Minimap Item脚本上引用Icon Name表示物体在小地图上所显示的图标

  给Player和Enemy1、2、3、4、5绑定Minimap Item脚本

  绑定Minimap Item脚本的物体会返回一个Sprite图片类型,这个图片将在小地图上显示且不断的刷新与Player的位置

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class MinimapItem : MonoBehaviour {
  6.  
  7. public string iconName;
  8. private GameObject minimapIconGo;
  9. private Transform iconTrans;
  10. private Transform player;
  11.  
  12. void Start()
  13. {
  14. player = GameObject.FindGameObjectWithTag("Player").transform;
  15. minimapIconGo = Minimap._instance.AddIcon(iconName);
  16. iconTrans = minimapIconGo.transform;
  17. }
  18.  
  19. private void FixedUpdate()
  20. {
  21. Vector3 offset = transform.position - player.position;
  22. iconTrans.localPosition = new Vector3(offset.x, offset.z, )*;
  23. }
  24.  
  25. void OnDestroy()
  26. {
  27. Destroy(this.minimapIconGo);
  28. }
  29.  
  30. }

MinimapItem.cs

  小地图上就能实时显示游戏场景中Icon的位置了

  小地图与场景中比例控制  1:5

  1. private void FixedUpdate()
  2. {
  3. Vector3 offset = transform.position - player.position;
  4. iconTrans.localPosition = new Vector3(offset.x, offset.z, )*;
  5. }

Unity3D_(插件)小地图自刷新制作Minimap小地图的更多相关文章

  1. Unity3D_(插件)使用Camera渲染制作Minimap小地图

    制作小地图:使用Camera渲染出来Render Texture 原理:使用摄像机从上到下获得场景游戏物体,摄像机Culling Mask渲染层级可设置是否需要在小地图上展示游戏物体,将摄像机获得的场 ...

  2. 使用gulp插件来自动刷新页面。

    http://itakeo.com/blog/2016/05/19/gulpreload/?none=123 使用gulp插件来自动刷新页面.再也不用修改一次,按一下F5了. 首选通过npm inst ...

  3. jQuery插件-jgcharts实现Javascript制作Google Charts

    from:http://www.zz68.net/program/Ajax/2010/0415/1992.html jgcharts是一个基于jQuery的非常经典的Google Charts图表制作 ...

  4. 【转】超简单利用UGUI制作圆形小地图

    http://sanwen.net/a/ithhtbo.html 由于UI都是Achor自己用PS做的,比较粗糙,大家见谅,不过丝毫不影响功能的实现,下面我们看看今天的笔记: 首先我们看看需要哪些组件 ...

  5. Unity 制作RPG小地图

    效果图: 最近公司要制作小地图,搜索网上的文章没找到有什么小实例,=.=直接上步骤: 制作小地图步骤: 1. 人物头顶有一个面板呈现人物图标 2. 有一个摄像机在主角头顶!(Target Textur ...

  6. Unity3D 制作右上角小地图

     一个简单的方法, 首先先在俯视图视角截取一张图片,用作小地图的背景图片.然后新建一个Plane,把截图附到Plane上,然后把Plane与刚才截图的场景的相应位置重合,要尽量重合,当做地图.(见 ...

  7. Jquery插件的使用及制作插件

    常用插件 插件:jquery不可能包含所有的功能,我们可以通过插件扩展jquery的功能. jQuery有着丰富的插件,使用这些插件能给jQuery提供一些额外的功能. jquery.color.js ...

  8. masonry插件和infinitescroll插件实现无刷新无分页完美瀑布流

    地址有:http://www.17sucai.com/pins/2657.html 如果你善于发现美,如果你善于观察新鲜的事物,如果你是一名有爱的前端攻城师或设计尸,那么你一定不会对下面图片中的结构感 ...

  9. 解决Vuex持久化插件-在F5刷新页面后数据不见的问题

    页面刷新后,想保存页面未保存的数据.我们总是习惯于放在浏览器的sessionStorage和localStorage中.但是用了vue后,vuex便可以被应用了. vuex优势:相比sessionSt ...

随机推荐

  1. javaScript的Array方法

    仅个人总结 声明方法: var arr = new Array(); var arr = new Array(1,2,3,4,5); var arr = new array(size);//当为一个参 ...

  2. Cypher查询在Neo4j中加载具有点数据类型属性的CSV文件

    我有一个CSV文件,标有3列,ID,纬度,经度.我想将CSV文件加载到Neo4j中并创建具有上述属性的节点.Location:属性应该是具有纬度和经度子属性的点数据类型. CSV是: ID,latit ...

  3. windows下使用zookeeper

    windows下dos窗口操作:https://blog.csdn.net/a632189007/article/details/78085858

  4. python:map 函数

    map(func, *iterables) --> map object map()是 Python 内置的高阶函数,它接收一个函数 func 和一个 list(*iterables),并通过把 ...

  5. powerDisgner 数据类型对比

    powerDisgner 16.5版本支持一下类型数据模型格式 以下数字数据类型可用: Standard data type DBMS-specific physical data type Cont ...

  6. thinkphp3.2.3 自动验证 unique 出错的解决办法

    场景:修改数据时,唯一验证name字段出错,提示已存在. 排查: 1.传入的参数是否包含主键,因为 D('模型名')->create() 会自动判断是否是新增或者修改,根据传入的参数判断是否包含 ...

  7. scrapydWeb安装和使用

    1. 安装:pip install scrapydweb 2. 启动:scrapydweb 第一次执行,当前目录会生产配置文件:scrapydweb_settings_v8.py 配置账户和密码: # ...

  8. (转)Java并发编程:核心理论

    原文链接:https://www.cnblogs.com/paddix/p/5374810.html Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及 ...

  9. centos8 网卡命令(centos7也可用)

    nmcli n 查看nmcli状态 nmcli n on 启动nmcli nmcli c  up eth0 启动网卡eth0 nmcli c down eth0 关闭网卡eth0 nmcli d c ...

  10. 求二叉搜索树的第k小的节点

    题目描述: /** * 给定一棵二叉搜索树,请找出其中的第k小的结点. * 例如, (5,3,7,2,4,6,8)中, * 按结点数值大小顺序第三小结点的值为4. * 这是层序遍历: * 5 * 3 ...