unity3D MiniMap等比例映射的实现(一) 通过Image做小地图背景,Player实时更新位置在小地图上
2018-02-03 16:54
751 查看
本次给大家分享的是unity等比例映射小地图实现的第一种方式-----通过Image进行等比例映射:最终达到的效果就是玩家映射到小地图上的图片这里用PlayerIcon代替,Player的移动带动PlayerIcon的移动而背景不动.
一 UI准备部分:(需要注意的是场景Player居于地形正中心 画布下PlayerIcon的锚点要居中
通过控制玩家的移动计算映射到Image上的位置. 其中Image的Sprite是小地图的背景(我们预先要将场景的地图调成Z--X Top模式适比截取场景的图片作为小地图的背景图)如图所示:
将截取好的背景minimapImage.sprite赋给Canvas下面的Image 再给miniImage的子物体添加PlayerIcon
调成Game模式呈现出来的效果图为
二 核心算法部分:
1.取人物在大地图里面的一个等比例(0.5,0.5)
WithRate = Pserson.pos.x / terrain.width;
HeigthRate = Pserson.pos.y / terrain.heigth;
2.通过大地图的比例,计算出在小地图的位置这样就达到了小地图位置的同步,怎么样是不是很简单
litMapPos.x = litMap.width * WithRate
litMapPos.y = litMap.heigth * HeigthRate
3.那么怎么控制人物的旋转也能显示再小地图上呢?很简单让Playericon的旋转角度=Player的旋转角度,这样就同步更新过来啦~还要注意一点如果你的旋转的方向别忘了取反哦~
tmpAngle = palyerIcon.localEulerAngles;
tmpAngle.z = 90 - player.localEulerAngles.y;
palyerIcon.localEulerAngles = tmpAngle;
以上就是核心算法的实现
由于位置在Update里,实时都要同步更新 但实战项目的地图都是非常大的,在场景中移动几步地图上是没有什么变化的 为了降低CPU的计算工作,我们这里用计时每隔5秒一更新就好啦 这里我做的Demo代码附在下面,挂到PlayerIcon上即可 场景中移动Player可以在小地图中看到PlayerIcon的同步
下一篇我将会为大家介绍RawImage实现地图的移动来实时更新玩家位置
一 UI准备部分:(需要注意的是场景Player居于地形正中心 画布下PlayerIcon的锚点要居中
通过控制玩家的移动计算映射到Image上的位置. 其中Image的Sprite是小地图的背景(我们预先要将场景的地图调成Z--X Top模式适比截取场景的图片作为小地图的背景图)如图所示:
将截取好的背景minimapImage.sprite赋给Canvas下面的Image 再给miniImage的子物体添加PlayerIcon
调成Game模式呈现出来的效果图为
二 核心算法部分:
1.取人物在大地图里面的一个等比例(0.5,0.5)
WithRate = Pserson.pos.x / terrain.width;
HeigthRate = Pserson.pos.y / terrain.heigth;
2.通过大地图的比例,计算出在小地图的位置这样就达到了小地图位置的同步,怎么样是不是很简单
litMapPos.x = litMap.width * WithRate
litMapPos.y = litMap.heigth * HeigthRate
3.那么怎么控制人物的旋转也能显示再小地图上呢?很简单让Playericon的旋转角度=Player的旋转角度,这样就同步更新过来啦~还要注意一点如果你的旋转的方向别忘了取反哦~
tmpAngle = palyerIcon.localEulerAngles;
tmpAngle.z = 90 - player.localEulerAngles.y;
palyerIcon.localEulerAngles = tmpAngle;
以上就是核心算法的实现
由于位置在Update里,实时都要同步更新 但实战项目的地图都是非常大的,在场景中移动几步地图上是没有什么变化的 为了降低CPU的计算工作,我们这里用计时每隔5秒一更新就好啦 这里我做的Demo代码附在下面,挂到PlayerIcon上即可 场景中移动Player可以在小地图中看到PlayerIcon的同步
下一篇我将会为大家介绍RawImage实现地图的移动来实时更新玩家位置
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LittleMap : MonoBehaviour { public Transform player; public Terrain myTerrain; RectTransform litMap; RectTransform palyerIcon; float widthRate; float heightRate; Vector3 tmpAngle; Vector2 tmpPos = Vector2.zero; float timeCount = 0; void Start () { litMap = transform.parent.GetComponent<RectTransform>(); palyerIcon = transform.GetComponent<RectTransform>(); } void Update () { timeCount += Time.deltaTime; if (timeCount > 0.5f) { timeCount = 0; UpdatePos(); } } void UpdatePos() { widthRate = player.transform.position.x / myTerrain.terrainData.size.x; heightRate = player.transform.position.z / myTerrain.terrainData.size.z; tmpPos.x = litMap.sizeDelta.x * widthRate; tmpPos.y = litMap.sizeDelta.y * heightRate; tmpAngle = palyerIcon.localEulerAngles; tmpAngle.z = 90 - player.localEulerAngles.y; palyerIcon.localEulerAngles = tmpAngle; } }
相关文章推荐
- unity3D MiniMap等比例映射的实现(二) 通过RawImage UV信息控制小地图的移动
- unity3D MiniMap等比例映射的实现(三) 通过ScrollView的Scrollbar控制小地图的移动
- 通过GPUImage实现40+种滤镜与实时美颜功能
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- 基于DragonBoard 410c的家庭智能环保卫士——(11)室内栅格地图位置更新Python实现
- Unity3D 小地图 (1) 等比例映射
- Android笔记之高德地图定位(通过开启服务发送广播用handle消息机制更新位置信息)
- 用VC++实现矢量地图背景下的实时显示
- 【Unity学习笔记】——实现点击小地图上某位置,让player走到那里
- Android高德地图设置中心点图标,通过逆地理编码实时获取中心点的经纬度和详细位置
- sphinx通过增量索引实现近实时更新
- 任意文字,任意图片,彩色lcd显示,画面实时更新,全部通过非gui方式实现了。
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- WebSocket地图实时更新位置
- unity3D学习【功能实现】之十一:通过Json读取地图01
- Unity3D —— 实时PVP小地图实现
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- Android中通过Handler实现进度条的实时更新
- Unity3D 小地图 (2) 以角色为中心点等比例映射地图
- iOS 地图显示比例设置 (这里是当前的位置信息代理方法中实现)