サーチ…


実行のための基本アニメーション

このコードは、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コンポーネントをそれらにリンクする)
  • 選択したフレームでアニメーションクリップを作成する

新しいコンポーネントを示す新しいゲームオブジェクトインスペクタ

再生をクリックして、アニメーションタブで再生をプレビューします。

2Dアニメーションプレビュー

同じメソッドを使用して、同じゲームオブジェクトの新しいアニメーションを作成し、新しいゲームオブジェクトとアニメーションコントローラを削除することができます。新しいアニメーションクリップを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)の値を保持します。私たちはその価値を使って翻訳のスピードを変えています。このスクリプトをプレーヤーのゲームオブジェクトに添付することができます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow