2016-11-13 1 views
-1

Я пытаюсь понять, какое оружие мы в настоящее время укомплектовали, и воспроизвести этот звук, который я делаю, ища тег оружия. Тем не менее, я получаю сообщение об ошибке «Тип PlayerWeapon не содержит определения для тега, и не может быть найден тег метода расширения типа PlayerWeapon».Использование GameObject.Tag

Это раздел playershoot сценария прикрепленного к игроку префабу, который обрабатывает тег:

 weaponManager = GetComponent<WeaponManager>(); 
    } 

    void Update() 
    { 
     currentWeapon = weaponManager.GetCurrentWeapon(); 

     if (PauseMenu.IsOn) 
      return; 

     if (currentWeapon.fireRate <= 0f) 
     { 
      if (Input.GetButtonDown("Fire1")) 
      { 
       Shoot(); 
       if(currentWeapon.tag = "Tec") 
       { 
        CmdPlayTecShootSound(); 
       } 
      } 

И это соответствующий раздел из сценария weaponmanager:

private PlayerWeapon currentWeapon; 
    private WeaponGraphics currentGraphics; 

    private Transform currentHolder; 

    void Start() 
    { 
     currentHolder = awpweaponHolder; 
     EquipWeapon(primaryWeapon); 
    } 

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

    public PlayerWeapon GetCurrentWeapon() 
    { 
     return currentWeapon; 
    } 

    public WeaponGraphics GetCurrentGraphics() 
    { 
     return currentGraphics; 
    } 

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

UPDATE:

void Update() 
    { 
     currentWeapon = weaponManager.GetCurrentWeapon(); 

     if (PauseMenu.IsOn) 
      return; 

     if (currentWeapon.fireRate <= 0f) 
     { 
      if (Input.GetButtonDown("Fire1")) 
      { 
       Shoot(); 
       foreach (Transform child in tecweaponHolder) 
       { 
        if(gameObject.tag == "Tec") 
        { 
         CmdPlayTecShootSound(); 
         Debug.Log("tec sound played"); 
        } 
       } 
       foreach (Transform child in awpweaponHolder) 
       { 
        if(gameObject.tag == "Awp") 
        { 
         CmdPlayAwpShootSound(); 
         Debug.Log("awp sound played"); 
        } 
       } 

      } 
+0

Как определяется класс 'PlayerWeapon'? –

+0

Просто небольшой комментарий к вашему коду, вы продолжаете проверять одно и то же условие в циклах, которые не собираются возвращать другой результат независимо от того, сколько раз вы повторяете петли ... gameobject возвращает игровой объект, к которому прикреплен этот скрипт к, а не к игровому объекту ребенка, который вы повторяете. – Alox

ответ

3

currentWeapon - это экземпляр сценария, который является атташе d в GameObject. Чтобы получить тег, вы должны сначала скрыть его до GameObject или Transform, после чего вы получите имя тега.

Кроме того, вы сравниваете с несколькими знаками = не только один. Вы назначаете один знак =.

if(currentWeapon.tag = "Tec")должен бытьif (currentWeapon.gameObject.tag == "Tec")

Наконец, причина производительности, вы должны compare теги с функцией CompareTag.

Используйте currentWeapon.gameObject.tag, чтобы получить название тега. Например, Debug.Log("Tag: " + currentWeapon.gameObject.tag);

Затем используйте if (currentWeapon.gameObject.CompareTag("Tec")){} для сравнения меток.

+0

Я пробовал другой метод, ища тег в игровых объектах держателя оружия, который будет заполнен пистолетом во время выполнения. В скрипте теперь нет ошибок, но звуки пистолета не воспроизводятся. Скрипт находится под вторым фрагментом –

+0

Этот вопрос касается '' Тип PlayerWeapon не содержит определения для тега, и тег метода расширения типа PlayerWeapon не найден, и это то, на что я ответил. Вы можете задать новый вопрос для других проблем. – Programmer

+0

Ну, это просто продолжение того же вопроса, но все в порядке –

Смежные вопросы