修改的前提是设置ModelImporter 中importCameras = true;
然后增加动画属性:
未修改前FBX中的Animation
修改后FBX中的Animation:
代码:
public class ModelAnimationTool : AssetPostprocessor
{
private void OnPostprocessModel(GameObject obj)
{
AnimationClipProperty(assetImporter, assetPath);
}
private void AnimationClipProperty(AssetImporter import, string path)
{
if (Path.GetExtension(path).ToLower() == ".fbx" && path.Contains("Assets/Art/Characters/"))
{
UnityEngine.Object[] objs = AssetDatabase.LoadAllAssetsAtPath(path);
AnimationClip clip = null;
for (int i = 0; i < objs.Length; i++)
{
clip = objs[i] as AnimationClip;
if (clip != null && clip.name.ToLower() == "city_action")
{
EditorCurveBinding[] curveBindings = AnimationUtility.GetCurveBindings(clip);
for (int j = 0; j < curveBindings.Length; j++)
{
EditorCurveBinding curveBind = curveBindings[j];
if (curveBind.type == typeof(Camera))
{
AnimationCurve animCurve = AnimationUtility.GetEditorCurve(clip, curveBind);
AnimationUtility.SetEditorCurve(clip, curveBind, null);
curveBind.path = "cam/m_3DHeroCamera";
AnimationUtility.SetEditorCurve(clip, curveBind, animCurve);
AnimationCurve addCurve = new AnimationCurve();
addCurve.AddKey(0, 0);
addCurve.AddKey(clip.length, 0);
clip.SetCurve("cam/m_3DHeroCamera", typeof(Transform), "m_LocalRotation.x", addCurve);
clip.SetCurve("cam/m_3DHeroCamera", typeof(Transform), "m_LocalRotation.y", addCurve);
clip.SetCurve("cam/m_3DHeroCamera", typeof(Transform), "m_LocalRotation.z", addCurve);
}
}
}
}
}
}
}