Unity3D 小地图 (1) 等比例映射

Unity3D 小地图 (1) 等比例映射_第1张图片

在一些地图比较小的游戏还有MOBA游戏中,小地图是通过等比例映射的方式实现的,有些人在进行开发游戏的时候,是通过另一个摄像机渲染图片,实时同步在小地图上的,但这种做法十分消耗性能且功能拓展性很差, 是不推荐使用的。

根据需求进行分析:

1.获取角色在地形上的相对位置坐标。

    角色相对地形位置=角色世界坐标-地形世界坐标

2.获取角色在地形上的比例位置,以Vector2(x,z)的形式存储。

    角色在地形上的比例 = 相对地形位置/地形长宽

3.比例同步到小地图上,设置地图的RectTransform

    小地图位置 = 小地图长宽*比例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MipMapSyn : MonoBehaviour {
    //小地图场景图
    Transform mipMapImage;
    //小地图中的人物位置
    Transform playerImage;
    //场景中人物的位置
    Transform playerTrans;
    //地形
    Terrain terrain;
    //小地图的尺寸
    Vector2 mipMapSize;
    //等比例映射后角色在小地图的位置
    Vector2 position;
    //人物相对于地形的坐标
    Vector3 localPos;

    float rateX, rateY, posX, posY;

    void Start()
    {
        mipMapImage = GameObject.Find("BackGround").transform;
        playerImage = GameObject.Find("PlayerImage").transform;
        playerTrans = GameObject.Find("Cube").transform;
        terrain = GameObject.Find("Terrain").GetComponent();
        mipMapSize = mipMapImage.GetComponent().sizeDelta;
    }

    void Update()
    {
        PlayerRate();
        MipMapWave();
    }
    //角色在地形上的比例
    public void PlayerRate()
    {
        localPos = playerTrans.position - terrain.transform.position;
        rateX = localPos.x / terrain.terrainData.size.x;
        rateY = localPos.z / terrain.terrainData.size.z;
    }

    public void MipMapWave()
    {
        posX = mipMapSize.x * rateX;
        posY = mipMapSize.y * rateY;
        position.x = posX;
        position.y = posY;
        playerImage.localPosition = position;
    }

}


你可能感兴趣的:(Unity3D 小地图 (1) 等比例映射)