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

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

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

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

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

小地图效果

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

脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Minimap : MonoBehaviour {//单例模式public static Minimap _instance;public GameObject iconPrefab;void Awake(){_instance = this;}public GameObject AddIcon(string iconname){GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);//设置图标的名字,更新图标的显示go.GetComponent<UISprite>().spriteName=iconname;//把创建出来的图标返回出来return go;}
}

Minimap.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MinimapItem : MonoBehaviour {public string iconName;private GameObject minimapIconGo;private Transform iconTrans;private Transform player;void Start(){player = GameObject.FindGameObjectWithTag("Player").transform;minimapIconGo = Minimap._instance.AddIcon(iconName);iconTrans = minimapIconGo.transform;}private void FixedUpdate(){Vector3 offset = transform.position - player.position;iconTrans.localPosition = new Vector3(offset.x, offset.z, 0)*5;}void OnDestroy(){Destroy(this.minimapIconGo);    }}

MinimapItem.cs

预制场景

  创建一个场景Gary_map

  调整场景灯光亮度Intensity为0.3

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerMove : MonoBehaviour {public float speed = 4;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");transform.Translate(new Vector3(h,0,v)*speed*Time.deltaTime);}
}

PlayerMove.cs

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

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class EnemyMove : MonoBehaviour {public float speed =4;private float timer = 0;private float dirx = 0;private float dirz = 0;// Update is called once per framevoid Update () {timer += Time.deltaTime;if (timer > 4){dirx = Random.Range(-1f, 1f);dirz = Random.Range(-1f, 1f);timer = 0;}transform.Translate(new Vector3(dirx, 0, dirz) * speed * Time.deltaTime);}
}

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脚本获得场景中游戏物体的图标的名字,实时更新图标的显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Minimap : MonoBehaviour {//单例模式public static Minimap _instance;public GameObject iconPrefab;void Awake(){_instance = this;}public GameObject AddIcon(string iconname){GameObject go = NGUITools.AddChild(this.gameObject,iconPrefab);//设置图标的名字,更新图标的显示go.GetComponent<UISprite>().spriteName=iconname;//把创建出来的图标返回出来return go;}
}

Minimap.cs

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

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

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

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MinimapItem : MonoBehaviour {public string iconName;private GameObject minimapIconGo;private Transform iconTrans;private Transform player;void Start(){player = GameObject.FindGameObjectWithTag("Player").transform;minimapIconGo = Minimap._instance.AddIcon(iconName);iconTrans = minimapIconGo.transform;}private void FixedUpdate(){Vector3 offset = transform.position - player.position;iconTrans.localPosition = new Vector3(offset.x, offset.z, 0)*5;}void OnDestroy(){Destroy(this.minimapIconGo);    }}

MinimapItem.cs

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

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

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

转载于:https://www.cnblogs.com/1138720556Gary/p/9935801.html

Unity3D_(插件)小地图自刷新制作Minimap小地图相关推荐

  1. Python Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner

    Tensorflow + CNN + Opencv 英雄联盟小地图识别,LOL Minimap Scanner 本项目代码的展示 简介 思路 第一步:图像处理 1. 获取图像并转换 2. 过滤出图像中 ...

  2. Unity-UGUI制作的小地图-可放大缩小视角,大地图小地图切换

    Unity-UGUI制作的小地图-可放大缩小视角,大地图小地图切换 1.效果图 文章最后也会附上 Demo下载地址 备注:资源是URP的,普通平台修改资源材质即可 缩小状态 放大状态 2.实现思路 首 ...

  3. 我的Unity(11)一点一滴 制作LOL小地图

    制作一个小地图,看见人物上方的物体,不能看见下方的人物. 1 添加一个摄像机 2 添加一个Render Texture 拖进相机的Target Texture 3 添加一个Raw Image.将Ren ...

  4. unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐

    本文推荐一些用于开发GalGame或者视觉小说(Visual Novel)游戏的音频素材.Unity插件.3D模型.动作动画和2D素材. 一:音频资源 Cute Romantic Music Pack ...

  5. VSCode前端开发工具插件--LiveServer实时刷新网页

    VSCode前端开发工具插件–LiveServer实时刷新网页 1.概述 当我们使用VSCode工具开发前端HTML页面时,修改内容后都要重新刷新网页才能展示更新代码的内容.那么有没有一种方式能够实时 ...

  6. 日落20181218001 - Unity插件应用之ShaderForge制作顶点动画

    环境 系统:Windows 10 引擎:Unity 2017.2.1f1 工具:Shader Forge 1.38 目的 使用Shader Forge制作顶点动画的实例. (1)场景布局如下. (1- ...

  7. 【Unity3D插件】KGFMapSystem插件分享《快速制作小地图插件》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 在我们开发游戏或者虚拟现实中,一般都会用到小地图,如果要我们去写小 ...

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

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

  9. Unity 制作RPG小地图

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

  10. 【UE4】给制作的小地图加上方向指针

    [UE4]给游戏制作一个简易的小地图 在上一篇里面简单的介绍了怎么制作小地图,然而在实际运行的时候就会发现.如果把视角拉大,就不能通过小地图了解到人物的方向.这时候我们可以学习地图APP,给人物一个方 ...

最新文章

  1. 用C语言解“龟兔赛跑”题
  2. java json转换
  3. (JAVA)String常用的方法
  4. mysql 主从 问题_Mysql解决主从不同步问题
  5. 14个JavaScript代码优化技巧
  6. kettle 提交数据量_Kettle数据同步速度调优记录
  7. Bootstrap3 静态模态对话框
  8. python垃圾回收价格表_主流的垃圾回收机制都有哪些?
  9. 问题-[Delphi]用LoadLibrary加载DLL时返回0的错误
  10. AJAX JSON之讲解
  11. 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)
  12. 前景检测算法(三)--帧差法
  13. 机器学习算法工程师面试问题汇总(持续更新)
  14. t分布 u分布 卡方分布_方分布,F分布,t分布三者之间有什么关系
  15. Excel快捷键大全和35个函数---第二弹
  16. WinSxS目录下文件的清除
  17. Oracle RushQL勒索病毒恢复方法
  18. linux网卡的配置文件是双引号,Linux修改网卡ens33为eth0以及centos7下修改动态IP为静态IP地址...
  19. mysql 导出dmp文件_Linux环境下使用crontab实现mysql定时备份
  20. JVM总结(三)Minor GC、Major GC和Full GC

热门文章

  1. Spring框架工作原理
  2. Jquery学习 -千锋学习
  3. 数据库中的case when ,if ,if null
  4. shiro ajax请求拦截器,shiro 拦截器实现session过期拦截ajax请求的处理
  5. apicloud开发时的一些注意点
  6. Linux chapter 8
  7. IDEA 常用设置 与 常用操作(一)
  8. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_2-1微服务项目的搭建-SpringBoot搭建多模块项目一...
  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
  10. pc端字体大小自适应几种方法