unity3d
ユニティアニメーション
サーチ…
実行のための基本アニメーション
このコードは、Unityのアニメーションの簡単な例を示しています。
この例では、2つのアニメーションクリップが必要です。ランとアイドル。これらのアニメーションは、Stand-In-Placeモーションでなければなりません。アニメーションクリップを選択したら、Animator Controllerを作成します。このコントローラーを、アニメートするプレーヤーまたはゲームオブジェクトに追加します。
WindowsオプションからAnimatorウィンドウを開きます。 2つのアニメーションクリップをAnimatorウィンドウにドラッグすると、2つの状態が作成されます。作成したら、左のパラメータタブを使用して、2つのパラメータを両方ともboolとして追加します。 「PerformRun」と「PerformIdle」と名前を付けてください。 "PerformIdle"をtrueに設定します。
アイドル状態から実行と実行に遷移してアイドル状態にします(画像参照)。 Idle-> Run transitionをクリックし、InspectorウィンドウでHasExitの選択を解除します。他の移行にも同じことをします。アイドル→ラン遷移の場合、条件を追加します:PerformIdle。 Run-> Idleの場合、条件:PerformRunを追加します。下記のC#スクリプトをゲームオブジェクトに追加します。上のボタンを使ってアニメーションを実行し、左と右のボタンで回転させる必要があります。
using UnityEngine;
using System.Collections;
public class RootMotion : MonoBehaviour {
//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;
Animator animator;
void Start()
{
/**
* Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
*/
animator = GetComponent<Animator>();
}
void Update()
{
/**
* The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
* Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
*/
if (Input.GetKey (KeyCode.UpArrow)) {
animator.SetBool ("PerformRun", true);
animator.SetBool ("PerformIdle", false);
} else {
animator.SetBool ("PerformRun", false);
animator.SetBool ("PerformIdle", true);
}
}
void OnAnimatorMove()
{
/**
* OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined
* using this fucntion.
*/
if (Input.GetKey (KeyCode.UpArrow)){
transform.Translate (Vector3.forward * RunSpeed);
if (Input.GetKey (KeyCode.RightArrow)) {
transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
}
else if (Input.GetKey (KeyCode.LeftArrow)) {
transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
}
}
}
}
アニメーションクリップの作成と使用
この例では、ゲームオブジェクトまたはプレーヤのアニメーションクリップを作成して使用する方法を示します。
この例で使用されるモデルは、Unity Asset Storeからダウンロードされます。プレーヤーは以下のリンクからダウンロードされました: https : //www.assetstore.unity3d.com/en/#! / content / 21874
アニメーションを作成するには、まずアニメーションウィンドウを開きます。ウィンドウをクリックしてアニメーションを選択するか、Ctrl + 6を押して開くことができます。階層ウィンドウから、アニメーションクリップを適用するゲームオブジェクトを選択し、アニメーションウィンドウの「作成」ボタンをクリックします。
アニメーションに名前をつけ(IdlePlayer、SprintPlayer、DyingPlayerなど)、保存します。アニメーションウィンドウから、プロパティの追加ボタンをクリックします。これにより、時間に関してゲームオブジェクトまたはプレーヤーのプロパティを変更することができます。これには、回転、位置、スケールなどのトランジション、ゲームオブジェクトに付随するanyotherプロパティ(Collider、Mesh Rendererなど)が含まれます。
ゲームオブジェクトの実行アニメーションを作成するには、ヒューマノイド3Dモデルが必要です。上記のリンクからモデルをダウンロードできます。上記の手順に従って、新しいアニメーションを作成します。 Transformプロパティを追加し、文字脚のいずれかのRotationを選択します。
この時点で、ゲームオブジェクトプロパティの[再生]ボタンと[回転]の値は赤色に変わっていました。ドロップダウン矢印をクリックすると、X、Y、Zの回転値が表示されます。デフォルトのアニメーション時間は1秒に設定されています。アニメーションはキーフレームを使用して値を補間します。アニメートするには、異なる時点でキーを追加し、インスペクタウィンドウから回転値を変更します。たとえば、時刻0.0sでの回転値は0.0とすることができます。時間0.5sでは、Xの値は20.0になります。時刻1.0sでは、値は0.0になります。 1.0秒でアニメーションを終了できます。
アニメーションの長さは、アニメーションに最後に追加したキーによって異なります。補間をスムーズにするために、さらにキーを追加することができます。
2Dスプライトアニメーション
スプライトアニメーションは、イメージまたはフレームの既存のシーケンスを表示することから成ります。
最初に一連の画像をアセットフォルダにインポートします。いくつかの画像を一から作成するか、Asset Storeから画像をダウンロードしてください。 (この例では、 このフリーアセットを使用しています)。
1つのアニメーションのすべての個々の画像をアセットフォルダからシーンビューにドラッグします。新しいアニメーションクリップに名前を付けるダイアログが表示されます。
これは便利なショートカットです:
- 新しいゲームオブジェクトを作成する
- 2つのコンポーネント(スプライトレンダラーとアニメーター)を割り当て、
- アニメーションコントローラを作成する(そして新しいAnimatorコンポーネントをそれらにリンクする)
- 選択したフレームでアニメーションクリップを作成する
再生をクリックして、アニメーションタブで再生をプレビューします。
同じメソッドを使用して、同じゲームオブジェクトの新しいアニメーションを作成し、新しいゲームオブジェクトとアニメーションコントローラを削除することができます。新しいアニメーションクリップを3Dアニメーションと同じ方法でそのオブジェクトのアニメーションコントローラに追加します。
アニメーション曲線
アニメーションカーブでは、アニメーションの再生中に浮動小数点パラメータを変更できます。たとえば、長さ60秒のアニメーションがあり、浮動小数点値/パラメータが必要な場合は、アニメーション時間= 0.0秒;アニメーション時間= 30.0秒; X = 1.0、アニメーション時間= 60.0秒; X = 0.0)。
浮動小数点値を取得したら、他の方法でそれを変換、回転、拡大縮小、または使用することができます。
私の例では、プレーヤーのゲームオブジェクトが実行中であることを示します。実行のためのアニメーションが再生されるとき、アニメーションが進むにつれてプレイヤーの翻訳速度が増加するはずです。アニメーションが終了すると、翻訳速度が低下するはずです。
私は実行中のアニメーションクリップを作成しました。クリップを選択し、インスペクタウィンドウで[編集]をクリックします。
一度そこまでスクロールして曲線にします。カーブを追加するには、+記号をクリックします。曲線の名前をForwardRunCurveとします。右のミニチュアカーブをクリックします。デフォルトのカーブを持つ小さなウィンドウが開きます。
私たちは、それが起きてから落ちる放物形のカーブが必要です。デフォルトでは、行に2つの点があります。カーブをダブルクリックすると、ポイントを追加できます。点をドラッグして、次のような図形を作成します。
Animatorウィンドウで、実行中のクリップを追加します。また、曲線と同じ名前のfloatパラメータ、つまりForwardRunCurveを追加します。
アニメーションが再生されると、浮動小数点値はカーブに従って変化します。次のコードは、float値の使用方法を示します。
using UnityEngine;
using System.Collections;
public class RunAnimation : MonoBehaviour {
Animator animator;
float curveValue;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
curveValue = animator.GetFloat("ForwardRunCurve");
transform.Translate (Vector3.forward * curveValue);
}
}
curveValue変数は、任意の時点における曲線(ForwardRunCruve)の値を保持します。私たちはその価値を使って翻訳のスピードを変えています。このスクリプトをプレーヤーのゲームオブジェクトに添付することができます。