前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity 通过等比例换算实现游戏中小地图

Unity 通过等比例换算实现游戏中小地图

作者头像
CoderZ
发布2022-08-29 15:47:55
3530
发布2022-08-29 15:47:55
举报

小地图可以通过两种方式实现:

一、通过相机渲染方式实现:

在Project窗口中右键创建Render Texture资产,使用一个相机以俯视视角渲染地面,将Target Texture属性设为创建的Render Texture,同时新建RawImage将其Texture属性也设为同一张Render Texture。

二、通过等比例换算实现:

原理如下:

水平比例 = 地形长度 / 小地图Image的长度

垂直比例 = 地形宽度 / 小地图Image的宽度

以地形左下角作为基准点

x = 人物位置与基准点的水平距离

y = 人物位置与基准点的垂直距离

人物在小地图中的位置(anchoredPosition) = new Vector2(x / 水平比例, y / 垂直比例)

代码语言:javascript
复制
using UnityEngine;

public class MiniMap : MonoBehaviour
{
    //基准点位置
    [SerializeField] private Transform basePoint;
    //人物位置
    [SerializeField] private Transform target;
    //地形宽度
    [SerializeField] private float terrainWidth;
    //地形长度
    [SerializeField] private float terrainLength;
    //小地图宽度
    [SerializeField] private float miniMapWidth;
    //小地图长度
    [SerializeField] private float miniMapLength;

    //水平比例
    private float horizontalRate;
    //垂直比例
    private float verticalRate;

    private RectTransform rt;

    private void Start()
    {
        rt = GetComponent<RectTransform>();
        horizontalRate = terrainLength / miniMapLength;
        verticalRate = terrainWidth / miniMapWidth;
    }

    private void Update()
    {
        float x = Mathf.Abs((target.position - basePoint.position).x);
        float y = Mathf.Abs((target.position - basePoint.position).z);
        rt.anchoredPosition = new Vector2(x / horizontalRate, y / verticalRate) - rt.rect.size * .5f;
    }
}

人物图标Image的Anchors、Pivot均设为0,此时图标以左下角为基准点,所以为了对应中心位置,需要减去图标大小一半的偏移量。

代码语言:javascript
复制
rt.anchoredPosition = new Vector2(x / horizontalRate, y / verticalRate) - rt.rect.size * .5f;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 当代野生程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档