【unity】キャラクターにアイテムを持たせる
2022/10/24
Unity version : 2021.1.2.7f1 Personal(日本語化済み)

はじめに

アクションゲームのキャラクターがアイテムを持てるようにしてみます。
参考文献(1)が手掛かりになりました。

実装までの流れ

1.ボーンにオブジェクト画像を表示できるようにする

持たせたい手のボーンに空のオブジェクトを追加し"Equip"と名付けます。
(オブジェクト名は問いません。)

Equip には新しいスクリプト"ChangeEqip"を追加します。

2.ChangeEquip スクリプト

まずスクリプトの一例です。

スクリプトの解説をしていきたいと思います。

変数宣言部分~Start()関数

  • 武器オブジェクトを格納する変数について weapons を [SerializeField] を使って定義します
  • 現在の武器番号を equipment とし、前回の武器番号を equipment_old とします
  • equipment の数値は weapons の番号です
  • Start() 関数ではGameObject型の playerObject を取得し Player クラスを取得します
  • 表示するスプライトのコンポーネントを取得します。今回は SpriteRenderer です
Update()関数
  • Player の武器番号を equipment に格納します
  • 現在の武器番号と前回の武器番号が違った場合、武器の有無を確認します
  • 武器を持った場合、武器のインスタンスを作成します
  • 過去の武器番号を現在の武器番号で上書きします
InstantiateWeapon()関数 : 武器のインスタンスを作成する関数
  • weapons の equipment 番号にセットした武器をインスタンス化します
  • weapon は Equipmentオブジェクトの子オブジェクトとして自動的に配置されます。
  • 武器画像の2重表示を避けるために weapon オブジェクトの画像のスケールを 0 にします
  • ChangeEquip のスプライトに weapon の画像を当てます
  • スプライトの表示位置(ローカル座標系)は weapon のスクリプトから取得します
  • プレイヤーに現在の武器番号を伝えます
DestroyWeapon()関数 : 武器を破棄するための関数
  • 作成した武器(weapon)のインスタンスを破棄します
  • weapon は Equipmentオブジェクトの子供なので GetChild(0) を使い指定します

3.プレハブ化した武器オブジェクトをWeaponに関連付ける

プレハブ化した武器オブジェクトをインスペクターのWeaponにドラッグ&ドロップします。
(直接指定も可能です)

ここまででようやく武器を持ったように見せることができます。

オブジェクトの表示順序について

実際にプレイしてみると、プレイヤーと武器の表示順序がおかしい場合があります。
スプライトの表示順はインスペクターの追加設定から「ソートレイヤー」と「レイヤーの順序」で設定できます。
自キャラのスプライトの表示順序を見ながら調整すると良い感じです。

終わりに

今回は武器を手に持たせてみました。
ここの例は2Dゲームの場合でしたが、参考文献では3Dで扱っているので宜しければそちらも参考にしてはいかがでしょうか。
スクリプトの説明が多くなりましたが、ここまで閲覧していただき本当に有難うございました。

参考文献

1) Unityで装備している武器をキー操作で切り替えられるようにする機能 (かめくめ氏)
https://gametukurikata.com/program/changeweapon

ページトップ