Unity3D_(插件)小地图自刷新制作Minimap小地图
制作小地图:小地图自刷新制作小地图
原理:用不同的图标表示场景中不同的游戏物体,将(场景中)游戏物体位置实时放置小地图上,并控制图标的位置更新
好处:可更好控制小地图上所需要显示的游戏物体
游戏项目已托管到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, )*;
} 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 = ; // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical"); transform.Translate(new Vector3(h,,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 =; private float timer = ;
private float dirx = ;
private float dirz = ;
// Update is called once per frame
void Update () {
timer += Time.deltaTime;
if (timer > )
{
dirx = Random.Range(-1f, 1f);
dirz = Random.Range(-1f, 1f);
timer = ;
}
transform.Translate(new Vector3(dirx, , 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, )*;
} 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, )*;
}
Unity3D_(插件)小地图自刷新制作Minimap小地图的更多相关文章
- Unity3D_(插件)使用Camera渲染制作Minimap小地图
制作小地图:使用Camera渲染出来Render Texture 原理:使用摄像机从上到下获得场景游戏物体,摄像机Culling Mask渲染层级可设置是否需要在小地图上展示游戏物体,将摄像机获得的场 ...
- 使用gulp插件来自动刷新页面。
http://itakeo.com/blog/2016/05/19/gulpreload/?none=123 使用gulp插件来自动刷新页面.再也不用修改一次,按一下F5了. 首选通过npm inst ...
- jQuery插件-jgcharts实现Javascript制作Google Charts
from:http://www.zz68.net/program/Ajax/2010/0415/1992.html jgcharts是一个基于jQuery的非常经典的Google Charts图表制作 ...
- 【转】超简单利用UGUI制作圆形小地图
http://sanwen.net/a/ithhtbo.html 由于UI都是Achor自己用PS做的,比较粗糙,大家见谅,不过丝毫不影响功能的实现,下面我们看看今天的笔记: 首先我们看看需要哪些组件 ...
- Unity 制作RPG小地图
效果图: 最近公司要制作小地图,搜索网上的文章没找到有什么小实例,=.=直接上步骤: 制作小地图步骤: 1. 人物头顶有一个面板呈现人物图标 2. 有一个摄像机在主角头顶!(Target Textur ...
- Unity3D 制作右上角小地图
一个简单的方法, 首先先在俯视图视角截取一张图片,用作小地图的背景图片.然后新建一个Plane,把截图附到Plane上,然后把Plane与刚才截图的场景的相应位置重合,要尽量重合,当做地图.(见 ...
- Jquery插件的使用及制作插件
常用插件 插件:jquery不可能包含所有的功能,我们可以通过插件扩展jquery的功能. jQuery有着丰富的插件,使用这些插件能给jQuery提供一些额外的功能. jquery.color.js ...
- masonry插件和infinitescroll插件实现无刷新无分页完美瀑布流
地址有:http://www.17sucai.com/pins/2657.html 如果你善于发现美,如果你善于观察新鲜的事物,如果你是一名有爱的前端攻城师或设计尸,那么你一定不会对下面图片中的结构感 ...
- 解决Vuex持久化插件-在F5刷新页面后数据不见的问题
页面刷新后,想保存页面未保存的数据.我们总是习惯于放在浏览器的sessionStorage和localStorage中.但是用了vue后,vuex便可以被应用了. vuex优势:相比sessionSt ...
随机推荐
- # 组合数学-组合数+lacus定理
目录 数论-组合数+lacus定理 组合数计算 lacus定理-大组合数取模 数论-组合数+lacus定理 组合数计算 为避免爆long long,\(20!\)就达到了long long 的范围,采 ...
- FFmpeg4.0笔记:采集系统声音
Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff // 采集系统声音 void test_systemsound() ...
- python网络爬虫(7)爬取静态数据详解
目的 爬取http://seputu.com/数据并存储csv文件 导入库 lxml用于解析解析网页HTML等源码,提取数据.一些参考:https://www.cnblogs.com/zhangxin ...
- 自定义字段的设计与实现(Java实用版)
前言 自定义字段又叫做"开放模型",用户可以根据自已的需求,添加需要的字段,实现个性化定制. 使用自定义字段的目的,使用自定义字段解决哪些问题 如现有一套CRM系统,客户模块中客户 ...
- Cypher查询在Neo4j中加载具有点数据类型属性的CSV文件
我有一个CSV文件,标有3列,ID,纬度,经度.我想将CSV文件加载到Neo4j中并创建具有上述属性的节点.Location:属性应该是具有纬度和经度子属性的点数据类型. CSV是: ID,latit ...
- 前端Ajax通过设置 timeout 参数,轮询后台API
因为我连接的数据库在台湾,相距较远,所以conn.Open()方法打开极慢.前端Ajax访问API时,API的数据还未返回,前端Ajax访问已经超时. 所以设置一个轮询,设置相隔多少秒之后进行一次查询 ...
- weex animation模块 使用指南
本节学习目标 掌握内置组件animation的使用 我们在开发应用的时候,常常需要增加一些动画效果,来提高用户体验,经常用到的一些动画效果如下 平移 旋转 缩放 背景颜色改变 组件透明图 weex 提 ...
- SQL-Serverの自動採番(IDENTITY値)の取得・リセット
システムに必要なテーブルで.自動的に番号を振っていくものが必要なときがあります. たとえば.各種の伝票データの伝票番号の様なものです. プログラム処理上.データを登録した直後に.自動採番された値を取得 ...
- JAVA核心技术--继承(1)
1.继承:向上追溯,对同一批类的抽象,延续和扩展父类的一切信息! 1)关键字:extends 例如,父类是Animal,子类是Dog; eg: public class Dog exte ...
- Java高并发程序设计学习笔记(一):并行简介以及重要概念
转自:https://blog.csdn.net/dataiyangu/article/details/86211544#_28 文章目录为什么需要并行?反对意见大势所趋几个重要的概念同步(synch ...