質問: "Missile:" + shotCount; } } ### 試したこと 武器の切り替えについて調べた。
回答: 私が思いついた方法を書きます。なお、PlayerMissileはPlayerScriptと同じGameObjectにアタッチされているものと考えています。 1. **ミサイルと同じように、通常弾を表すコンポーネント(PlayerBullet等)を作る。** ミサイルと通常弾を同じ”武器”として扱いたいので、ミサイルがコンポーネントとしてPlayerScriptから分離されているなら、通常弾も同じように作ります。StartやUpdateで何もやることがなければ書かなくても構いません。 2. **武器を表すインターフェイス(IWeapon等)を作り、これに発射を表すメソッド(Fire等)を定義する。** これらの武器を同じように扱えるようインターフェイスを定義します。これらの武器は”撃つ”ことができるので、この操作をメソッドとして定義します。引数などは必要に応じて定義してください。 3. **PlayerBulletおよびPlayerMissileにIWeaponインターフェイスを実装する。** ここが重要です。PlayerBulletとPlayerMissileにIWeaponインターフェイスを実装し、それぞれのFireメソッドに、PlayerScriptの通常弾とPlayerMissileのミサイルの発射処理周り(Instantiate周辺)を移動します。キーの判定は不要です。PlayerMissileのUpdateは何もしなくなります。 4. **PlayerScriptに現在装備中の武器を表す変数(currentWeapon等)を定義する。** PlayerScriptにIWeapon型の変数を定義します。先程作った2つの武器は両方このインターフェイスを実装しているので、この変数には両方のコンポーネントを入れることができます。同時にはどちらか一つしか入りません。 5. **PlayerScriptにプレイヤーが装備可能な武器の一覧を表す変数(Weapons等)を定義する。** PlayerScriptのStart等で、PlayerBulletコンポーネントとPlayerMissileコンポーネントを取得しておきます。anim等と同じ要領で良いです。型はIWeaponでもPlayerBulletなどでも良いですが、前者であればコレクションが使えます。 6. **各種初期化** PlayerScriptのStart等で初期のcurrentWeaponをWaponsから設定します。 7. **武器を変更** 適当なキーを押したタイミングで、currentWeaponにWeaponsのどれかを代入します。 8. **撃つ** 適当なキーを押したタイミングで「currentWeapon.Fire()」で撃てます。 こんな感じでしょうか。これで上手く動けば、武器を増やすことも簡単にできます。動作確認ができていないので、不備や不都合があれば返信してください。