[Unity6] インプットシステム&プレファブ 2Dチュートリアル その2
注)[Unity6] インプットシステム&プレファブ 2Dチュートリアル その1
の続きになります。先にその1を閲覧ください。
■[Unity6] インプットシステム&プレファブ 2Dチュートリアル その1へ
【8.2DGameObjectのPrefab化】
簡単に説明しますが、Prefabとは、Objectの特定の情報、
「当たり判定」「物理制御」「プロパティー値」「子オブジェクト」
等を持ったまま、再利用可能なアセットとしておく事を言います。
Prefab化したObjectは複製したり、必要な場面で作成したり、
必要無くなったら削除したり出来ます。
例えばシューティングゲームの弾や敵や
ステージのオブジェクト、木や障害物の配置等に使用できます。
今回簡単に、上記で作成したPLATER(GameObject)を
Prefab化します。
②Unity画面のHierarchyにある、PLAYER(GameObject)を
UnityProiject内 \Prefabe フォルダにドラッグ&ドロップすると、
\Prefabフォルダに、PLAYER(GameObject)のPrefabが作られます。Hierarchyにある、PLAYER(GameObject)は削除します。
削除方法は、PLAYER(GameObject)にカーソルを合わせ、
右クリック→Deleteを実行すると削除されます。Delキーでも消えます。
Prefab化したObjectは、プログラムから呼んだり、
Unity Sceneウィンドにドラッグ&ドロップで配置する事もできます。
Prefab化Object内で、Prefab化Objectを呼ぶ事も出来ます。
【9.空のObject・プログラムファイル作成】

今回の説明では、空のObjectを作成しここからPLAYER(Prefab)を、
呼び出してみたいと思います。
Unity画面、Hierarchyで右クリック → Create Empty を実行すると、
空のGameObjectが作成されます。Inspectorで、リネーム(MainGameLoop)し、PositonをXY共に0に。
空のGameObjectの完成です。
MainGameLoopは、実行時にプログラムを動かすだけの
Objectになります。今回は作りませんが、
オープニング、タイトル画面、ショップ画面、オプション画面、
ゲーム画面、等への移行プログラム実行Objectとなります。
なのでMainGameLoopと名付けました。
[プログラムファイル作成方法]

Proiject内 \Programフォルダで、
右クリック→Create→MonoBehaviourScript を実行。NewMonoBehaviourScriptが作成されます。
NewMonoBehaviourScriptをリネーム(MainGameLoop)します。
もう一つNewMonoBehaviourScriptを作成し、
PlayerControlにリネームします。後程、PLAYERを動かす為に使用。ファイルの拡張子はcsになりますので、
MainGameLoop.cs PlayerControl.csと記載します
【10.Component・AddComponent】
コンポーネントとは、GameObjectに追加される機能や部品の事で、
GameObjectの動作や見た目を定義します。
GameObjectと言う箱に、部品(Component)を入れるイメージですかね
/Prefab/PLAYERのinspectorにSpriteRendererがあると思いますが、
これもcomponentになります。スプライトを表示するコンポーネント。
その他に「当たり判定」「物理演算」「inputsystem」や
上記で作成したプログラムもObjectのコンポーネントになります。上記プログラムを各GameObjectへAddComponentしていきます。

MainGameLoop Object の inspector 内のAddComponentを選び、
MainGameLoop.csを設定。PLAYER Object(Prefab)のの inspector 内のAddComponentを選び、
PlayerControl.csを設定。PLAYER Object(Prefab)のの inspector 内のAddComponentを選び、
PlayerInputを設定し、PlayerInputの項目、
ActionsにMainGameInput
DefaultMapにPLAYERを設定します。【6.】で作成した
MainGameInputをコンポーネントします。
これで、inputsystemをPLAYERObject(Prefab)に定義しました。プログラムFileをinspector内にドラッグ&ドロップしても設定できます。
【11.PLAYER表示・WASD移動Program】
MainGameLoop.csではPLAYERの表示処理
PlayerControl.csでは、PLAYERの移動処理
のプログラムを書いていきます。
[MainGameLoop.cs]

⓵でPLAYER(Prefab)を受け取るGameObuject型の変数
PLAYER_OBJを用意。PLAYER(Prefab)の受け取り方は別途。②でInstantiateに、PLAYER_OBJ、PLAYER_POS(表示座標)
Quaternion.identity(無回転)を渡し表示Instantiateは、start() 内で処理しており、
start()は,MainGameLoop Objectが有効化された時、
一度だけ行われる処理になります。注意点として、Instantiate()を、制御してないループ処理や
void Update()に定義すると大量表示され最悪フリーズします。
[PlayerControl.cs]

⓵using UnityEngine.InputSystemを定義し
プログラムで、InputSystemを使用できるようにします。②ActionのMOVEを受取る変数定義
ACTION_MOVE変数は、ActionMapsの"PLAYER"から
Actionの"MOVE"を取得します。③PLAYER(Object)のComponentを取得する処理
Objectに定義しているComponentをプログラムから
参照する場合、GetComponentを使用します。④ActionのMOVEを受け取る。
⑤start()内[毎フレーム処理]で最新の値をポーリングします
Actionの"MOVE"で設定した2DVector内のUP/DOWN/LEFT/RIGHT
で、定義したキーの状態が、moveDirection変数に渡されます。⑥PLAYERの移動処理
PLAYER Objectの座標(X、Y)に
"moveDirection"、"PLAYER_SPEED"、"Time.deltaTime"
を掛けた値を、加算しています。
MainGameLoop.csとPlayerControl.csへのプログラム記入が、
終わったら、ファイルをセーブしてUnityに戻ります。
【12.PLAER Prefabセット】

MainGameLoopオブジェクトのInspector、MainGameLoop.cs
にPLAYER_OBJが表示され、空白にPrefab化したPLAYERを定義。
定義方法は、空白右の+を押してPLAYERを検索して定義します。
Prefab化PLAYERを空白にドラッグ&ドロップしても定義できます。
これですべての準備が出来ましたので実行確認していきます。
【13.Unity再生ボタン・BuildAndRun】

Unityの中央上部にある再生ボタンを押したら、
UnityのGameウインド上で実行されます。
キーボードのWASDでPLAYERが移動しますので確認ください。
※もし動かない場合は、Gameウインドがアクティブに、
なっていないので、クリックして見てください。
続いてWEBブラウザでの実行を行います。
[Webブラウザ実行方法]
まず、build用フォルダを作成します。
\2D_PLAYER_TEST_01 直下に\Buildフォルダを作成します。
\Build 内に \WEB_TESTを作成します。
※必要なければ無視して下さい。

UnityメニューからFile -> Build ProFilesを起動
PlatformsがWeb [Active]になっているか確認。
BuildAndRunボタンをクリックし、
フォルダの選択が出たら、 \WEB_TESTを選んでビルドが開始されますビルドは、PCスペックによっては、時間がかかります。

上記の様に、ブラウザに表示されキーボードのWASDでキャラが動いたら
完了となります。
【14.InputSystemへのデバイス追加】


ProjectSettingsにてInputSystemデバイス追加、ここではGAMEPAD追加
InputActionEditorで追加したデバイスの割り当て、
2DVectorにGamePadの十字キーと左スティックを設定すると、
GamePadでもPLAYERを簡単に動かせます。
■最後に
不明瞭な箇所等、多々あったと思いますが最後まで読んでいただき
誠にありがとうございます。
[Unity6] インプットシステム&プレファブ 2Dチュートリアルの
動画版をYoutubeにUPしております
Note版と多少説明の順番や動いている説明もありますので
宜しければご確認ください。
【Youtube】
【Unity】InputSystem&Prefab<2Dチュートリアル>
