莞爾の草原。

RPGツクールVX Ace、MVや自作のことを主に書いていくブログです。不定期更新。

トップ

【技術者向け】ツクールMZでPIXI3Dを使ってみよう!(Windows用)

ツクールMZはPIXI.jsベースで作られているので「どうせならPIXI3Dを使って3D演出を実装したい!」という思いで始めて色々できたので共有します。

マイナーなライブラリなのか英語で調べてもほとんど情報は出てきませんが一緒に頑張りましょう。

PIXI.jsのバージョンを変えるためコアスクリプトプラグインで不具合が起こる可能性があります。

※ツクールMVではPIXI.jsのバージョンが低いため対応していません。

※自己責任でお試しください。

 

Node.jsとnpmの導入(Windows

必要なライブラリの導入のためにnode.jsとnpmをインストールする必要があります。

Windowsの場合

Node.js / npmをインストールする(for Windows) - Qiita 

npmを正常にダウンロードできたらコマンドプロンプトを開き、ツクールのプロジェクトのサブフォルダなどで『npm init』と実行します。

色々と聞かれますがこの設定はあまり関係ないのでENTERで飛ばします(package nameを省略した場合フォルダ名から自動で指定されますが、隠しフォルダに生成するとnameの先頭を.にすることができないため失敗します。初めて見た)。

これでプロジェクトにnpmが導入できました。

 

PIXI.jsのアップデート・PIXI3Dのインストール

PIXI3Dが対応するPIXI.jsのバージョンがv5.3.0以上で、ツクールMZ(v1.5.0)のPIXI.jsのバージョンが5.2.4なのでアップデートする必要があります。

今回はバージョンの近い5.3.0を導入したいのでプロンプトに『npm install pixi.js@5.3.0』を実行します。

続けてPIXI3Dをインストールしたいので『npm install pixi3d@1.6.2』(2022/11/12時点の最新バージョン)を実行します。

インストールが完了するとnode_modulesフォルダにpixi.js、pixi3dフォルダが入っているので、それぞれのフォルダ内から以下のファイルをコピーしてjs/libsフォルダに貼り付けます。

pixi.js/dist/pixi.js(libs/pixi.jsのリネーム推奨)

pixi3d/dist/umd/pixi3d.js

 

移動完了後、main.jsのscriptUrls配列の"js/libs/pixi.js"の下に"js/libs/pixi3d.js"を追加すれば導入は完了です。

 

3Dオブジェクトを表示してみよう

PIXI3Dの導入が完了したので早速ドキュメントを見ながらいじっていきましょう。

api.pixi3d.org

Cube(立方体、直方体)やSphere(球体)を作るにはPIXI3D.Mesh3D.createなんちゃらの関数を呼び出せばいいのでとりあえず書いてみます。

コード

ゲーム画面

3Dオブジェクトが表示されました!
ただマテリアルとライトを設定していないため真っ黒のままになっています。

コードを追加しましょう

ゲーム画面

ちなみにオブジェクトを動かしたい場合は、以下のコードで入力キーとマウスカーソルから操作することができます。

(ここまできたらUnityでは?)

 

カメラ(視点)を動かしてみよう

オブジェクトの移動のために作った関数内の『const cam = this._kns...』の行をconst cam = PIXI3D.Camera.main;と書き換えるとカメラの座標を調整することができます。

先ほどとは違いオブジェクトそのものは動いていないのでオブジェクトの光の当たり方があまり変わらなくなりました。

カメラは複数作って切り替えることができるのでいろいろ使い道がありそうですね。

 

3Dモデルを表示してみよう

ざっくり調べた程度ですが、以下のようにすると使えるようです。

PIXI.js v5ではGraphics.app.loaderを介してgltf拡張子のモデルデータにアクセスし、loader.load関数で読み込み時に処理を行います。

既に読み込まれている場合はloader.resoursesからデータを持ってくることができます。

ImageManagerを拡張したりPIXI3D.Modelクラスのラッパーを作ったりすればもっときれいに書けそうですが、自分は今のところ使う予定はないので深く調べていません。

来たれ変態。

 

Skyboxを表示してみよう

SkyboxはUnityなどではおなじみの空などの背景を表示するものです。

6枚の画像をサイコロのように組み立てたものをうまいことすることで背景のように見せてくれます(よくわからなってない)。

そういうわけで6枚の画像を以下のように設定することで何となくうまくいきます。

とりあえず表示はできましたが、このままでは静止画でただの背景と同じなので動きを付けてみます。

こうなってたんだ

 

最後に

シーン終了時などにライトオブジェクトを外しておかないとどんどん光が強くなってしまうのでterminateなどで外してあげましょう。

おわり

 

ソースコード

drive.google.com