Unity小地图制作

在场景的顶视图,进行截图,保存图片进行处理,所得到的小图片作为小地图,在场景的对角线的两侧分别放置一个标志物体,用于计算场景的长,宽信息。人物在场景中行走时,计算人物与标志物体A之间的距离与场景对应的距离之比rate,在根据此比例rate计算小地图上的标志物体在小地图上的位置。

using UnityEngine;

using System.Collections;


public class MapControl : MonoBehaviour {
    /// <summary>
    /// 标志物体
    /// </summary>
    public GameObject signal01;
    public GameObject signal02;


    public GameObject player;
    /// <summary>
    /// 地图上的图标
    /// </summary>
    public GameObject mark;


    public GameObject mapObject;

    /// <summary>
    /// 场景的实际宽,高
    /// </summary>
    private float m_actualWide;
    private float m_actualHight;


    void Start()
    {
        m_actualWide = Mathf.Abs(signal01.transform.localPosition.z - signal02.transform.localPosition.z);
        m_actualHight = Mathf.Abs(signal01.transform.localPosition.x - signal02.transform.localPosition.x);
    }


void Update () {
        mark.transform.localPosition = GetMarkPos();
}


    private Vector2 GetMarkPos()
    {
        float playerWide = Mathf.Abs(player.transform.localPosition.z - signal01.transform.localPosition.z);
        float playerPosRate_X = playerWide / m_actualWide;
        float mark_X = playerPosRate_X * mapObject.transform.localScale.y;


        float playerHight = Mathf.Abs(player .transform .localPosition.x-signal01 .transform .localPosition .x);
        float playerPosRate_Y = playerHight / m_actualHight;
        float mark_Y = -playerPosRate_Y * mapObject.transform.localScale.x;


        return new Vector2(mark_X,mark_Y);
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值