【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から開けます。
ノードの追加は左のビューからドラッグアンドドロップか右クリックから検索で行います。
追加のウィンドウ
基本構成以外の追加可能なウィンドウもあります。 追加可能なウィンドウはNode InspectorとNode OutLinerの二つです。
右上のNode Inspectorはノードが設定している定数が見れるようです(今後増える?) 右下のNode OutLinerではキャンバスに配置されているノードを一覧することができる機能です。
コメント
ScriptCanvasではコメント機能もありました。 コメントの追加方法はノードと同じようにcommentを探して追加するか、右クリック時に出てくるAdd Commentで追加できます。 使用感としてはキャンバスに置けるメモといった感じでサイズの変更もできずUE4のようにグループ化するために使うといったことはできなさそうです。
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でのキー入力をこんな感じで登録しました。
これでScriptCanvasでキーの入力がイベント名で取れるようになります。
入力を取得する
それでは作成したInput Bindingを使ってキーの入力を取得します。 Inputの取得にはInput Handlerノードを使用します。
Event Nameのところに先ほど作成したInput Bindingのイベント名を入力してその入力時にログを出します。 ログを出すにはUtilities>Debug下のLogノードとVariables>CreateVariablesのStringからStringのVariableノードを作成することで実現できます。
出力を確認する
出力を確認するためにEntityに作成したScriptCanvasをAddします。 今回は入力をするためScrpit Canvas ComponentのほかにInput Componentの追加します。
そのあとCtrl+Gでゲームを実行。 登録したDを押したら無事Consoleにログが出ました。
オブジェクトの移動操作
ユーザーからの入力が取れたところでオブジェクトを移動させてみます。 オブジェクトの移動はMoveEntityノードで行えます。
キーの入力に合わせてこんな感じで作成。
これで動くようになりましたがノードが少々汚いのでもう少し改善します。 具体的にはInputBindingを編集して、S(Down)、A(Left)を押したときに-1が帰るように変更し、ノードを減らします。
イベントをmove_X、move_Yの二つに減らしてS、Aの入力時のEvent value multiplierの値を-1.0にしています。 こうすることでノードがすっきりしました。
まとめ
現時点でのScript Canvasを簡単に使ってみた感触ですが機能も少なく、シンプルなビジュアルスクリプティングといえると思いました。 UE4のブループリントのようにがっつり作るのには向いていませんがシンプルな機能の実装や、短期間での高速な開発には向いているようにかんじました。 シンプルなものにはScript Canvas、複雑なものにはC++やluaを使うといった住み分けができるので状況に合わせて何を使ってスクリプティングするのか選択して使うのがよさそうです。
参考
Getting Started with Script Canvas - Lumberyard