description | A LightDescription that describes the imported camera properties and animations. |
light | The light generated by the Model Importer. |
animations | Model Importer 生成的动画剪辑。 |
Add this function to a subclass to recieve a notification when a light is imported from a Model Importer.
Unity only calls this function when ModelImporter.ImportLights is true. This function gives you control over light properties and animations during the model import process. The LightDescription structure contains all the light data from the imported file. You can use it to populate the light, its GameObject, and animation clips.
using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEditor.AssetImporters;
public class SetupLightFromCameraDescription : AssetPostprocessor { void OnPreprocessLightDescription(LightDescription description, Light light, AnimationClip[] clips) { var modelImporter = assetImporter as ModelImporter; var globalScale = modelImporter.globalScale;
description.TryGetProperty("LightType", out int lightType);
switch (lightType) { case 0: light.type = LightType.Point; break; case 1: light.type = LightType.Directional; break; case 2: light.type = LightType.Spot; break; case 3: light.type = LightType.Rectangle; break; }
description.TryGetProperty("Intensity", out float intensity); description.TryGetProperty("Color", out Vector4 color); description.TryGetProperty("CastShadows", out int castShadows); description.TryGetProperty("FarAttenuationEnd", out float farAttenuationEnd); description.TryGetProperty("OuterAngle", out float outerAngle);
light.intensity = intensity * 0.01f; light.color = color; light.shadows = castShadows == 1 ? LightShadows.Hard : LightShadows.None;
if (farAttenuationEnd > 0) light.range = farAttenuationEnd * globalScale;
if (outerAngle > 0) light.spotAngle = outerAngle; } }