csharp アニメーションクリップを少しリカバリーする编辑スクリプト
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp アニメーションクリップを少しリカバリーする编辑スクリプト相关的知识,希望对你有一定的参考价值。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
public class AnimationClipRecoveryEditor : EditorWindow
{
[MenuItem("Window/AnimationClip Recover")]
static void Init ()
{
var w = EditorWindow.GetWindow<AnimationClipRecoveryEditor>();
w.title = "Clipリカバリー";
w.Show();
}
private Transform _tr;
private AnimationClip _clip;
private List<RecoveryData> _props = new List<RecoveryData>();
private string[] _curveNames = new string[]{
"m_PositionCurves",
"m_ScaleCurves",
"m_FloatCurves",
"m_PPtrCurves",
"m_EditorCurves",
"m_EulerEditorCurves"
};
void OnGUI ()
{
_clip = (AnimationClip)EditorGUILayout.ObjectField((AnimationClip)_clip, typeof(AnimationClip));
_tr = (Transform)EditorGUILayout.ObjectField((Transform)_tr, typeof(Transform), true);
if (_tr == null || _clip == null) {
return;
}
if (GUILayout.Button("Check")) {
var soClip = new SerializedObject(_clip);
_props = FindCurveProps(soClip);
}
if (_props.Count > 0) {
GUILayout.Label("AnimationClip is INVALID");
for (int i = 0; i < _props.Count; i++)
{
var p = _props[i];
GUILayout.Space(3f);
p.name = GUILayout.TextField(p.name);
if (GUILayout.Button("Recover")) {
p.prop.stringValue = p.name;
p.so.ApplyModifiedProperties();
}
}
} else {
GUILayout.Label("AnimationClip is ALL GREEN");
}
}
private List<RecoveryData> FindCurveProps (SerializedObject so)
{
List<RecoveryData> resultList = new List<RecoveryData>();
foreach (var curveName in _curveNames) {
var posCurves = so.FindProperty(curveName);
int len = posCurves.arraySize;
for (int i = 0; i < len; i++)
{
var curve = posCurves.GetArrayElementAtIndex(i);
var pathProp = curve.FindPropertyRelative("path");
var path = pathProp.stringValue;
var result = _tr.Find(path);
Debug.LogFormat("{0} : {1}", path, result);
if (result == null) {
resultList.Add(new RecoveryData(){ so = so, prop = pathProp, name = path });
Debug.LogError(path);
}
}
}
return resultList;
}
}
class RecoveryData {
public SerializedObject so;
public SerializedProperty prop;
public string name;
}
以上是关于csharp アニメーションクリップを少しリカバリーする编辑スクリプト的主要内容,如果未能解决你的问题,请参考以下文章
csharp ランダムテキストアニメーション
csharp uvScrollアニメーションを持っている场合の材料注意点。
csharp interfaceの明示的実装の例(プレイヤーキャラクターのアニメーション切り替え)
xml [WPF]コードビハインド侧でアニメーション制御.DataGridの行を実行时にアニメーション制御。
csharp [WPF] DataGridの行の点灭。パターンごとに同じアニメーションを同じタイミングで実施。(ParallelTimeline,ClockGroup,ApplyAnimationCl
html ボタンアニメーション