Как вывести количество патронов на пользовательском интерфейсе (UI) в Unity?

Как вывести текущее количество патронов? Я перепробовал множество способов, и вот мой текущий код: 
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UI : MonoBehaviour
{
    [SerializeField] private Text AmmoText;
    private Weapon selectedWeaponA;

    void Start()
    {
        selectedWeaponA = GameObject.Find("WeaponManager").GetComponent<WeaponManager>().selectedWeapon;
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log(selectedWeaponA);
        //ShowAmmoText(selectedWeaponA.bulletsPerMagazine.ToString());
    }

    public void ShowAmmoText(string text)
    {
        AmmoText.text = text;
    }
}
```
Как я могу исправить свой код, чтобы правильно отображалось текущее количество патронов?
  • 14 февраля 2025 г. 17:24
Ответы на вопрос 1
Ваш текущий код выглядит неплохо, но вам нужно убедиться, что вы вызываете метод `ShowAmmoText`, чтобы обновить текстовое поле с количеством патронов на экране. Кроме того, убедитесь, что вы получаете актуальное количество патронов из вашего оружия (количество оставшихся патронов) и передаете его в метод отображения. 

Вот пример, как можно обновить ваш код:

1. Убедитесь, что у вас есть переменная, которая хранит текущее количество патронов (например, `currentAmmo`). Это должно быть частью вашего класса `Weapon`.

2. Обновите метод `Update`, чтобы вызывался `ShowAmmoText` с текущим количеством патронов.

Пример исправленного кода:

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UI : MonoBehaviour
{
    [SerializeField] private Text AmmoText;
    private Weapon selectedWeaponA;

    void Start()
    {
        // Получаем выбранное оружие из WeaponManager
        selectedWeaponA = GameObject.Find("WeaponManager").GetComponent<WeaponManager>().selectedWeapon;
        // Обновляем UI сразу при старте
        UpdateAmmoText();
    }

    // Update is called once per frame
    void Update()
    {
        // Проверяем, изменилось ли количество патронов, и обновляем UI при необходимости
        if (selectedWeaponA != null)
        {
            UpdateAmmoText();
        }
    }

    private void UpdateAmmoText()
    {
        if (selectedWeaponA != null)
        {
            // Предполагаем, что у вас есть свойство currentAmmo в классе Weapon, которое содержит текущее количество патронов
            ShowAmmoText(selectedWeaponA.currentAmmo.ToString());
        }
    }

    public void ShowAmmoText(string text)
    {
        if (AmmoText != null)
        {
            AmmoText.text = text;
        }
    }
}
```

Не забудьте убедиться в следующем:
- Убедитесь, что в вашем классе `Weapon` есть свойство `currentAmmo`, которое отображает текущее количество патронов.
- Убедитесь, что текстовый компонент UI (AmmoText) правильно назначен в инспекторе Unity.
- Рассмотрите вопрос о том, чтобы отделить логику обновления UI от самого UI. Это может сделать ваш код более чистым и удобным для сопровождения. Например, можно использовать события для обновления UI, когда количество патронов изменяется.
Похожие вопросы