見出し画像

【Unity】InputSystemとスクリプト【第2回】


何かと敬遠されがちinputsystem

では前回のnavimeshベースのプレイヤーを動かすスクリプトを作成していきます
最近はすっかり定着したinputsystem
これを導入するまではunityではinput managerというシステムで入力を管理していました5年前ごろから?(正確にいつくらいかは覚えていませんが)
様々なプラットフォームの入力に対応するためにリリースされた入力システムですが、当時は相当評判が悪く扱いにくいシステムでしたが
最近はネット上に参考文献が充実したり、公式も動画を出したりして
大分情報が増えました
私自身も複数のアプリで使っていくうちに大まかなところは理解したので
inputsystemを採用してます

アクションマップとイベントの登録で入力を受け取る

inputsystemはまずアクションマップを設定するところから始まります
デフォルトである程度アクションは登録されていますが
今回は一から設定しなおします、わざわざ必要はないのですが
挙動にエラーがでると後々、腹辰徳なので自分でやっちゃいます
アクションマップを作る前にある程度プレイヤーのできることをまとめておいた方がいいと思います、もちろん後から追加、削除、編集できますが
頭の中が散らかる前に仕様を可視化しておいた方が安心、安心

playerInput

あとはスクリプトを少し書くだけ

基本の構想は固まったので、スクリプトを書いていく
playerControllerスクリプトを作成して記述していく
難しく考えない とても簡単なお仕事
とりあえず移動情報を記述
InputSystemの書き方はいくつかパターンがありますが
今回はOnMove(InputAction.callbacContext.obj)として
入力があった場合にvar value = obj.ReadValue<Vector2>();
とvalueにVector2の入力情報を受け取る、あとは
horizontal=value.x
vertical=value.y
と割り当てるだけ
update関数に移動に関する記述をすればスクリプトは完成。
そしたらプレイヤーのオブジェクトにアタッチしてイベントに割り当てる
進行方向に合わせて向きを変える内容もこのクラスに設計する
とりあえずこれでMoveに関する処理はいい感じになっていく
ついでに進行方向を向くスクリプトとアニメーターに”Speed”の値を渡す
スクリプトもセットアップしておく

OnMove()
Update()

話は変わるけどPlayerControllerクラスって長くなる派?機能分ける派?

大規模なチームで制作したことないので余りわからないんですけど
自分パラメータなんかの機能やプレイヤーのSEとかまでplayerControllerクラスに設計しちゃうので最終的にめちゃくちゃ長文になっちゃうんですよね
インデックスや階層を分けて書いているのでそんなに煩雑にはならないのですが、初めて見る人がいると「おー」って声出ちゃいそうな行数になるんすわ
かと言って余りC#のクラス作りすぎるの好きじゃないのでplayerの操作に関する項目はまとめちゃいます
個人・小規模チームの制作がほとんどですし
プログラミングはほぼ自分なんで今まで不具合はなかったのですが
もう少し大きな組織で作るとこの辺のところも決まりとかあるんだろうね

何はともあれこれで入力を受け付けてplayerが挙動する

アクションマップの設定、スクリプトの制作、イベントの登録
とりあえずこの三つさえ押さえればあっという間にキャラクターは
プレイヤーの意のままに動く
ポイントは何をさせたいかを明確にまとめること、ボタン配置も
この段階で考えておくといいと思う
制作しているゲームのジャンルにメジャーなタイトルがあるならば
そのゲームのボタン配置を意識して制作すると、プレイしてくれる人も
すんなり対応してくれるはずだ(チュートリアルはまた別の回で)
なにせ3Dアクションゲームなので、シームレス入力を受け付けて
爽快なアクションができるような設計でないと最悪だよね
テストプレイで挙動を確かめるのがとても大切かもね

次回はCinemchineVirtualCameraの設定をしていきます


この記事が気に入ったらサポートをしてみませんか?