2016-11-13 5 views
-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:あなたが実際に古い(現在の)武器を破壊しない、あなたのコード内のどこにも

答えて

2

\t private Transform currentHolder; 
 

 
\t void Start() 
 
\t { 
 
\t \t currentHolder = awpweaponHolder; 
 
\t \t EquipWeapon(primaryWeapon); 
 
\t } 
 
\t 
 
\t void Update() 
 
\t { 
 
\t \t if(Input.GetAxis("WeaponSwitch") >0f) 
 
\t \t { 
 
\t \t \t currentHolder = tecweaponHolder; 
 
\t \t \t EquipWeapon(secondaryWeapon); 
 
\t \t \t Debug.Log("switched weapon"); 
 
\t \t } 
 
\t \t else if (Input.GetAxis("WeaponSwitch")<0f) 
 
\t \t { 
 
\t \t \t currentHolder = awpweaponHolder; 
 
\t \t \t EquipWeapon(primaryWeapon); 
 
\t \t \t Debug.Log("switched weapon back"); 
 
\t \t } 
 
\t }

void EquipWeapon(PlayerWeapon _weapon) { 
    foreach (Transform child in tecweaponHolder) { 
     Destroy(child.gameObject); 
    } 

    currentWeapon = _weapon; 

    // ... 
} 
+0

私はちょうどそれがあなたの武器が設定されているためだ –

+0

「UnityEngine.Object.Destroy(UnityEngine.Object)のための最良のオーバーロードされたメソッドの試合は、いくつかの無効な引数を持っている」だった、発生したエラーを確認するために、再度コードを実装GameObjectsを使用する代わりに、独自のクラスを使用して不思議にアップします。 'currentWeapon'を破壊するのではなく、親を破壊する。 – Soviut

+0

私は 'tecweaponHolder'を親にしている武器の子インスタンスを削除する方法を示すコードを更新しました。 – Soviut