Version: Unity 6.0 (6000.0)
言語 : 日本語
アニメーションイベントを追加する
ヒューマノイドアバター

ブレンドシェイプの使用法

アートワークの準備

3D モデリングアプリケーションでブレンドシェイプを設定したら、以下を行います。

  1. 3D モデリングアプリケーションで、以下のエクスポート設定を有効にします。
    • アニメーションのエクスポートを有効にします。
    • 変形したモデルのブレンドシェイプのエクスポートを有効にします。
  2. 選択したものを .fbx ファイルにエクスポートします。
  3. Unity に FBX ファイルをインポート します。
  4. Hierarchy ウィンドウで新しくインポートしたモデルを選択します。Inspector ウィンドウの SkinnedMeshRenderer コンポーネントに、すべてのブレンドシェイプを含む BlendShapes セクションが表示されます。
  5. リストされたブレンドシェイプそれぞれで、デフォルトの形状に対するその影響 (ウェイト) を変更できます。
  6. 0 はブレンドシェイプが影響しないことを意味します。
  7. 100 はブレンドシェイプが完全に影響することを意味します。

Unity でのアニメーションの作成

ブレンドアニメーションを作成するには:

  1. Animation ウィンドウを開きます (Unity のメインメニューから Window > Animation > Animation)。
  2. ブレンドシェイプアニメーションを追加するアニメーションクリップを選択します。Create New Clip を選択して、新しいアニメーションクリップを作成できます。
  3. Add Property をクリックし、[Your Character] > [Your Character Body] > Skinned Mesh Renderer を選択し、アニメーションさせるブレンドシェイプを選択します。
  4. 追加したブレンドシェイププロパティを選択し、キーフレームとブレンドウェイトを調整し、キーフレームを設定します。

アニメーションをプレビューするには、エディターウィンドウまたは Animation ウィンドウで Play をクリックします。

スクリプトからのアクセス

GetBlendShapeWeightSetBlendShapeWeight などの関数を使用して、スクリプトを通してブレンドウェイトを設定することも可能です。

メッシュが持つブレンドシェイプの数を確認するには、blendShapeCount 変数を使用します。

このコード例は、3 つ以上のブレンドシェイプを持つゲームオブジェクトにアタッチされたときに、デフォルトのシェイプを経時的に他の 2 つのブレンドシェイプにブレンドする方法を示しています。

using UnityEngine;
using System.Collections;

public class BlendShapeExample : MonoBehaviour
{
    int blendShapeCount;
    SkinnedMeshRenderer skinnedMeshRenderer;
    Mesh skinnedMesh;
    float blendOne = 0f;
    float blendTwo = 0f;
    float blendSpeed = 1f;
    bool blendOneFinished = false;

    void Awake ()
    {
        skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer> ();
        skinnedMesh = GetComponent<SkinnedMeshRenderer> ().sharedMesh;
    }

    void Start ()
    {
        blendShapeCount = skinnedMesh.blendShapeCount;
    }

    void Update ()
    {
        if (blendShapeCount > 2) {
            if (blendOne < 100f) {
                skinnedMeshRenderer.SetBlendShapeWeight (0, blendOne);
                blendOne += blendSpeed;
            } else {
                blendOneFinished = true;
            }

            if (blendOneFinished == true && blendTwo < 100f) {
                skinnedMeshRenderer.SetBlendShapeWeight (1, blendTwo);
                blendTwo += blendSpeed;
            }
        }
    }
}
アニメーションイベントを追加する
ヒューマノイドアバター