【Unity】BlendShapesをスクリプトで操作してみる
2016年09月23日

【Unity】BlendShapesをスクリプトで操作してみる

先日Blenderで登録したシェイプキーをUnityで操作してみましたが、今回はその操作をスクリプトから行ってみたいと思います。

登録してあるシェイプキーは口を閉じる動作なので、今回作ったスクリプトは右クリックをすると3Dモデルが口を閉じるというものです。
言語はUnityScript(JavaScript)です。

#pragma strict

private var head : GameObject;
private var FacialExpression : SkinnedMeshRenderer;
private var weight : float;
private var CloseMouth : int;

function Start() {
	head = GameObject.Find("Head");
	FacialExpression = head.GetComponent(SkinnedMeshRenderer);
}

function Update()  {
	// 右クリックでBlendShapesの値の取得と設定をする
	if(Input.GetMouseButtonDown(1)){
		CloseMouth = FacialExpression.sharedMesh.GetBlendShapeIndex("MouthClose");
		if(FacialExpression.GetBlendShapeWeight(CloseMouth) <= 0){
			weight = 100;
			FacialExpression.SetBlendShapeWeight(CloseMouth,weight);
		} else {
			weight = 0;
			FacialExpression.SetBlendShapeWeight(CloseMouth,weight);
		}
	}
}

今回はこのスクリプトを使う3Dモデルの子オブジェクト「Head」に登録してあるブレンドシェイプを使うので、スタート関数の中でFind関数を使ってHeadを探します。
そしてそのHeadにあるSkinned Mesh RendererをGetComponentで取得します。

次にアップデート関数では15行目で右クリックした場合に動作をするようにしています。
16行目はsharedMesh.GetBlendShapeIndexで指定したブレンドシェイプを取得して変数に代入しています。
この16行目はスタート関数に書いた方が無駄に呼び出さなくて済むから良いかもしれませんね。
17行目からは指定したブレンドシェイプの値が0以下ならその値を100にし、そうでなければ値を0にするというものです。

これで実際に動かしてみたのが次の画像です。

右クリックをするたびに口を開けたり閉めたりする。

こんな感じで右クリックをするたびに口を開けたり閉めたりします。

スポンサードリンク
posted by ナオ at 20:16 | Comment(0) | Unityの使い方メモ
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]