gerunido.hatenablog.com
前回からの続き。
使ったバージョンは前回と同じく下記である。

Live2D Cubism 4.1
Cubism 4 SDK for Unity R3
Unity 2019.4.28f1 (64-bit)

CubismModel _model;
CubismParameter _param; // 物理演算の入力パラメータ

float _sec; // パラメータを変化させ始めてからの秒数
float _secMax; // 何秒でパラメータを変化させるか
float _increment; // パラメータを変化させる向き

void Start()
{
_model = this.FindCubismModel();
_param = _model.Parameters.FindById("ParamID");
_sec = 0;
_secMax = 0.2f;
_increment = 1;
}

void LateUpdate()
{
_sec += Time.deltaTime * _increment;
if (_sec > _secMax)
{
_sec = _secMax;
    _increment = -0.1f;
}
else if (_sec < 0)
{
_sec = 0f;
   _increment = 1;
}
float sinValue = Mathf.Sin(Mathf.PI / 2 * _sec / _secMax); // 0 <= sinValue <= 1
_param.Value = _param.MinimumValue + sinValue * (_param.MaximumValue - _param.MinimumValue);
}

こういう感じのプログラムを書くと"ParamID"というIDのパラメータが0.2秒で最大値に変化し、その後2秒で最小値に変化するのを繰り返す。変化は正弦関数で滑らかにしている。
LateUpdate()の中で物理演算の入力パラメータを変化させると物理演算が行われた結果が画面に表示されるようだ。

しかしこれCtrl+Bで実行ファイルをビルドして実行すると物理演算が行われた結果が画面に表示されるのだが、再生ボタンみたいなのを押して行う「シーンの再生」だと全然物理演算が行われた結果が画面に表示されない。LateUpdate()の中でなくてUpdate()で同じ事をやる(上記コードのLateUpdateをUpdateに書き換える)と「シーンの再生」でも物理演算が動くように見えるのだが、今度は実行ファイルの方で全然動かないようになる。Cubism SDKのマニュアルにはLateUpdate()でパラメータ更新すると書いてあるのでLateUpdate()の方が正しいようだ。

ともかく一応はLive2Dの物理演算の結果をUnityで表示できるようになった。「シーンの再生」でも表示させたいものだが。

 

gerunido.hatenablog.com

 の続き。

 

使ったバージョンは前回と同じく下記である。

Live2D Cubism 4.1
Cubism 4 SDK for Unity R3
Unity 2019.4.28f1 (64-bit)

 

  void LateUpdate()
  {
    CubismModel model = this.FindCubismModel();
    CubismPart part = model.Parts.FindById("PartID");
    _part.Opacity = 0.5f;
  }

 

こう書くと透明度が変化することを発見した。CubismPart.Opacityはどこかに記憶されていて起動時の値が入っているようである。記憶されている値を変更する方法は見つかっていない。とりあえずLateUpdate()で毎フレーム上書きすれば画面に反映されるのであるが、このタイミング以外で更新しても画面には全く反映されない。

 

あと前回も書いた通りLive2Dで言う「パーツ」はパーツウィンドウに表示されている物の内フォルダだけで、フォルダ以外の物はCubismModel.Partsの中には入ってやしないので注意。透明度を変化させたい物はパーツ(フォルダ)に入れておけということであろう。

まあCubism Editorで動画を作る時の「Live2D パーツ表示」の一覧にもパーツ(フォルダ)しか表示されないから使っている用語はともかく首尾は一貫している。

 

次回はUnityでの物理演算表示について書きたい。まあ古いCubism SDK(2以前)では色々面倒だったのが3以降では何もせずとも自動で物理演算表示できるようなのだが、どうも動作に癖があるようなので。Unityのバージョンとの相性?

Live2Dで作成したモデルをCubism 4 SDK for Unityで動かした時の備忘録。

 

使ったバージョンは

  • Live2D Cubism 4.1
  • Cubism 4 SDK for Unity R3
  • Unity 2019.4.28f1 (64-bit)

 

Live2D Cubism Editorでmoc3ファイルを出力してUnityのAssetsに追加してとりあえず静止画が表示されるまでは問題ないだろう。

 

しかしその後やり方がわからなくてつまずいたところを書きたい。

 

とりあえずパーツに透明度を設定するところだろうか。

なおここで言う「パーツ」とはLive2Dで言う「パーツ」である。

Live2D Cubism Editorでメニューバーからウィンドウ→パーツで何か一覧表示が出て来る。

最初はこの一覧に表示されている物が「パーツ」なのだと思ってしまうだろう。

さにあらず。

この一覧に表示されている物の内、フォルダのアイコンになっている物だけがLive2Dで言う「パーツ」である。

その証拠に右下に「新規パーツ作成」なるボタンがあって押すとフォルダアイコンが作成できる。

あるいは、右上のハンバーガーメニュー(横棒三本のボタン)から「パーツ設定」を選ぼう。一覧の内、フォルダアイコンの物だけが表示される。

 

あるいは、Unity上から以下のコードを実行してみよう。CubismPartが「パーツ」を表すクラスだ。

 

using Live2D.Cubism.Core;
using UnityEngine;
using UnityEngine.UI;

public class MotionPlayer : MonoBehaviour
{

  void Start()
  {
    foreach(CubismPart p in this.FindCubismModel().Parts){

      Debug.Log(p.Id);
    }

  }

}

 

「パーツ設定」のウィンドウに出て来るフォルダアイコンのIDだけが出力されるはずだ。

何でフォルダアイコンで機能もフォルダそのものなのに「パーツ」という名前なのか理解に苦しむ。なお「パーツ」ウィンドウの一覧に並んでいる「パーツ」以外の物は何と呼ぶのか今のところ不明である。Unityのコード上ではCubismDrawableというクラスで扱われるようだ。

 

最初の記事なので今日はこの辺にして、どうすればパーツに透明度を設定できるのは次回にする。