ブレンドツリー向けの追加オプション
Mecanimの高度なトピック

ブレンドシェイプ

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

アートワークの準備

MAYA上でブレンドシェイプの準備ができたら:

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

  • Unityへfbxファイルを読み込みます。(assets->import new assets->[name of file].fbx)

  • アセットをヒエラルキーウィンドウへドラッグします。ヒエラルキーウィンドウ上でオブジェクトを選択し,インスペクターを確認する事で,SkinnedMeshRendererコンポーネント内においてブレンドシェイプのリストを確認できます。ここではデフォルト形状へのブレンドシェイプの影響力を調節でき,0ではブレンドシェイプの影響はなく,100でブレンドシェイプへの影響が最大になります。

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

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

  • Window->Animation を選択してアニメーションウィンドウを開きます。

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

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

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

スクリプトからアクセス

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

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

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

//Using 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;
                 }
 
          }
       }
}
ブレンドツリー向けの追加オプション
Mecanimの高度なトピック