落ちている武器を拾ってプレイヤーに持たせるということを実装したかったので、下記の手順で実装した。
手順
- プレイヤーと落ちている銃が衝突したらタグで判定してTrueの場合に処理を行う
- 銃を拾った時点のプレイヤー側の空オブジェクト(親子関係、銃の位置を指定する用)の位置を取得
- 落ちている銃自体はDestroyで消して、プロジェクトのRecourcesフォルダから銃のオブジェクトをロード
- ロードした銃を2で取得した位置に配置
- 銃の向きを調整
- 銃を2の子の関係にする
プレイヤー側の実装
C#
private void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "smallgun")
{
//Playerの子としてアタッチしてあるガンを持つようの空オブジェクトを取得
GameObject handgrip = transform.FindChild("BulletRuncher").gameObject;
//プロジェクトに作ったResourcesフォルダ内にある"SmallGun"オブジェクトをロードして、上記の空オブジェクトの位置に置く
GameObject weapon = Instantiate(Resources.Load("Prefabs/SmallGun"), handgrip.transform.position, handgrip.transform.rotation) as GameObject;
weapon.transform.Rotate(0, 180, 0); //必要に応じてガンの位置を調整
weapon.transform.Translate(0, -1, 0); //必要に応じてガンの位置を調整
weapon.transform.parent = handgrip.transform; //プレイヤー側の空オブジェクトの子にガンを設定
bulletruncher.GetWeapon();
}
}
落ちている武器側の実装
C#
private void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "Player") //プレイヤーが武器を取ったら消す
{
Destroy(gameObject);
}
}