-1
武器を切り替えると、古い武器は破壊されないので、画面上に2つの機能する銃があります。私はdestroy(currentWeapon)を使用してgameobjectを破壊しようとしましたが、運がありません。また、私は、銃がインスタンス化されるプレイヤープレハブに取り付けられた空のgameobjectを使用します。問題は2つの異なるゲームオブジェクトが必要なため、異なる銃が異なる位置に座ることができるということです。私は2つの空のゲームオブジェクトを作ったが、ガンが切り替わったときにそれらを切り替える手助けが必要だ。(ユニティ)武器切り替え、切り替え後の前の武器を破壊する
すべてのヘルプは大歓迎です!
using UnityEngine;
using UnityEngine.Networking;
public class WeaponManager : NetworkBehaviour {
[SerializeField]
private string weaponLayerName = "Weapon";
[SerializeField]
private Transform tecweaponHolder;
[SerializeField]
private Transform awpweaponHolder;
[SerializeField]
private PlayerWeapon primaryWeapon;
[SerializeField]
private PlayerWeapon secondaryWeapon;
private PlayerWeapon currentWeapon;
private WeaponGraphics currentGraphics;
void Start()
{
EquipWeapon(primaryWeapon);
}
void Update()
{
if(Input.GetAxis("WeaponSwitch") >0f)
{
EquipWeapon(secondaryWeapon);
Debug.Log("switched weapon");
}
else if (Input.GetAxis("WeaponSwitch")<0f)
{
EquipWeapon(primaryWeapon);
Debug.Log("switched weapon back");
}
}
public PlayerWeapon GetCurrentWeapon()
{
return currentWeapon;
}
public WeaponGraphics GetCurrentGraphics()
{
return currentGraphics;
}
void EquipWeapon (PlayerWeapon _weapon)
{
currentWeapon = _weapon;
GameObject _weaponIns = (GameObject)Instantiate(_weapon.graphics, tecweaponHolder.position, tecweaponHolder.rotation);
_weaponIns.transform.SetParent(tecweaponHolder);
currentGraphics = _weaponIns.GetComponent<WeaponGraphics>();
if (currentGraphics == null)
Debug.LogError("No WeaponGraphics component on the weapon object: " + _weaponIns.name);
if (isLocalPlayer)
Util.SetLayerRecursively(_weaponIns, LayerMask.NameToLayer(weaponLayerName));
}
}
UPDATE:あなたが実際に古い(現在の)武器を破壊しない、あなたのコード内のどこにも
私はちょうどそれがあなたの武器が設定されているためだ –
「UnityEngine.Object.Destroy(UnityEngine.Object)のための最良のオーバーロードされたメソッドの試合は、いくつかの無効な引数を持っている」だった、発生したエラーを確認するために、再度コードを実装GameObjectsを使用する代わりに、独自のクラスを使用して不思議にアップします。 'currentWeapon'を破壊するのではなく、親を破壊する。 – Soviut
私は 'tecweaponHolder'を親にしている武器の子インスタンスを削除する方法を示すコードを更新しました。 – Soviut