public static void UpdateAnimationRelativePath(LostProperty prop, string newPath) { Debug.Log(prop.PropPath + "を" + newPath + "に修正"); prop.State = FixState.Fixed; prop.SerializedProperty.stringValue = newPath; prop.SerializedClip.ApplyModifiedProperties(); }
private static ClipValidationContainer FindLostAnimations(AnimationClip clip, Transform root) { var lostAnimations = new List <LostProperty>(); var serializedClip = new SerializedObject(clip); // clipはいくつかのカーブをもっている foreach (var curveName in CurveNames) { var curves = serializedClip.FindProperty(curveName); var curveCount = curves.arraySize; for (var i = 0; i < curveCount; i++) { var curve = curves.GetArrayElementAtIndex(i); var pathProperty = curve.FindPropertyRelative(PathPropName); var attributeProperty = curve.FindPropertyRelative(AttributePropName); var attribute = attributeProperty != null ? attributeProperty.stringValue : "Position"; // ルートの直下からの相対パスが入ってる var path = pathProperty.stringValue; var result = root.Find(path); if (result == null) { var lost = new LostProperty { ObjectName = GetObjectName(path), PropPath = path, AttributeName = attribute, SerializedProperty = pathProperty, SerializedClip = serializedClip, State = FixState.Lost }; lostAnimations.Add(lost); } } } var clipLost = new ClipValidationContainer(lostAnimations, clip); return(clipLost); }