前回から引き続き、今回の記事を書くにあたってこちらのサイトの記事を参考にさせて頂きました。
PaperSloth’s diary
Lumberyard ScriptCanvasで簡単なゲームロジック作成
前回までと同様、使用しているLumberyardのバージョンは1.15.0.0です。
今回は、今までの復習的に一通りの作業をやってみます。細かい手順はこれまでの記事を参照して下さい。
今回は移動という事で、新たに歩きモーションを作りました。移動値は無しです。つまり、その場で足を滑らせながら足踏みするモーションです。
これを以前Animation Editorで作ったMotion Setに追加します。
Anim graphのState Machineにも追加します。Anim graph上での構成は他のモーションと全く同じです。
このモーションはAnim graphのSelectパラメータを4.0にした時に再生される様にしました。
Input BindingとScript Canvasのスクリプトも、他のモーションと同様に設定します。
Input Bindingでのボタンアサインは、ゲームパッドのLスティックにしました。
このInputに対応するスクリプトは、今まで作った他のモーションのスクリプトをコピーして作ります。今回はAnim graphのSelectパラメータを4.0にした時にモーションが流れる設定にしました。
これでとりあえず、ゲームに入った時にLスティックを傾けると歩きモーションが流れる様になりました。ただし移動の処理をまだ作っていないので移動はしません。
続いて移動のシステムを作っていきます。
まずは回転です。
Input BindingでSpinというイベントを作り、ボタンアサインをゲームパッドRスティックのX方向の傾きにします。
スクリプトはスティックをHoldした時に動く様にし、値を(そのままだと回転が速すぎるので)0.1倍し、その値でキャラモデルのエンティティ"LowPolyMan"をZ軸回転させます。
こちらが作成したスクリプトです。
これで、Rスティックを横方向に傾けるとそちらの方向にキャラクターが回転する様になりました。
次に、これに移動処理を追加します。移動にはMove Entityというノードが用意されています。これは、与えられた値を速度としてエンティティを移動させる物です。速度はワールドXYZ各軸で指定します。
このノードにゲームパッドのスティックのXとYの傾きをアサインすれば、スティックの傾きに応じてX軸とY軸方向に動く様になります。
このやり方をベースに、先程作った回転処理を組み込んだスクリプトを組みます。具体的には、
1)回転によって生じた角度を取得し、単位ベクトルを作る
2)スティックのXとYの傾きの値それぞれに上記ベクトルを掛け算し、得られた値をMove Entityに入力する
…というスクリプトを作ります。
こちらが完成した移動/回転スクリプトです。先程の回転スクリプトの後ろに単位ベクトルを取得する部分を追加し、その数値をVariable(変数)に入れ、その下にある移動処理に渡しています。
黄色いノードが値を受け渡す為のVariable(変数)です。Script Canvas右下のCreate Variableで作成します。ここではNumber型を使っています。
Input BindingにはMoveXとMoveYという二つのイベントを追加作成しました。
ではPlay Gameでテストです。
歩きました!
(実はこのスクリプトでは、キャラクターを最初に一度回転させる必要があります。スクリプト上でVariableに初期値を設定していないので、まず回転させないと値が入らないんですね。)
カメラをキャラクターの階層下に置けば、TPSの様な操作になります。カメラはEntityにCameraコンポーネントを追加して作成します。
以上で、7回に渡って書いてきました「Lumberyardで自作のキャラクターモデルを動かしてみる」は一旦終了です。
「横や後ろ移動の時も同じ歩きモーションだよな」とか「斜め45度移動の時は√2倍の速度になってるのでは」とか色々ありますが、その辺りはまたの機会に挑戦しようかと思います。
お疲れ様でした!
No comments:
Post a Comment