AnimationCurveをC#コードに逆変換
Convert AnimationCurve to C# code text
AnimationCurveの値を、C#ソースコードのテキストに逆変換するちょっとしたコード塊を置いておきます。
↓ AnimationCurveエディターで編集したカーブを
↓ こんなテキストに変換します。
AnimationCurve curve = new AnimationCurve();
curve.AddKey( new Keyframe(0f,0f,2f,2f) );
curve.AddKey( new Keyframe(0.2859742f,0.7250273f,0.5882978f,0.5882978f) );
curve.AddKey( new Keyframe(0.5100769f,0.4799553f,float.PositiveInfinity,float.PositiveInfinity) );
curve.AddKey( new Keyframe(0.5973239f,0.2808435f,1.415312f,1.415312f) );
curve.AddKey( new Keyframe(0.8025485f,0.4338613f,2.374947f,2.374947f) );
curve.AddKey( new Keyframe(1f,1f,0f,0f) );
csファイル内にそのまま貼り付けられるテキストになるので、任意のカーブを何かの初期値として使うとかの用途に役立つかもしれません。
使い方
unityプロジェクトの中にcsファイルを追加し、下のソースコードをコピペします。
適当なGameObjectを作成してそのスクリプトをアタッチ
カーブを編集して「Output to Clipboard」ボタンを押します。
これで上のように変換されたテキストがクリップボードにコピーされますので、自分のC#スクリプトなどで貼り付けします。
中身
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class CurveToText : MonoBehaviour
{
public AnimationCurve curve;
}
#if UNITY_EDITOR
[CustomEditor(typeof(CurveToText))]
public class CurveToTextEditor : Editor
{
string Convert(float input)
{
if (float.IsPositiveInfinity(input)) { return "float.PositiveInfinity"; }
if (float.IsNegativeInfinity(input)) { return "float.NegativeInfinity"; }
if (float.IsNaN(input)) { return "float.NaN"; }
else { return input + "f"; }
}
public override void OnInspectorGUI()
{
DrawDefaultInspector();
if (GUILayout.Button("Output to Clipboard"))
{
CurveToText t = target as CurveToText;
string combinedText = "";
combinedText = "AnimationCurve curve = new AnimationCurve();\n";
for (int i = 0; i < t.curve.length; i++)
{
string time = Convert(t.curve[i].time);
string value = Convert(t.curve[i].value);
string inTan = Convert(t.curve[i].inTangent);
string outTan = Convert(t.curve[i].outTangent);
combinedText += string.Format("curve.AddKey( new Keyframe({0},{1},{2},{3}) );\n", time, value, inTan, outTan);
}
//Copy to Clipboard
GUIUtility.systemCopyBuffer = combinedText;
}
}
}
#endif