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小地图制作___按比例尺图标布局的更多相关文章

  1. Unity 小地图制作插件NJG MiniMap的简单使用

    unity版本:4.5.1 NJG MiniMap版本:1.5 参考链接:http://blog.csdn.net/wuming22222/article/details/37526659,作者:CS ...

  2. CSS3 圆角制作的消息提示图标

    CSS3 圆角制作的消息提示图标,如果你想知道它是如何被开发的,请点击连接查看.http://www.gbtags.com/gb/rtreplayerpreview/142.htm

  3. 使用CSS3制作72个webapp图标

    前言 移动网络带宽的快慢直接影响webapp应用体验效果的优差,其中加载图片是很耗流量的,所以对这一方面的性能优化是很需要的.一般对于那些小而多的图片(图标)都会采用sprite合并成一张图片来减少h ...

  4. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  5. 制作Windows的ico图标

    也不知道这个方法是不是最好的,有时间再查看其它方法 首先设计出图标,png格式即可. 使用一款软件 IconWorkshop 下载了一个试用版,临时制作够用了 制作步骤如下: 1.打开png图片 2. ...

  6. Excel图标布局,图表样式,图标元素

    一.图标布局----图表元素的增删改 * 快速布局: 更改图表的整体布局,主要是图表标题,坐标轴,图例,网格线 * 操作如下: 选中数据源,Ctrl+Q 出现图表,选中图表,在上方选择设计, 共有10 ...

  7. CDR快速制作苹果手机照片小图标

    本篇教程用CorelDRAW快速制作苹果手机照片小图标,在实现的过程中主要使用了旋转复制的方法,加之一些常用工具的用法处理,最后加上透明效果下的合并模式就好了,现在跟小编一起来看看详细的操作吧! 1. ...

  8. Unity制作人物头像小图标和小地图

    人物头像的制作: 在场景中添加人物模型和环境模型 设置人物的layer为Player 在主摄像机的基础上,新建一个次摄像机并将摄像机镜头对准人物面部,调整至合适大小. 设置次摄像机 culling m ...

  9. unity 小地图的制作

    利用 Transform.InverseTransformDirection  变换位置从世界坐标到自身坐标. 以第一人称控制器为坐标原点(忽视y轴),x轴z轴转为屏幕坐标. 若物体在地图范围外,可以 ...

随机推荐

  1. 天河2号-保持使用yhrun/srun时连接不中断 (screen 命令教程 )

    问题重述: 当我们使用天河机进行并行程序实验的时候,都会使用到yhrun/srun命令.在超算环境下,yhrun 命令用来进行提交交互式作业,有屏幕输出.但是容易受到网络波动影响导致断网或者关闭窗口最 ...

  2. Redis缓存穿透、缓存雪崩、redis并发问题分析

    把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下: (一)缓存和数据库间数据一致性问题分布式环境下(单机就不用说了)非常 ...

  3. Centos7(Firewall)防火墙开启常见端口命令

    Centos7默认安装了firewalld,如果没有安装的话,则需要YUM命令安装:firewalld真的用不习惯,与之前的iptable防火墙区别太大,但毕竟是未来主流讲究慢慢磨合它的设置规则: 安 ...

  4. DevExpress09、SimpleButton、CheckButton、DropDownButton、HScrollBar控件和VScrollBar控件

    SimpleButton控件 使用SimpleButton控件, 创建一个Button按钮, 可以通过其Image属性添加图片: 该控件与WinForm自带的Button按钮类似: 效果如下: Che ...

  5. Netty入门(三)构成部分

    该节主要讲解 Netty 的构成部分. 一.Channel 它代表一个用于连接到实体如硬件设备.文件.网络套接字或程序组件,能够执行一个或多个不同的 I/O 操作的开放连接.可以比作传入和传出数据的传 ...

  6. 利用单例模式设计数据库连接Model类

    之前在<[php]利用php的构造函数与析构函数编写Mysql数据库查询类>(点击打开链接)写过的Mysql数据库查询类还不够完美,利用<[Java]单例模式>(点击打开链接) ...

  7. 拯救U盘之——轻松修复U盘“无法访问”的故障

    在使用U盘或者移动硬盘的过程中,大家是否和我一样,有个不好的操作习惯,明知不好但是在每次使用时都很少记得“安全删除硬件”,随手一把走人.终于出问题了,那天给mm复制完资料,拔了再插到自己的电脑上,打开 ...

  8. java字符串利用dom4j转 xml 且遍历

    1.因为转换的格式不是标准格式,所以有时候获得xml根目录后rootElement.attributes() 取不到想要的属性 所以需要通过迭代器来获取想要的值 public static void ...

  9. 洛谷P4053 [JSOI2007]建筑抢修

    放题解 题目传送门 放代码 #include <bits/stdc++.h>//万能头 #define MAXN 150000//最多的建筑数量(数据范围) using namespace ...

  10. Tornado框架实现异步爬虫

    from urllib.parse import urljoin from bs4 import BeautifulSoup from tornado import gen, httpclient, ...