CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Unityライクの操作になったBabylon.js Editorで簡単なゲームを作ります Vol.1(ステージ作成、操作)

前回紹介したBabylon.js Editorは最低限の使い方以外は情報がありません。そこで、簡単なゲームを作りながら使い方を調べることにしました。

作るゲームはブロック崩しです。今回はステージ作成とキーボード操作について解説します。

使用した環境

・Mac OS 10.15.5
・Node.js 12.16.3
・Visual Studio Code 1.47.1
・Babylon.js Editor v4.0.0 beta2

1. 環境構築

現在ベータ版として公開されているBabylon.js Editorを使うには、GitHubから取得したソースコードを元にビルドして自分で作る必要があります。

また、Babylon.js Editorのビルドだけでなく、Babylon.js Editorでプロジェクトを作るときもNode.jsが必要になります。Node.jsはこちらからインストールできます。詳しくは前回記事を参照ください。

www.crossroad-tech.com

まずはworkspaceを作ります。はじめに、workspaceが生成されるフォルダを作っておきます。Babylon.js Editorを起動するとこのような画面が表示されるので、Empty、Nextを選択します。

Creating new workspace on Babylon.js Editor v4.0.0beta2

workspaceの生成場所、名称を入力する画面が出るので好きな名称を入力します。(日本語でどうなるか試していませんが、英語入力が無難です)

すると、workspaceが生成されます。

An example of workspace folder configuration on Babylon.js Editor v4.0.0beta2

ここでは、PingPongGameというworkspaceを生成しました。このようにworkspace自体がnode_modulesを含んだ大量のファイルを持つことになります。

2. ステージを作る

Add Mesh / Cubeを選択してPreview画面にCubeを表示させます。左側にオブジェクトのInspectorがあるので、Transformを変更します。

Add mesh on Babylon.js Editor v4.0.0beta2

また、元のGroundのscaleをx,y,z = 50,0.1,50に変更します。

さらに、ブロック崩しのプレーヤーとなる板?もcubeのscaleを加工して作ります。

3. マテリアルを設定する

画面下のAssets 、Materialsの順番に選択します。今回はEmpty workspaceにcubeとgroundのマテリアルが割り当たっていたのでこれを使います。

Material settings on Babylon.js Editor v4.0.0beta2

画面左側のInspectorにマテリアルの設定一覧が表示されます。Diffuse、Bump、Specularなど、Unityを使っている方はすぐにわかると思います。

ここではcubeのDiffuse Colorをオレンジっぽく設定し薄めのテクスチャを貼りました。groundはテクスチャを貼って少し色を変えました。テクスチャは以下を使用させていただきました。

cube
www.pakutaso.com

ground
www.pakutaso.com

4. カメラを調整する

次はカメラの調整をします。今のところ、この調整が一番苦労しました。

まず、Preview画面では、Preview画面の表示 (= Editor Camera) と、ゲームを実行したときのCameraオブジェクトの表示 (= Cameraオブジェクト名称) を切り替えることができます。

Unityの場合、前者がScene View、後者が Game Viewですね。

Camera view settings on Babylon.js Editor v4.0.0beta2

これはPreview上のカメラ表示 (=Editor Camera) です。ここでは、ゲーム実行時のCameraはNew Free Cameraですので、左上の"New Free Camera"を選ぶと、ゲーム実行時のカメラ表示を再現できます。

今回はブロック崩しなのでGroundと垂直方向にカメラを設置した表示にしたかったので、調整してこのようにしました。

2D game view on Babylon.js Editor v4.0.0beta2

現時点では、少し問題があって調整が簡単ではありませんでした。

・Rotationの値がクォータ二オンのため調整がしづらい

・Preview表示側で位置を変えてしまうと、Roationの値がおかしくなる(操作ミスかもしれませんが、Editor再起動で直りました)

・New Free CameraのInspectorのRotationは小数点第一位までしか表示されないので、1.89→1.9となり、細かい値がわからない

もう少し整理してフォーラムにあげたり、修正できそうであればプルリクを出してみます。

5. キーボード操作できるようにする

キーボード入力はスクリプトで制御します。Assets / Scripts、Add Scriptを選択して、p_player.tsというスクリプトを作ります。 (入力欄では.tsの入力は不要です)

また、Cubeから作ったp_PlayerオブジェクトのInspectorのScriptの蘭で、src/scenes/scene/p_player.ts を選択しておきます。

Script example on Babylon.js Editor v4.0.0beta2

なお、あとでわかりやすいようにオブジェクトとスクリプトの名称をp_playerで統一しましたが、これは一致していなくても問題なさそうです。

p_player.tsのアイコンをダブルクリックするとVisual Studio Codeが開いて編集できるようになります。
テンプレート表示を消して、このように書きます。

gist.github.com

今回は、onStartとonUpdateは使っていません。@onKeyboardEvent([65], KeyboardEventTypes.KEYDOWN) という@で始まるものをつけた関数を書いておくことで、キーイベントを拾えるようなので使いました。
(この辺り、仕組みがよくわかっていませんので、わかったら追記します)

この書き方は、最初にworkspaceをつくるとき、Third Personal Shooterを選んだときに自動生成されるplayer.tsの中の記述を参考にしています。
キーコードの65は"A"、68は"D"です。今回は"A"キーで左移動、"D"キーで右移動できるようにしています。ここまで書いてからBabylon.js Editor左上の"Pley"ボタンを選択すると、別のウインドウが開いて実行できます。 (UnityのEditor実行に相当します)

また、Playを押した後であれば、ブラウザを開いて http://localhost:1338 にアクセスしても実行できます。

An example of keyboard operation on Babylon.js Editor v4.0.0beta2

なお、この時点のコードでは、"A"や"D"を押し続けると枠の外まで飛び出してしまいます。これは次回以降、衝突判定を入れることで対応予定です。

6. おわりに

以前紹介したBabylon.jsでゲームを作る方法と書き方が異なるので、手探りになりますが、とりあえず動きを作るところまではできました。次は物理エンジンやスコア表示などを作っていきます。