ブレンドツリー向けの追加オプション
Animator Override Controller

ブレンドシェイプ

アートワークの準備

Once you have your Blend Shapes set up in Autodesk® Maya®:

  • アニメーションのオプション、デフォームしたモデル(Deformed Models)オプションのブレンドシェイプオプションを有効にしたのを確認して、選択したオブジェクトをエクスポートしてください。

  • Import your FBX file into Unity (from the main Unity menu: Assets > Import New Asset and then choose your file).

  • Drag the Asset into the hierarchy window. If you select your object in the hierarchy and look in the inspector, you will see your Blend Shapes are listed under the SkinnedMeshRenderer component. Here you can adjust the influence of the blend shape to the default shape, 0 means the blend shape has no influence and 100 means the blend shape has full influence.

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

Unity のアニメーションウィンドウを使用してブレンドアニメーションを作成することも可能です。手順は以下のようになります。

  • Open the Animation window under Window > Animation > Animation.

  • ウィンドウの左側‘ Add Curve ’をクリックして Skinned Mesh Renderer にあるブレンドシェイプを追加します。

ここからキーフレームとブレンドウェイトを操作してお望みのアニメーションを作成することができます。

アニメーションの編集が終われば、エディターウィンドウかアニメーションウィンドウの play をクリックしてアニメーションをプレビューすることができます。

スクリプトからアクセス

GetBlendShapeWeight や SetBlendShapeWeight などのコードを通してブレンドウェイトを設定することも可能です。

blendShapeCount 変数にアクセスすることでメッシュがいくつのブレンドシェイプをもっているのかをチェックすることができます。

ここでは 3 つ以上のブレンド形状を持つゲームオブジェクトに結合する時に、時間をかけて他の二つのブレンド形状にデフォルトの形状をブレンドしたコードの例を次に示します。

// C# を使用
 
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;
                 }
 
          }
       }
}
ブレンドツリー向けの追加オプション
Animator Override Controller