本日は Unity と Blender の技術調査枠です。
Blender で作成したモデルのシェイプキーを Unity に取り込み利用する方法についてまとめます。
シェイプキーを設定したモデルとして、以下で作成した球体モデルを再利用します。
bluebirdofoz.hatenablog.com
Blender でシェイプキーを設定したモデルを fbx 形式で出力します。
出力形式としては、メッシュを出力すればシェイプキーが含まれます。
Unity のプロジェクトを起動し、fbx ファイルをアセットとしてインポートします。
このとき、仮にシェイプキーを使ったアニメーションを Blender 上で設定していても Unity には取り込まれません。
アニメーションとして取り込み可能なのはオブジェクトやボーンのトランスフォーム変更によるアクションデータです。
取り込んだオブジェクトを Hierarchy に配置します。
オブジェクトを選択すると、シェイプキーを設定したオブジェクトである場合「Skinned Mesh Renderer」コンポーネントが設定されています。
このうちの「BlendShapes」を開くと、Blender で設定したシェイプキーが確認できます。
もし取り込みが行われていない場合、シェイプキーの取り込み設定が無効化されていることがあります。
アセットの Model インポートの設定を確認し、「Import BlendShapes」が有効になっていることを確認します。
取り込んだシェイプキーは「Skinned Mesh Renderer」コンポーネントを通して利用可能です。
以下のサイトのサンプルスクリプトを参考に、XKey と YKey のシェイプキーを変形させるスクリプトを組んでみました。
peroon.hatenablog.com
・ShapeManager
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ShapeManager : MonoBehaviour { private SkinnedMeshRenderer skinnedMeshRenderer; void Start() { skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>(); } void Update() { // XKey(index:0)のシェイプキー値を 0.0f ~ 100.0f で設定する float value_XKey = 50.0f + 50.0f * Mathf.Sin(Time.time); skinnedMeshRenderer.SetBlendShapeWeight(0, value_XKey); // YKey(index:1)のシェイプキー値を 0.0f ~ 100.0f で設定する float value_YKey = 50.0f + 50.0f * Mathf.Cos(Time.time); skinnedMeshRenderer.SetBlendShapeWeight(1, value_YKey); } }
オブジェクトにスクリプトを適用してシーンを再生すると、以下のようにシェイプキーの変形が行われます。