Unityに関連する記事です

 使用している武器の切り替えに合わせて、武器のゲームオブジェクト表示の切り替えを行う機能を実装します。



発展7 ー使用している武器のゲームオブジェクト表示の切替機能


<実装動画 ”雋錣2つのとき>
動画ファイルへのリンク


<実装動画◆”雋錣3つのとき>
動画ファイルへのリンク



設計


 ポイントは武器のモデル用のゲームオブジェクトと、実際に利用している武器の情報との整合性です。
例えば、ボタンを押すと武器のゲームオブジェクトを切り替えるとした場合、単純に1つずつゲームオブジェクトを切り替えてしまうと、
実際にプレイヤーの所持している武器の情報が切り替える順番に並んでないとしたら、つじつまが合わなくなって、
ゲーム内部の情報とゲーム画面に表示されるゲームオブジェクトとが合わなくなります。この部分の制御が重要です。

 この部分を上手く繋ぎ合わせるための設計を行い、処理を実装していきます。


武器のモデルを複数インポートする


 アセットストアなどから、任意の武器のモデルとして利用するゲームオブジェクトを複数インポートしてください。
weapon free といった単語で検索するといいでしょう。自分にとって必要な情報を見つけることは重要なスキルです。

 参考までに、無料のアセットのリンクを貼っておきます。

FREE Sci - Fi Shotgun
https://assetstore.unity.com/packages/3d/props/gun...
G28 Rifle
https://assetstore.unity.com/packages/3d/props/wea...
Free FPS Weapon - MP7
https://assetstore.unity.com/packages/3d/props/gun...
Free FPS Weapon - AKM
https://assetstore.unity.com/packages/3d/props/gun...


WeaponDetail スクリプトを作成する


 武器のゲームオブジェクトにアタッチし、その武器に、武器の番号を付与するためのスクリプトを作成します。
この武器の番号と、WeaponDataSO スクリプタブル・オブジェクトに登録されている武器の情報内の武器の番号とを照合して利用します。


WeaponDetail.cs

<= クリックすると開きます


 スクリプトを作成したらセーブを行います。


武器のモデルをプレイヤーの子オブジェクトとして配置し、設定を行う


 インポートした武器のゲームオブジェクトを、プレイヤーのゲームオブジェクトの子オブジェクトとして配置します。
インポートしたアセットの各フォルダ内に Prefabs フォルダがありますので、その中にあるゲームオブジェクトをドラッグアンドドロップして配置してください。

 こういった作業は今後、自分1人で考えて行えるようにしていく必要がありますので、インポートしたアセットの利用方法もどんどんと覚えていくようにしてください。

 配置した武器のゲームオブジェクトのサイズや向きは、ゲーム画面を見ながら適宜な大きさと向きに調整してください。
武器を切り替える前提ですので、少なくとも2つ以上の武器を配置してください。



 各武器のゲームオブジェクトに、WeaponDetail スクリプトを1つずつアタッチし、WeaponNo 変数に番号を設定してください。
この番号と WeaponDataSO スクリプタブル・オブジェクト内の武器の情報とを同期させます。
例えば、WeaponNo が 0 であれば、WeaponDataSO スクリプタブル・オブジェクト内の WeaponData の内、WeaponNo が 0 の武器の情報を利用できるようにします。

 同じ番号にならないように番号を採番してください。
武器が3つあるのであれば、WeaponNo は 0 〜 2 で設定してください。
その場合には、WeaponDataSO スクリプタブル・オブジェクト内のデータも、3つ以上用意し、WeaponNo には 0 〜 2 を採番してください。

 以下は参考例です。この通りである必要はありません。


ヒエラルキー画像



武器

インスペクター画像



Sceneビュー画像




武器

インスペクター画像



Sceneビュー画像




武器

インスペクター画像



Sceneビュー画像





WeaponDataSO スクリプタブル・オブジェクト インスペクター画像




 次に修正するスクリプトの機能により、最初に所持している武器のみを表示するように制御します。
そのため、この時点では、すべての武器が重なって表示されていても問題ありません。


Sceneビュー画像



 以上でこの設定は完了です。


WeaponChanger スクリプトを修正する


 武器モデルを交換する機能を WeaponChanger スクリプトに追加します。
また、ゲーム開始時に所持している武器のモデルを設定する処理も合わせて追加します。

 配列変数を作成し、武器のゲームオブジェクトにアタッチしている WeaponDetail スクリプトを登録できるようにし、
この情報を利用して、武器のゲームオブジェクトの表示/非表示の制御を行います。


WeaponChanger.cs

<= クリックすると開きます


 スクリプトを修正したらセーブします。


WeaponChanger ゲームオブジェクトの設定を行う


 新しく宣言した Weapons 配列変数に、プレイヤーの子オブジェクトとして配置した武器用のゲームオブジェクトを順番にドラッグアンドドロップしてアサインしてください。
アサインする順番は順不同で問題ありません。自動的に WeaponDetail スクリプトの情報が変数内に登録されます。

 アサインできない場合には、武器のゲームオブジェクトに WeaponDetail スクリプトがアタッチされていませんので、確認してください。


インスペクター画像


 以上で設定は完了です。


GameManager スクリプトを修正する


 現在はすべての武器のゲームオブジェクトがゲーム画面に表示されていますので、
ゲーム開始時の処理に、初期装備の武器モデルを表示する処理の命令を追加します。

 この処理は WeaponChanger スクリプト内にメソッドを用意してありますので、そちらを Start メソッド内で実行して制御します。


GameManager.cs

<= クリックすると開きます。


 スクリプトを修正したらセーブします。


GameManager ゲームオブジェクトの設定を行う


 新しく追加した WeaponChanger 変数に、WeaponChanger ゲームオブジェクトをドラッグアンドドロップしてアサインします。
自動的に WeaponChanger スクリプトの情報が登録されます。


インスペクター画像



 以上で設定は完了です。


ゲームを実行して動作を確認する


 ゲーム実行と同時に、複数の武器用のゲームオブジェクトの中から、初期武器のゲームオブジェクトのみを表示し、他の武器のゲームオブジェクトを非表示にする処理が実行 されます。
まずは、この処理が正常に動作しているかを確認します。動作しない場合には、武器用のゲームオブジェクトにアタッチされている WeaponDetail スクリプトの WeaponNo 変数を再度確認してください。


ゲーム実行時のインスペクター画像(初期武器以外のゲームオブジェクトが非表示になる)



<実装動画 ―藉武器以外のゲームオブジェクトが非表示になる>
動画ファイルへのリンク



 続いて、武器の切り替えボタンを押した際に、所持している武器に合わせて、武器のゲームオブジェクトが切り替わって表示されるかを確認します。
この際、正常に動作しない場合には、やはり、武器用のゲームオブジェクトにアタッチされている WeaponDetail スクリプトの WeaponNo 変数を再度確認してください。
この値と WeaponDetaSO スクリプタブル・オブジェクト内の武器のデータが照合できない場合には正常に動作しません。


<実装動画◆”雋錣2つのとき>
動画ファイルへのリンク


<実装動画 武器が3つのとき>
動画ファイルへのリンク



 以上でこの手順は終了です。

 => 次は 発展8 ーゲームクリア時のカメラ移動・回転演出機能ー です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます