CameraFOVAdapter.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using UnityEngine;
  2. namespace AdaptUI
  3. {
  4. [ExecuteAlways]
  5. [RequireComponent(typeof(Camera))]
  6. public class CameraFOVAdapter : MonoBehaviour
  7. {
  8. [Header("默认 FOV(记录挂载时 FOV)")]
  9. public float defaultFOV = 60f;
  10. [Header("iPhone 设备 FOV")]
  11. public float iPhoneFOV = 60f;
  12. [Header("iPad 设备 FOV")]
  13. public float iPadFOV = 60f;
  14. private Camera _camera;
  15. private void Awake()
  16. {
  17. _camera = GetComponent<Camera>();
  18. #if !UNITY_EDITOR
  19. ApplyDeviceFOV();
  20. #endif
  21. }
  22. #if UNITY_EDITOR
  23. private void Reset()
  24. {
  25. _camera = GetComponent<Camera>();
  26. float fov = _camera.fieldOfView;
  27. defaultFOV = fov;
  28. iPhoneFOV = fov;
  29. iPadFOV = fov;
  30. Debug.Log("CameraFOVAdapter: 挂载时记录默认 FOV");
  31. }
  32. #endif
  33. public void ApplyDeviceFOV()
  34. {
  35. if (_camera == null) _camera = GetComponent<Camera>();
  36. var deviceType = DeviceTypeHelper.DetectDeviceType();
  37. switch (deviceType)
  38. {
  39. case DeviceTypeHelper.DeviceType.iPhone:
  40. _camera.fieldOfView = iPhoneFOV;
  41. break;
  42. case DeviceTypeHelper.DeviceType.iPad:
  43. _camera.fieldOfView = iPadFOV;
  44. break;
  45. default:
  46. _camera.fieldOfView = defaultFOV;
  47. break;
  48. }
  49. Debug.Log($"Camera FOV 应用完成: 设备 = {deviceType}, FOV = {_camera.fieldOfView}");
  50. }
  51. public void SetFOVForDevice(DeviceTypeHelper.DeviceType deviceType, float fov)
  52. {
  53. switch (deviceType)
  54. {
  55. case DeviceTypeHelper.DeviceType.iPhone:
  56. iPhoneFOV = fov;
  57. break;
  58. case DeviceTypeHelper.DeviceType.iPad:
  59. iPadFOV = fov;
  60. break;
  61. }
  62. }
  63. }
  64. }