Saturday, December 8, 2018

Amazon Lumberyard学習メモ:ゲーム実行中にオブジェクトを生成する

今回から、公式サイトのシューターを作るチュートリアルを元に色々分かった事を書いていきます。

参考資料:Script Canvasチュートリアル:エンティティを生成して衝突を検出することによるターゲットの射撃
Spawnerコンポーネントのリファレンス

さて、シューターを作るには銃・弾・目標物が必要です。
まずは弾の作成です。

Entityを作成します。


作成したEntityに名前を付けます。今回はTest_Bullet_00という名前にしました。


このEntityに、Add Componentで以下のコンポーネントを追加します。
・Mesh
・Mesh Collider
・Rigid Body Physics
Meshコンポーネントにはシステムに用意されているprimitive_sphereをロードしました。

なお、Rigid Body Physicsとコリジョンが適用されたオブジェクトであれば構成は何でも良いので、Primitive Colliderを使っても構いません。

弾となる球が出来ました。


このEntityをEntity Outlinerで右クリックし、メニューからCreate slice...を実行します。


ファイルブラウザーが表示されますので、任意の場所に.sliceとしてセーブします。
セーブが終わるとEntity Outliner上での表示がこんな感じに変わります。


Tools - Asset Browserを実行します。


Asset Browserで先程セーブしたSlice(.sliceファイル)を右クリックし、メニューからSet Dynamic Sliceを実行します。


以上で、とりあえず弾として使えるオブジェクトが用意出来ました。
セーブが終わったSliceはEntity Outlinerから削除します。


次は銃の作成です。(ただし銃といっても今回は弾を生成する機能だけのオブジェクトで、メッシュは載せません。)

新規Entityを作成します。


名前を付けます。今回はGunという名前にしました。


このEntityに以下のコンポーネントを追加します。
・Input
・Script Canvas
・Spawner


今回InputにはゲームパッドのAボタンを割り当て、Event Nameはfireと付けました。


Script Canvasのスクリプトは以下の様にします。

これで、ゲームパッドのAボタンを押すとオブジェクトが生成される様になります。

生成するオブジェクトはSpawnerコンポーネントで指定します。
SpawnerコンポーネントのBrowseアイコンをクリックしてファイルブラウザを出し、先ほどセーブした弾のSliceファイルをロードします。


ロードされました。


では、Play Gameでテストしてみます。

ゲームパッドのAボタンを押すと弾のSliceが生成されました。

生成が上手くいったので、次は弾を飛ばす処理を作ります。
Script CanvasでSpawnerノードとSet Velocityノードを使い、下図の様にスクリプトを作成します。


このスクリプトは以下の様に動きます。

ゲームパッドのAボタンを押すとfireイベントが発行され、それに従ってInput Handlerが処理を開始し、SpawnノードがEntityを生成します。
Spawnerノードを使うと生成されたEntityがどれなのかが分かるので、Set VelocityノードでそのEntityに速度を与えます。

Play Gameでテストです。

弾が飛ぶ様になりました。

もし飛ばなければ、下図の様にDelayノードを挟んで、生成後にわずかに時間を置いてから速度を与える様にします。この図ではTimeを0.03にしていますが、場合によっては何故か0でも上手く行く事があります。


次回は目標物を用意して弾をぶつけてみます。

No comments: