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

2.这里小地图显示的范围为整个空间区域,而不是单独的相机渲染区域

3.

4.

5.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //图标与对应的物体的映射关系
public class MinimapCell
{
public Transform icon; //在小地图上显示的图标
public Transform referObj; //图标对应的物体
public Transform relativeObj;//地图上标杆物体
public float scaleRealToUI;
RectTransform rectTrans; public MinimapCell(Transform _icon,Transform _referObj,Transform _relativeObj,float _scaleRealToUI)
{
icon = _icon;//小地图中的图标
referObj = _referObj;//小地图表示的在场景中的物体
relativeObj = _relativeObj;//参考物体,设此物体为坐标计算的中心,从而计算出场景中物体的相对位置
scaleRealToUI = _scaleRealToUI;//比例尺
} //同步位置
public void Synchro()
{
if (icon && referObj&&relativeObj)
{
rectTrans = icon.GetComponent<RectTransform>();
rectTrans.anchoredPosition3D = -(referObj.position - relativeObj.position)*scaleRealToUI;//根据比例尺设置图标和地图中角色的映射位置
}else if (referObj == null || referObj.gameObject.activeInHierarchy == false)
{//如果角色为空(即死亡),那么隐藏该图标,可用于下一个角色,这里起到了对象池的作用
icon.gameObject.SetActive(false);
}
}
} //原理:根据世界的宽高比例设置地图UI的宽高大小(其中宽度固定,根据比例得出高度)以及计算出比例尺 //建立列表cells,用于存储当前图标和对应的物体的信息 //如果场景中有需要显示在小地图上的物体,将标杆物体和比例尺赋予图标单元;
//首先查看列表中是否有可用的cell(即该cell为激活状态,表示正对应世界中某个物体),如果有,则激活图标,设置对应物体,如果没有,则生成一个新的cell //在update中实时调用每个cell的同步函数,实时同步位置 //如果某个物体需要在小地图中表示,那么该物体必须带有组件MiniMapFit组件,改组件用于访问地图,设置同步图标
public class MiniMap : MonoBehaviour
{
public static MiniMap instance;
public Transform relativeObj;//场景中的标杆物体,标杆物体放在世界区域的右上角,并且相对的,小地图的中心点在小地图的右上角,从而对应映射关系
public GameObject cellPrefab;//图标物体的预制物体
public List<MinimapCell> cells;//图标单元列表
public Rect worldSize;//世界区域的真实大小(定为在场景区域中玩家可以移动的区域大小)
RectTransform rectTrans;
float scaleRealToUI;//比例尺 // Start is called before the first frame update
void Awake()
{
rectTrans = GetComponent<RectTransform>();
Debug.Log(rectTrans.position+" "+rectTrans.anchoredPosition3D+" "+rectTrans.rect);
scaleRealToUI = rectTrans.rect.x / worldSize.x;//计算出比例尺
rectTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, -worldSize.y* scaleRealToUI);//设置地图UI的高度
cells = new List<MinimapCell>(); instance = this;
} // Update is called once per frame
void Update()
{
//实时同步结点
foreach (MinimapCell miniCell in cells)
{
miniCell.Synchro();
}
} //当增加图标示意对应的角色
public void AddCell(Transform _referObj)
{
bool flag = false;//标记是否查找成功
foreach(MinimapCell miniCell in cells)//查看链表中是否有可用的单元
{
if (miniCell.icon.gameObject.activeInHierarchy == false)
{
miniCell.referObj = _referObj;
miniCell.icon.gameObject.SetActive(true);
flag = true;
break;
}
} if (!flag)//如果链表中没有空余的结点,那么新增一个结点,用于显示角色位置信息
{
Transform trans = Instantiate(cellPrefab, transform).transform;
MinimapCell cell = new MinimapCell(trans,_referObj,relativeObj,scaleRealToUI);
cells.Add(cell);
}
} private void OnDrawGizmos()
{
Gizmos.color = Color.green;
if(relativeObj)Gizmos.DrawWireCube(relativeObj.position- new Vector3(worldSize.x / , worldSize.y / ), new Vector3(worldSize.x, worldSize.y));
}
}
6.
using System.Collections;
using System.Collections.Generic;
using UnityEngine; //此类绑定在角色身上,在场景中生成角色时,可以在小地图中生成对应的图标
public class MiniMapFit : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
if (MiniMap.instance)//访问小地图,生成图标
{
MiniMap.instance.AddCell(transform);
}
}
}
unity小地图制作___按比例尺图标布局的更多相关文章
- Unity 小地图制作插件NJG MiniMap的简单使用
unity版本:4.5.1 NJG MiniMap版本:1.5 参考链接:http://blog.csdn.net/wuming22222/article/details/37526659,作者:CS ...
- CSS3 圆角制作的消息提示图标
CSS3 圆角制作的消息提示图标,如果你想知道它是如何被开发的,请点击连接查看.http://www.gbtags.com/gb/rtreplayerpreview/142.htm
- 使用CSS3制作72个webapp图标
前言 移动网络带宽的快慢直接影响webapp应用体验效果的优差,其中加载图片是很耗流量的,所以对这一方面的性能优化是很需要的.一般对于那些小而多的图片(图标)都会采用sprite合并成一张图片来减少h ...
- Unity中制作游戏的快照游戏支持玩家拍快照
Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...
- 制作Windows的ico图标
也不知道这个方法是不是最好的,有时间再查看其它方法 首先设计出图标,png格式即可. 使用一款软件 IconWorkshop 下载了一个试用版,临时制作够用了 制作步骤如下: 1.打开png图片 2. ...
- Excel图标布局,图表样式,图标元素
一.图标布局----图表元素的增删改 * 快速布局: 更改图表的整体布局,主要是图表标题,坐标轴,图例,网格线 * 操作如下: 选中数据源,Ctrl+Q 出现图表,选中图表,在上方选择设计, 共有10 ...
- CDR快速制作苹果手机照片小图标
本篇教程用CorelDRAW快速制作苹果手机照片小图标,在实现的过程中主要使用了旋转复制的方法,加之一些常用工具的用法处理,最后加上透明效果下的合并模式就好了,现在跟小编一起来看看详细的操作吧! 1. ...
- Unity制作人物头像小图标和小地图
人物头像的制作: 在场景中添加人物模型和环境模型 设置人物的layer为Player 在主摄像机的基础上,新建一个次摄像机并将摄像机镜头对准人物面部,调整至合适大小. 设置次摄像机 culling m ...
- unity 小地图的制作
利用 Transform.InverseTransformDirection 变换位置从世界坐标到自身坐标. 以第一人称控制器为坐标原点(忽视y轴),x轴z轴转为屏幕坐标. 若物体在地图范围外,可以 ...
随机推荐
- Collection中的List,Set的toString()方法
代码: Collection c = new ArrayList(); c.add("hello"); c.add("world"); ...
- unity StrangeIoc
已经很久没有写博客,主要原因还是自我荒废了太久,在学习上失去了动力.最近来新的公司实习,以前都是做项目的开发,现在被调到框架组,主要从事的是框架维护还有开发.学习了许多新的知识还有优秀的框架,今天就写 ...
- python第三十六课——1.可迭代对象
1.可迭代对象: 满足前提: 只要能被循环操作的对象,就可以可迭代对象 举例: str.list.tuple.set.dict.range.generator... 高效的检测一个对象是否是可迭代对象 ...
- AtCoder Regular Contest
一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...
- pyspider爬取数据存入mysql--2.测试数据库能否连通
做一个简单的测试,看数据能否存入mysql 1 #!/usr/bin/env python 2 # -*- encoding: utf-8 -*- 3 # Created on 2017-10-26 ...
- 解决php编译报错configure: error: mcrypt.h not found. Please reinstall libmcrypt.
yum install -y epel-releaseyum install -y libmcrypt-devel
- 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ...
- Oracle 表删除操作
删除表内容(dml):delete from 删除表结构(ddl):drop table xx 清空表(ddl):truncate table 清空整张表,不能回滚,不会产生大量日志文件: 表空间会得 ...
- 大数据入门第十四天——Hbase详解(二)基本概念与命令、javaAPI
一.hbase数据模型 完整的官方文档的翻译,参考:https://www.cnblogs.com/simple-focus/p/6198329.html 1.rowkey 与nosql数据库们一样, ...
- 20155216 Exp8 WEB基础实践
Exp8 WEB基础实践 实践内容 Apache环境配置 apache是kali下的web服务器,通过访问 ip地址+端口号+文件名称 打开对应的网页. 输入命令 vi /etc/apache2/po ...