之前学习的时候,也学习了小地图的制作,后来过了好长时间就忘记怎么弄。看了 siki老师小地图视频就跟着学习了。视频是14年的siki老师用的还是NGUI制作的,然后我就改成用UGUI制作的,下面就是我的 制作过程。

第一种方式:利用Shader实现

先说一下思路,我们在每个角色(Player和Enemy)头顶上放一张面片、用另一个相机根据Layer渲染,这里我们只渲染面片和地面,就完成了用面片替代角色的作用。

先看一下第一种的效果

1、场景制作

这里我用 Capsule作为Player和Enemy的替代。布阵场景如图

2、相机设置

3.MiniMapMaterial制作

4.UGUI小地图


第二中方式:实时计算相对位置

先看一下第二种的效果

第二种主要使用代码实现的

下面是具体代码

Player角色位移脚本

using UnityEngine;/// <summary>
using UnityEngine;
using UnityEngine.UI;public class MiniMap : MonoBehaviour
{//MinMap单例public static MiniMap Instance;//Icon预置体private GameObject _iconPrefab;//Sprite预置体private Sprite _spritePrefab;//Icon的父物体private Transform parent;// Use this for initializationprivate void Awake(){Instance = this;_iconPrefab = Resources.Load("Icon") as GameObject;parent = GameObject.FindGameObjectWithTag("Parent").transform;}//根据名字产生不同的IConepublic GameObject CreateIcon(string iconName){_spritePrefab = Resources.Load<Sprite>(iconName);GameObject go = Instantiate(_iconPrefab);go.GetComponent<Image>().sprite = _spritePrefab;go.transform.SetParent(parent);go.transform.position = parent.GetComponent<RectTransform>().position;return go;}
}
/// 控制角色位移/// </summary>public class PlayerMove : MonoBehaviour{ public float Speed = 4f; private float timer = 0; void Update() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); transform.Translate(new Vector3(h, 0, v) * Speed *
Time.deltaTime); }}

Enemy角色位移脚本
using UnityEngine;/// <summary>
/// 控制Enemy位移
/// </summary>
public class EnemyMove : MonoBehaviour
{public float Speed = 4f;public float Duration = 4f;private float timer = 0f;private float dir_x = 0f;private float dir_z = 0f;void Update(){timer += Time.deltaTime;if (timer >= Duration){dir_x = Random.Range(-1f, 1f);dir_z = Random.Range(-1f, 1f);timer = 0f;}transform.Translate(new Vector3(dir_x, 0, dir_z) * Speed * Time.deltaTime);}
}

MiniMap控制Icon产生脚本
using UnityEngine;
using UnityEngine.UI;public class MiniMap : MonoBehaviour
{//MinMap单例public static MiniMap Instance;//Icon预置体private GameObject _iconPrefab;//Sprite预置体private Sprite _spritePrefab;//Icon的父物体private Transform parent;// Use this for initializationprivate void Awake(){Instance = this;_iconPrefab = Resources.Load("Icon") as GameObject;parent = GameObject.FindGameObjectWithTag("Parent").transform;}//根据名字产生不同的IConepublic GameObject CreateIcon(string iconName){_spritePrefab = Resources.Load<Sprite>(iconName);GameObject go = Instantiate(_iconPrefab);go.GetComponent<Image>().sprite = _spritePrefab;go.transform.SetParent(parent);go.transform.position = parent.GetComponent<RectTransform>().position;return go;}
}
MiniMapItem控制小地图界面的脚本
using UnityEngine;
using UnityEngine.UI;
public class MiniMapItem : MonoBehaviour
{public string IconName;public float Rate = 5f;public GameObject _minMap;private Transform _player;private Transform _iconTrans;private Color color;private Color colorHide;//是否要跟换Color标志private bool isChange1 = false;private bool isChange2 = false;private void Start(){_minMap = MiniMap.Instance.CreateIcon(IconName);_player = GameObject.FindGameObjectWithTag("Player").transform;_iconTrans = _minMap.transform;color = _iconTrans.GetComponent<Image>().color;colorHide = new Color(color.r, color.b, color.b, 0);}//计算Palyer和自身的相对为,赋予到Icon的像素位置private void FixedUpdate(){if (_minMap == null){return;}Vector3 offset = transform.position - _player.position;_iconTrans.localPosition = new Vector3(offset.x, offset.z, 0) * Rate;}//限定图标在固定区域出现//运动限定区域外将图标的Color 的a=0private void Update(){if (_minMap == null){return;}//Mathf.Abs(_iconTrans.localPosition.x) > 150f || Mathf.Abs(_iconTrans.localPosition.y) > 150fVector3 vc = _iconTrans.localPosition;float max = Mathf.Max(Mathf.Abs(vc.x), Mathf.Abs(vc.y));if (Check(max, 150)){if (isChange1){_iconTrans.GetComponent<Image>().color = colorHide;isChange1 = false;}isChange2 = true;}else{if (isChange2){_iconTrans.GetComponent<Image>().color = color;isChange2 = false;}isChange1 = true;}}//Enemy消亡同时将Icon Destory掉private void OnDestroy(){GameObject.Destroy(_minMap);}private bool Check(float x, float limte){if (x > limte){return true;}else{return false;}}
}

终于写完了,哈哈。其实算不上完全的原创。主要还是看siki老师的视频制作的,自己稍微做了一点修改。

下面附带siki老师视频的地址链接:http://pan.baidu.com/s/1hswxHzA 密码:whev
我制作的下载地址链接:http://pan.baidu.com/s/1hsAAPRQ 密码:titk

												

MiniMap两种实现方式_跟着siki老师的视频制作的相关推荐

  1. ArcGIS MPK的两种打包方式_陈焜浩Arain_新浪博客

    最近发现用ArcGIS打包的MPK文件,如果数据的来源不一样:从shapefile源数据或者是从SDE源数据进行打包,能够引起打包文件的大小不一样已经在代码中引用文件的效率不一样的差异.开始发现这种差 ...

  2. android nfc 配对蓝牙 开发,NFC和蓝牙两种配对方式_配件评测-中关村在线

    在功能上方面,OVEVO SH03B蓝牙耳机除了支持蓝牙连接之外,还支持NFC(近距离无线通讯技术)功能.用户只需打开手机的NFC功能,与耳机背面的"NFC"字符区域进行对碰即可配 ...

  3. a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)

    串的两种模式匹配方式(BF/KMP算法) 前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最 ...

  4. lisp遍历表中所有顶点_三十张图片让你彻底弄明白图的两种遍历方式:DFS和BFS...

    1 引言   遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次.   在二叉树基础中,介绍了对于树的遍历.树的遍历是指从根节点出发,按照一定的访问规则 ...

  5. 三丰三坐标编程基本步骤_加工中心开机回零的两种基本方式及常见问题的应对方法...

    任何CNC数控加工设备,回零操作都是其必须执行的重要环节,对重新确定机床原点与坐标有着重要的作用.同时对机床的各项误差补偿也有着举足轻重的影响. 一.机床开机回零操作的两种基本方法 所谓开机回零,简单 ...

  6. php文本框限制字节,js限制文本框输入长度两种限制方式(长度、字节数)_基础知识...

    功能/特点: 1.实时显示可输入的字数(字节数) 2.两种限制方式(长度.字节数) 3.中文输入法下可正常使用,无BUG 4.同一页面可以使用多个,相互不干扰 limit.js function li ...

  7. java 数组合并_拼接_详解Java合并数组的两种实现方式

    详解Java合并数组的两种实现方式 发布于 2020-7-27| 复制链接 摘记: 最近在写代码时遇到了需要合并两个数组的需求,突然发现以前没用过,于是研究了一下合并数组的方式,总结如下.1.Syst ...

  8. *现在感觉librealsense和realsense-ros的安装挺简单的(普通X86平台)(现在发现都有两种安装方式,下载源码编译或者二进制安装)

    下面说的就是在普通X86平台上,不是在ARM平台,不在树莓派,TX2这些平台上. 之前潜意识里似乎还觉得会比较麻烦,实际我现在真正再看一下,回看一下,不是这样的.可能就像装双系统一样,实际并不麻烦,跟 ...

  9. Vivado IP的两种综合方式:Global 和 Out-Of-Context

    在最新的Vivado的版本中,定制IP的时候,会有一个综合方式的选择,如下图所示.可以看到一种叫做"Global",一种叫"Out-Of-Context (OOC)&qu ...

最新文章

  1. Java项目:在线商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. 使用PuTTY、Xshell远程连接Linux,密钥认证连接
  3. 系统启动数据库服务器,linux系统如何启动数据库服务器
  4. SpringMvc 注解 @InitBinder 表单多对象精准绑定接收
  5. Android系统(45)--Monkey 测试相关知识
  6. 鬼灭之刃人物炫酷高清壁纸
  7. 拟合公式_Graphpad Prism 8.0对散点图进行拟合
  8. cgic 测试demo
  9. 为什么我的Spring @Autowired字段为空?
  10. 快速排序算法_算法设计技巧之分治算法(Java实现快速排序、归并排序)
  11. androidhelper python api_python apihelper
  12. 人脸对齐--采用dlib库的68_face_landmark进行人脸对齐操作
  13. 大学物理第13章·热力学基础
  14. vue组件eleme 时间选择器问题
  15. Oracle获取拼音简码
  16. 数据库关于索引问题(违反唯一约束)
  17. 服务器机器人维修技术,维修机器人
  18. WIN10 - WLAN网络适配器红叉-重新启动后依然红叉
  19. Spring MVC工作流程图
  20. 红领巾竟然还能买?!---小学记忆

热门文章

  1. 全志V853 NPU 踩坑记录
  2. 虚幻4退出游戏蓝图节点
  3. 逾期率的水有多深,你知道吗?
  4. gre subject计算机,终于晓得gre-subject考试难不难
  5. Kaldi 实战学习(1)说话人识别小例子(egs/aishell/v1)
  6. php下载docx打不开,使用PHPWord下载DOCX文件时获取损坏的文件 - php
  7. 计算机专业一定要走编程这条路吗?其实不然,你可以这样选择!
  8. openCPU-EC600简介与软件开发实例小结
  9. GNSS-INS组合导航:KF-GINS(四)
  10. dbfs换算_dB单位含义及换算.doc