CubismJsで画像の切替機能を実装する

前回記事のサンプルでは、Cubism SDK for JavaScript (以下cubism-js) で動画の再生と停止を実行しました。今回は静止画(PNG)の再生と切替機能を組み込んでみます。

※現在(2020/11)は、Cubism SDK for Web に移行したためCubism SDK for JavaScriptの利用は推奨されていません。Live2DをWebブラウザで動作させる場合には、Cubism SDK for Webを使用してください。

以下の記事で導入までの流れを紹介しています。

Cubism SDK for Web を使ってみる
この記事では Cubism SDK for Web の基本的な動作(モデルの表示とアニメーション)について確認しています。
Cubism SDK for Web
WebGLで実装されたSDKです。
主要なWebブラウザに対応しているため、幅広い環境で動作させることが可能です。
ソースコードはTypeScriptで書かれており、トランスパイルを行うことでJavaScriptから扱うことも可能です。
スポンサーリンク

使用するイラスト

使用イラスト
© Unity Technologies Japan/UCL

cubism-jsで使用するモーションの準備

今回は静止画を切り替えるので、next (次の画像に切替)用のモーションと prev (前の画像に切替)用のモーションを準備します。
腕を動かすモーションに加えて、next ではテレビに青い光、prev ではテレビに赤い光を追加しました。

左:next.motion3.json | 右:prev.motion3.json

切替モーション

pixitv2.jsの作成

cubism-jsのフォルダの中にある index.html のリストに「静止画の再生と切替機能」のサンプルとして「pixitv2.js」を作成して追加します。

モーションファイルの読込

ファイルを配置した場所を指定して、モーションファイルを読み込みます。
下記コードは「次の画像に切替時のモーション」(next.motion3.json)を読み込む記述です。

pixitv2.js
.add('motionN', "../assets/tv/next.motion3.json", { xhrType: PIXI.loaders.Resource.XHR_RESPONSE_TYPE.JSON })

静止画の再生

今回は4枚の画像を配列に格納して再生します。
下記コードは「配列の先頭に格納された画像を再生する」記述です。

pixitv2.js
var imgA = PIXI.Texture.fromImage("../assets/tv/0.png");
var imgB = PIXI.Texture.fromImage("../assets/tv/1.png");
var imgC = PIXI.Texture.fromImage("../assets/tv/2.png");
var imgD = PIXI.Texture.fromImage("../assets/tv/3.png");
var pathList = [imgA, imgB, imgC, imgD];
var i = 0;
var image = new PIXI.Sprite(pathList[i]);
app.stage.addChild(image);

上記コードの場合、imgA で指定した画像(0.png)が再生されます。

静止画の切替

next (次の画像に切替)ボタンと prev (前の画像に切替)ボタンがクリックされた時の動作を作成します。
下記コードは「次の画像に切り替える」記述です。

pixitv2.js
if (i >= 3) {
  i = 0;
} else {
  i++;
}
var image = new PIXI.Sprite(pathList[i]);
app.stage.addChild(image);

上記コードの場合、next ボタンがクリックされるたびに imgA => imgB => imgC => imgD => imgA => imgB … と切り替わっていきます。

「前の画像に切り替える」prev 時は下記のように記述しました。

pixitv2.js
if (i <= 0) {
  i = 3;
} else {
  i--;
}

Cubism 3 JS Sample

今回の作業で作成したサンプル(静止画の再生と切替)のキャプチャを載せます。
ブラウザはEdgeで動作を確認しています。

クリックでGIFアニメーションが再生されます
sample_gif

タイトルとURLをコピーしました