MapLodCtrl.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class MapLodCtrl : MonoBehaviour
  6. {
  7. public CameraBirdSec cameraBirdSec;
  8. public List<LodLayer> MapList = new List<LodLayer>();
  9. public int currentMapIndex = 0;
  10. private void Awake()
  11. {
  12. cameraBirdSec.OnDistanceChange += OnCameraDistanceChange;
  13. }
  14. private void Start()
  15. {
  16. MapList[currentMapIndex].map.ShowMap();
  17. //cameraBirdSec.currentDistance = MapList[currentMapIndex].cameraDistanceMax;
  18. //OnCameraDistanceChange(cameraBirdSec.currentDistance);
  19. }
  20. private void OnDestroy()
  21. {
  22. cameraBirdSec.OnDistanceChange -= OnCameraDistanceChange;
  23. }
  24. private void OnCameraDistanceChange(float value)
  25. {
  26. if (currentMapIndex>0&&value < MapList[currentMapIndex].cameraDistanceMin)
  27. {
  28. MapList[currentMapIndex-1].map.ShowMap();
  29. MapList[currentMapIndex].map.Hide();
  30. currentMapIndex--;
  31. }
  32. if (currentMapIndex < MapList.Count - 1 && value > MapList[currentMapIndex].cameraDistanceMax)
  33. {
  34. MapList[currentMapIndex+1].map.ShowMap();
  35. MapList[currentMapIndex].map.Hide();
  36. currentMapIndex++;
  37. }
  38. var currentLayer = MapList[currentMapIndex];
  39. float distanceRange = (value-currentLayer.cameraDistanceMin)/(currentLayer.cameraDistanceMax-currentLayer.cameraDistanceMin);//27-3
  40. float minX =currentLayer.min_X_Range.x+Mathf.Abs(currentLayer.min_X_Range.x-currentLayer.max_X_Range.x)*distanceRange;
  41. float maxX =currentLayer.min_X_Range.y-Mathf.Abs(currentLayer.min_X_Range.y-currentLayer.max_X_Range.y)*distanceRange;
  42. float minY =currentLayer.min_Y_Range.y+Mathf.Abs(currentLayer.min_Y_Range.y-currentLayer.max_Y_Range.y)*distanceRange;
  43. float maxY =currentLayer.min_Y_Range.x-Mathf.Abs(currentLayer.min_Y_Range.x-currentLayer.max_Y_Range.x)*distanceRange;
  44. // Debug.Log($"dis:{value} disRange:{distanceRange} minX:{minX} maxX:{maxX} minY:{minY} maxY:{maxY}");
  45. cameraBirdSec.SetRange(minX,maxX,minY,maxY);
  46. }
  47. }
  48. [Serializable]
  49. public class LodLayer
  50. {
  51. public MapGenerator map;
  52. public float cameraDistanceMin;
  53. public float cameraDistanceMax;
  54. public Vector2 min_X_Range;//最短距离时候的X范围
  55. public Vector2 max_X_Range;//最大距离时候的X范围
  56. public Vector2 min_Y_Range;
  57. public Vector2 max_Y_Range;
  58. }