ユーセンブログ

ゲーム開発に関することをたまに書きます

【Lumberyard】Script Canvas入門

Lumberyard Advent Calendar 2017 の10日目です。 今回はLumberyard1.11.0から追加されたScriptCanvasの基本的な使い方と機能の紹介をします。

ScriptCanvasについて

ScriptCanvasはLumberryard1.11から追加された目玉機能の一つで新しいビジュアルスクリプト((UE4のBPのようなスクリプト環境環境になります。 CryEngineからの流れでFlow Graphというビジュアルスクリプト環境はあったのですが今後はScriptCanvasに置き換えられていく流れになると思います。 使用感としては機能縮小版BPといった感じでした。 今回はScriptCanvasの紹介とキーの入力でオブジェクトを動かすところまでやりたいと思います。  

ScriptCanvasのエディタ基本機能

ScriptCanvasエディターの基本構成の説明です。 といっても基本構成はシンプルで、左にノードを一覧できるNode Palleteとノードをつなげたり、管理するCanvasがあるだけです。 この画面はtools>Script Canvsから開けます。

image.png

ノードの追加は左のビューからドラッグアンドドロップか右クリックから検索で行います。

追加のウィンドウ

基本構成以外の追加可能なウィンドウもあります。 追加可能なウィンドウはNode InspectorNode OutLinerの二つです。

image.png

右上のNode Inspectorはノードが設定している定数が見れるようです(今後増える?) 右下のNode OutLinerではキャンバスに配置されているノードを一覧することができる機能です。

コメント

ScriptCanvasではコメント機能もありました。 コメントの追加方法はノードと同じようにcommentを探して追加するか、右クリック時に出てくるAdd Commentで追加できます。 使用感としてはキャンバスに置けるメモといった感じでサイズの変更もできずUE4のようにグループ化するために使うといったことはできなさそうです。 f:id:k_tachiban:20171203201702p:plain

ScriptCanvasの作成

Script Canvasを作成するには

  • Tools>Script CanvasまたはEntiityのScriptCanvasからScript Canvasのウィンドウを開く
  • File>New Scriptで作成
  • Ctrl+SまたはFile>Saveで名前を付けて保存 成功すると.scariptcanvasファイルが作成されます。

ユーザーからの入力を取得する

それではいよいよScriptCanvasの記述方法についてです。 まずはユーザーからの入力を受け取るスクリプトから書いていきます。

Input Bindingの作成

Script Canvasで入力を行うためにはまず初めに.inputBindingsを作成する必要があります。 手順は以下の通りです。

  • Tools>Input EditorでInput Binding Editorを開く
  • File>Create New Asset>Input to Event Bindings Assetで.inputbindingsを作成
  • Input Event Groupsの横の+ボタンを押す
  • 作成されたUnspecified EventにEvent Nameを入力
  • 作成したイベントのEvent Generatorsの+をクリック
  • Input Device TypeとInput Nameをイベントに合わせて入力
  • 以降Input Eventに必要な数のイベントを作成する
  • 入力が終わったらSave&Closeで保存

WASDでのキー入力をこんな感じで登録しました。

image.png

これでScriptCanvasでキーの入力がイベント名で取れるようになります。

入力を取得する

それでは作成したInput Bindingを使ってキーの入力を取得します。 Inputの取得にはInput Handlerノードを使用します。

 image.png

Event Nameのところに先ほど作成したInput Bindingのイベント名を入力してその入力時にログを出します。 ログを出すにはUtilities>Debug下のLogノードとVariables>CreateVariablesのStringからStringのVariableノードを作成することで実現できます。

image.png

出力を確認する

出力を確認するためにEntityに作成したScriptCanvasをAddします。 今回は入力をするためScrpit Canvas ComponentのほかにInput Componentの追加します。

image.png

そのあとCtrl+Gでゲームを実行。 登録したDを押したら無事Consoleにログが出ました。

image.png

オブジェクトの移動操作

ユーザーからの入力が取れたところでオブジェクトを移動させてみます。 オブジェクトの移動はMoveEntityノードで行えます。

image.png

キーの入力に合わせてこんな感じで作成。

キャプチャ.PNG

f:id:k_tachiban:20171203195120g:plain

これで動くようになりましたがノードが少々汚いのでもう少し改善します。 具体的にはInputBindingを編集して、S(Down)、A(Left)を押したときに-1が帰るように変更し、ノードを減らします。

f:id:k_tachiban:20171203200044p:plain

イベントをmove_X、move_Yの二つに減らしてS、Aの入力時のEvent value multiplierの値を-1.0にしています。 こうすることでノードがすっきりしました。

f:id:k_tachiban:20171203200404p:plain

まとめ

現時点でのScript Canvasを簡単に使ってみた感触ですが機能も少なく、シンプルなビジュアルスクリプティングといえると思いました。 UE4のブループリントのようにがっつり作るのには向いていませんがシンプルな機能の実装や、短期間での高速な開発には向いているようにかんじました。 シンプルなものにはScript Canvas、複雑なものにはC++luaを使うといった住み分けができるので状況に合わせて何を使ってスクリプティングするのか選択して使うのがよさそうです。

参考

Getting Started with Script Canvas - Lumberyard

Script Canvas Tutorials - Lumberyard

script canvas - Game Dev Forum