| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class MapLodCtrl : MonoBehaviour{    public CameraBirdSec cameraBirdSec;    public List<LodLayer> MapList = new List<LodLayer>();    private int currentMapIndex;    public List<LodStayLayer> MapStayList = new List<LodStayLayer>();        private void Awake()    {        cameraBirdSec.OnDistanceChange += OnCameraDistanceChange;    }    private void Start()    {        currentMapIndex = MapList.Count - 1;        MapList[currentMapIndex].map.ShowMap();        //cameraBirdSec.detailLod = false;        cameraBirdSec.currentDistance = MapList[currentMapIndex].cameraDistanceMax;        SetCameraRange(cameraBirdSec.currentDistance);    }    private void OnDestroy()    {        cameraBirdSec.OnDistanceChange -= OnCameraDistanceChange;    }    private void OnCameraDistanceChange(float value)    {        SetCameraRange(value);        // if (currentMapIndex == 0)        // {        //     if (value > MapList[currentMapIndex].cameraDistanceMax)        //     {        //         MapList[currentMapIndex+1].map.ShowMap();        //         MapList[currentMapIndex].map.Hide();        //         currentMapIndex++;        //        //         cameraBirdSec.detailLod = false;        //         cameraBirdSec.currentDistance = MapList[currentMapIndex].cameraDistanceMax;        //         SetCameraRange(MapList[currentMapIndex].cameraDistanceMax);        //         return;        //     }        //     SetCameraRange(value);        for (int i = 0; i < MapStayList.Count; i++)        {            if (value < MapStayList[i].cameraDistanceMax)            {                MapStayList[i].map.ShowMap();            }            else            {                MapStayList[i].map.Hide();            }        }        // }        // else        // {            // if (value>0)            // {            //     MapList[currentMapIndex-1].map.ShowMap();            //     MapList[currentMapIndex].map.Hide();            //     currentMapIndex--;            //     // if (currentMapIndex == 0)            //     // {            //     //     cameraBirdSec.detailLod = true;            //     // }            // }            // else            // {            //     if (currentMapIndex >= MapList.Count - 1)            //     {            //         return;            //     }            //     MapList[currentMapIndex+1].map.ShowMap();            //     MapList[currentMapIndex].map.Hide();            //     currentMapIndex++;            // }            // cameraBirdSec.currentDistance = MapList[currentMapIndex].cameraDistanceMax;            // SetCameraRange(MapList[currentMapIndex].cameraDistanceMax);        //}    }    private void SetCameraRange(float cameraDistance)    {        var currentLayer = MapList[currentMapIndex];        float distanceRange = (cameraDistance-currentLayer.cameraDistanceMin)/(currentLayer.cameraDistanceMax-currentLayer.cameraDistanceMin);        float minX =currentLayer.min_X_Range.x+Mathf.Abs(currentLayer.min_X_Range.x-currentLayer.max_X_Range.x)*distanceRange;         float maxX =currentLayer.min_X_Range.y-Mathf.Abs(currentLayer.min_X_Range.y-currentLayer.max_X_Range.y)*distanceRange;         float minY =currentLayer.min_Y_Range.y+Mathf.Abs(currentLayer.min_Y_Range.y-currentLayer.max_Y_Range.y)*distanceRange;         float maxY =currentLayer.min_Y_Range.x-Mathf.Abs(currentLayer.min_Y_Range.x-currentLayer.max_Y_Range.x)*distanceRange;        //Debug.Log(minX);        //Debug.Log(maxX);        //Debug.Log(minY);        //Debug.Log(maxY);        cameraBirdSec.SetRange(minX,maxX,minY,maxY);    }    }[Serializable]public class LodLayer{    public MapGenerator map;    public float cameraDistanceMin;    public float cameraDistanceMax;    public Vector2 min_X_Range;//最短距离时候的X范围    public Vector2 max_X_Range;//最大距离时候的X范围    public Vector2 min_Y_Range;    public Vector2 max_Y_Range;}[Serializable]public class LodStayLayer{    public MapGenerator map;    public float cameraDistanceMin;    public float cameraDistanceMax;}
 |