是否可以创建一个模型导入器,以便可以调整模型预制件的 MeshRenderer 上的属性?
Is it possible to create a model importer so that properties on the MeshRenderer of the model prefab can be tweaked?
我想为我的模型创建一些默认导入设置,以便在将模型导入编辑器时,我可以修改 Receive Shadows
、Motion Vectors
、Reflection Probes
的值,以及预制级别上该模型的 MeshRenderer
个子项的其他字段。
这可能吗?
我更喜欢这样一种解决方案,即修改模型文件的默认导入设置,并且我不需要创建模型资产文件的重复预制件。
编辑:
按照已接受答案的方向,这是我为实现我想要的结果而想出的代码。
using UnityEngine;
public class DefaultImportSettings : AssetPostprocessor
{
void OnPostprocessModel(GameObject go) //Is called when we import a fbx or when we press apply on its settings
{
Renderer[] renderers = go.GetComponentsInChildren<Renderer>();
for (int i = 0, iMax = renderers.Length; i < iMax; i++)
{
Renderer renderer = renderers[i];
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
renderer.receiveShadows = false;
renderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
renderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
// Other renderer modifications
}
}
}
我认为这是可能的,但很难为您需要导入的每个模型进行修改。我找到了一些文件:
https://docs.unity3d.com/ScriptReference/PrefabUtility.InstantiatePrefab.html
https://docs.unity3d.com/ScriptReference/AssetPostprocessor.OnPreprocessModel.html
AssetPostprocessor.OnPreprocessModel() 方法获取模型设置,您使用 PrefabUtility.InstantiatePrefab() 创建带有自己设置的预制件。
我想为我的模型创建一些默认导入设置,以便在将模型导入编辑器时,我可以修改 Receive Shadows
、Motion Vectors
、Reflection Probes
的值,以及预制级别上该模型的 MeshRenderer
个子项的其他字段。
这可能吗?
我更喜欢这样一种解决方案,即修改模型文件的默认导入设置,并且我不需要创建模型资产文件的重复预制件。
编辑:
按照已接受答案的方向,这是我为实现我想要的结果而想出的代码。
using UnityEngine;
public class DefaultImportSettings : AssetPostprocessor
{
void OnPostprocessModel(GameObject go) //Is called when we import a fbx or when we press apply on its settings
{
Renderer[] renderers = go.GetComponentsInChildren<Renderer>();
for (int i = 0, iMax = renderers.Length; i < iMax; i++)
{
Renderer renderer = renderers[i];
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
renderer.receiveShadows = false;
renderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
renderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;
renderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off;
// Other renderer modifications
}
}
}
我认为这是可能的,但很难为您需要导入的每个模型进行修改。我找到了一些文件: https://docs.unity3d.com/ScriptReference/PrefabUtility.InstantiatePrefab.html
https://docs.unity3d.com/ScriptReference/AssetPostprocessor.OnPreprocessModel.html
AssetPostprocessor.OnPreprocessModel() 方法获取模型设置,您使用 PrefabUtility.InstantiatePrefab() 创建带有自己设置的预制件。