Unity 框架

PrefabLMData.cs 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace TFramework
  5. {
  6. [DisallowMultipleComponent]
  7. [ExecuteInEditMode]
  8. public class PrefabLMData : MonoBehaviour
  9. {
  10. [System.Serializable]
  11. internal struct RendererInfo
  12. {
  13. public Renderer renderer;
  14. public int lightmapIndex;
  15. public Vector4 lightmapOffsetScale;
  16. }
  17. [SerializeField]
  18. internal RendererInfo[] m_RendererInfo;
  19. [SerializeField]
  20. internal Texture2D[] m_LightmapsColor;
  21. [SerializeField]
  22. internal Texture2D[] _lightmapsDir;
  23. void Awake()
  24. {
  25. if (m_RendererInfo == null || m_RendererInfo.Length == 0)
  26. return;
  27. var lightmaps = LightmapSettings.lightmaps;
  28. var combinedLightmaps = new LightmapData[lightmaps.Length + m_LightmapsColor.Length];
  29. lightmaps.CopyTo(combinedLightmaps, 0);
  30. for (int i = 0; i < m_LightmapsColor.Length; i++)
  31. {
  32. combinedLightmaps[i + lightmaps.Length] = new LightmapData();
  33. combinedLightmaps[i + lightmaps.Length].lightmapColor = m_LightmapsColor[i];
  34. combinedLightmaps[i + lightmaps.Length].lightmapDir = _lightmapsDir[i];
  35. }
  36. ApplyRendererInfo(m_RendererInfo, lightmaps.Length);
  37. LightmapSettings.lightmaps = combinedLightmaps;
  38. }
  39. static void ApplyRendererInfo(RendererInfo[] infos, int lightmapOffsetIndex)
  40. {
  41. for (int i = 0; i < infos.Length; i++)
  42. {
  43. var info = infos[i];
  44. if (info.renderer != null)
  45. {
  46. info.renderer.lightmapIndex = info.lightmapIndex + lightmapOffsetIndex;
  47. info.renderer.lightmapScaleOffset = info.lightmapOffsetScale;
  48. }
  49. }
  50. }
  51. }
  52. }