Выходные данные отображаются по-разному в сборке и в редакторе unity

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

Это скриншот редактора:

введите описание изображения здесь

Это скриншот сборки:

введите описание изображения здесь

Как вы можете видеть, имя статистики появляется, когда я запускаю его в редакторе, но когда я его собираю, оно не отображается в приложении. В чем может быть причина?

Ниже приведен сценарий для всплывающей подсказки на скриншоте.

 using System.Text;
using UnityEngine.UI;
using CharacterStats;
using UnityEngine;

public class StatTooltip : MonoBehaviour
{
    [SerializeField] Text StatNameText;
    [SerializeField] Text StatModifierLabelText;
    [SerializeField] Text StatModifiersText;

    private StringBuilder sb = new StringBuilder();

    public void ShowTooltip(CharacterStat stat, string statName)
    {
        StatNameText.text = GetStatTopText(stat, statName);
        StatModifiersText.text = GetStatModifiersText(stat);

        gameObject.SetActive(true);
    }

    public void HideTooltip()
    {
        gameObject.SetActive(false);
    }

    private string GetStatTopText(CharacterStat stat, string statName)
    {
        sb.Length = 0;
        sb.Append(statName);
        sb.Append(" ");
        sb.Append(stat.Value);
        sb.Append(" (");
        sb.Append(stat.BaseValue);

        if (stat.Value > stat.BaseValue)
            sb.Append(" ");

        sb.Append(stat.Value - stat.BaseValue);
        sb.Append(")");
        return sb.ToString();
    }


    private string GetStatModifiersText(CharacterStat stat)
    {
        sb.Length = 0;
        foreach (StatModifier mod in stat.StatModifiers)
        {
            if (sb.Length > 0)
            {
                sb.AppendLine();
            }

            if (mod.Value > 0)
                sb.Append(" ");

            sb.Append(mod.Value);

            EquippableItem item = mod.Source as EquippableItem;

            if(item != null)
            {
                sb.Append("  ");
                sb.Append(item.ItemName);
            }
            else
            {
                Debug.LogError("Modifier is not an EquippableItem");
            }
        }
        return sb.ToString();
    }
}
  

statName отображается правильно в редакторе, но не в сборке.

 using CharacterStats;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


public class StatDisplay : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    private CharacterStat _stat;
    public CharacterStat Stat
    {
        get { return _stat; }
        set
        {
            _stat = value;
            UpdateStatValue();
        }
    }


    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            nameText.text = _name;
        }
    }

    [SerializeField] Text nameText;
    [SerializeField] Text valueText;
    [SerializeField] StatTooltip tooltip;

    private void OnValidate()
    {
        Text[] texts = GetComponentsInChildren<Text>();
        nameText = texts[0];
        valueText = texts[1];

        if (tooltip == null)
            tooltip = FindObjectOfType<StatTooltip>();
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        tooltip.ShowTooltip(Stat, Name);
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        tooltip.HideTooltip();
    }

    public void UpdateStatValue()
    {
        valueText.text = _stat.Value.ToString();
    }
}
  

Комментарии:

1. Можете ли вы поделиться скриптом, который изменяет выходные данные?

2. Questland? Я играл в эту игру 🙂 Также я заметил, что оснащенный меч отличается на скриншотах

3. @AliKanat Я поделился сценарием .

4. @Morasiu Нет, я следую руководству Kryzarel на youtube. Однако элементы отличаются.

5. Вы проверили файлы журнала , есть ли в вашей сборке какое-либо исключение, которое не было перехвачено. Потому что код выглядит нормально для меня.

Ответ №1:

попробуйте установить «Режим масштабирования пользовательского интерфейса» в «Canvas Scaler» на «Масштабирование по размеру экрана»!

Редактировать: маловероятно, что это ошибка, но я не смог увидеть настройку на скриншоте, и, возможно, стоит попробовать, если вы еще этого не сделали

Комментарии:

1. На самом деле это не решает вопрос. Поскольку остальная часть пользовательского интерфейса масштабируется правильно, я бы сказал, что вероятность того, что это как-то связано с этим, довольно мала 😉

2. Для него установлено значение «Масштабировать только в соответствии с размером экрана». Проблема не в этом.

Ответ №2:

Проблема вызвана тем, что вы используете OnValidate для инициализации tooltip . Насколько я знаю OnValidate , используется для проверки значений при их изменении в редакторе. Следовательно, это не работает в вашей сборке. Вместо этого вы должны использовать Awake для инициализации.

Комментарии:

1. Я сделал это, и проблема не была исправлена. я думаю, что это как-то связано с именем состояния, а не с всплывающей подсказкой в целом. поскольку не отображается только statName. Но не могу найти причину.

2. Вы переместили все в OnValidate в Awake или просто во всплывающую подсказку? Вы должны переместить все. Есть ли какие-либо другие исключения?