Unityで使用するC#スクリプトを書いていて、メモっておきたいと思ったことを書き記しています。
自分が困った時のメモなので、コードが汚かったり、もっといい方法があると思います。
初心者の勉強で独学ですので、もっといい方法があればご教授いただけますと幸いです。
・表情操作のスクリプト
今回はVRMモデルを利用しています。
FBXの場合はSkindmeshrendererを参照することで表情の操作が可能です。
VRMの場合も同様の操作が可能ですが、今回はVRMblendShapeProxyを利用します。
VRMblendShapeProxyを利用して表情を操作する場合、
Void Update()の段階で、
if(proxy == null)
{
proxy = model.GetComponent();
}
else
{
この文章ではmodelの中にVRMBlendShapeProxyが含まれているかを確認しています。
nullは含まれていない場合、含まれている場合は次のステップに進みます。
次にGetKeyでキーボードの入力を取得します。
if(input.GetKey(KeyCode.X))
{
proxy.SetValue("Face1",1.0f);
}
else
{
proxy.SetValue("Face1",0);
}
公式ドキュメントでSetValueが推奨されているこちらを使用します。
Xを入力することでFace1の表情プリセットの出力をします。
VRMのモデルに元々用意されている表情を使用したかったのですが、
名前がblendshape.joyなどになっているためか、うまくいきませんでした。
なので、使用する場合はFace1など新しくプリセットを制作して使う。
animationにJoyを用意して、切り替える方法も考えましたがpresetをあたらしく準備した方が早かった。。。
・表情操作をしているときにblink(瞬きを切りたい)
blink操作をするためのスクリプトは先人の方の力を借りました。
書き換えたのはスクリプトに namespace AutoBkink これを書き足しました。
using AutoBlinkを書きAutoBlinkをスクリプトで操作することができるようになります。
XでFace1の表情を操作しているときに、AutoBlinkを停止したいので、
スクリプトを非アクティブ状態にするスクリプトを書く。
enabledはスクリプトを操作できるようにします。
非アクティブにしたい場合は
enabled = false
アクティブにしたい場合は
enabled = true
これをif文を使い。
if(Input.GetKey(KeyCode.X))
{
AutoBlink.enabled = false;
}
else
{
AutoBlink.enabled = ture;
}
using AutoBlink の書き忘れに注意。
・口パクに対しての表情操作
口についてはモデル自体の表情に口の変化を入れないようにすることで、
リップシンクとバッティングしないようにする。
以上が今回勉強したメモです。
次はMidiを利用した操作やChinemaShineについて学んでいきたいと考えてます。