## GASとは [game aimation sample](https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016)はepicgamesが提供しているassetです。 まずはこれを使ってキャラクター(character)を動かしてみましょう。 ## level(map) 1. `/Content/Levels/DefaultLevel`を開きます。 2. 再生ボタンを押します。 3. ゲームがプレイできます。 |key|en|ja| |---|---|---| |w,a,s,d|move|移動| |space|jump|ジャンプ| |space|sprint|ダッシュ| |ctrl|walk|歩く| |c|crouch|しゃがむ| |マウススクロール|camera|カメラ| ボタンに乗るとキャラを切り替えることができます。 レベル(level)はマップ(map)とも呼ばれます。プレイ(play)する場所を作ります。 特にボタンが重要です。tipsを確認しましょう。 - https://www.youtube.com/watch?v=IqHrhcA7Rsk `/Content/Levels/DefaultLevel`を右クリックして`参照ビューア`を選択してみます。どのファイルを参照しているかわかります。 ## BP characterは`/Content/Blueprints/CBP_SandboxCharacter`で動かしています。このファイルを開いて編集してみましょう。 1. `EventGraph`というノードが記述されている場所(画面中央)で右クリックし、`Debug Key 1`を追加します。 2. Releasedというピン(pin)から`Print String`を追加します。 3. ゲームを再生します。 4. キーボード(keyboard)の`[1]`を押すと、画面に`Hello`が表示されます。 これがbp(blueprint)でゲームを作る要領になります。 ## ABP characterの動きは`/Content/Blueprints/ABP_SandboxCharacter`で設定されています。 ## input まずkeyがどこで設定されているのかと言うと、`/Content/Input/IMC_Sandbox`で設定されています。 例えば、`/Content/Input/IA_Aim`をコピー(copy)して、新しく`IA_One`を作ってみましょう。それを`IMC_Sandbox`で読み込んで`[1]`に割り当てます。 次に、`IA_One`を先程の`CBP_SandboxCharacter`にドラッグ&ドロップ(D&D)します。 すると`EnhancedInputAction IA_One`という赤いノードが作成されたと思います。`Debug Key 1`を削除して代わりにつなぎます。色にも意味がありますが、そのうちわかってくると思います。 ゲームを再生してみると先ほどと同じkeyで動きます。 ### variable(var) ここから本当に重要なことを書きます。最初はわからないかもしれませんが、最後まで読んでまた来ると、わかるようになっているかもしれません。 1. フォルダの`/Content/Blueprints/`で右クリックして、ブループリントクラス、`GameInstance`を作り、名前を`GM_DefaultConfig`にします。 2. `設定 -> プロジェクト設定 -> マップ&モード`の`Game Instance:GameInstance Class`に`GM_DefaultConfig`を読み込みます。 これを開いて、変数のところで`UserTest`という名前で`string`型の変数を作ります。コンパイル(compile)してください。デフォルト値は`World`とでも入れておきましょう。 次に、`/Content/Blueprints/CBP_SandboxCharacter`を開いて、EventGraphで右クリックし、`Cast To GM_DefaultConfig`を選択します。 インプット(input)のpin(ピン)にあるObjectには`Get Game Instance`をつなぎます。そして、アウトプット(output)の青線は`Get UserTest`と検索し、それを`Print String`につなぎます。 さて、こにkeyを設定して再生すると`World`と表示されるはずです。 特に重要なのが`変数の型`です。種類もそうですが、変数の型の右側にある色アイコンをクリックしてみると、たくさんの形式があることがわかります。 - 単一 - 配列 - 設定 - マップ 配列を使ってみましょう。`UserTestList`という名前で`string`の配列を作成します。 ここで、デフォルト値に追加できることに気づくはずです。 例えば、単語を3つ追加してみます。 - [0]ai - [1]burst - [2]can `Cast To GM_DefaultConfig`から`Get UserTestList`を引っ張り出し、`Length`につなげます。それをprintしてみると、`2`と表示されるはずです。 `length(len)`はその配列に追加された数を知ることができます。 では、全部の値を取り出すため`for`を書きましょう。`UserTestList`から`For Each Loop`を伸ばして`Loop Body`からprintにつなぎます。値は`Array Element`から取ります。 もし文字列をつなぎたいなら`Append`が使えます。 変数にはObjectをいれることもできます。たくさんのObjectを入れておき、`Find`で検索して取り出すこともできます。 では、characterを全部まとめて検索できる変数を作ってみます。 名前は`UserCharacterObj`でstringを選択し、マップを選択します。右側のマップは`オブジェクト(object)`と検索し、object参照を選択します。 ```sh str obj --- --- ``` `cbp character`と検索し、characterのcbpを入れていきます。名前はわかりやすいものにしてください。例えば、`manny`, `quinn`など。 では繋いでいきます。 ```sh [Get Game Instance] --> [Cast To GM_Defaultconfig] --> [UserCharacterObj] --> [Find(manny)] --> [Get Object Name] --> [Print String] ``` 基本的にこれを利用して、他のBPと値をやり取りすることになります。例えば、`ABP_SandboxCharacter`で条件を満たしたとき実行してほしいアニメーション(anim)があったとします。 この場合、まず`GM_DefaultConfig`の変数で`UserCharacterAnim`をboolean型で作り、実行してほしいタイミングで`CBP_SandboxCharacter`に書いた`Cast To GM_Defaultconfig`から`UserCharacterAnim`を`true`に変更します。`Set UserCharacterAnim`で検索してください。そして、ABPには`UserCharacterAnim`がtrueならanimを再生する処理を書きます。 ## function(func) 次は関数です。関数は簡単で、何度も繰り返す部分を再利用可能な形で残します。それが関数です。 新しい関数を作ってみましょう。左バーの関数(+)を押せば作成されます。名前は`FuncTest`にします。 関数を表す紫色のボックス(box)を選択した状態でinputとoutputの見てもらって、inputにboolという名前でboolean型を作ります。outputにはstrという名前でstring型を作ります。 処理の内容はboolがtrueなら`[yes]`というstringを出力し、falseなら`[no]`にします。 確認してみましょう。`[9]`を押すと`[yes][no]`が表示されます。