在场景的顶视图,进行截图,保存图片进行处理,所得到的小图片作为小地图,在场景的对角线的两侧分别放置一个标志物体,用于计算场景的长,宽信息。人物在场景中行走时,计算人物与标志物体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);
}
}