Вывод отличается в сборке и в редакторе единства - PullRequest
0 голосов
/ 19 марта 2019

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

enter image description here

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

enter image description here

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

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

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();
    }
}

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

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

0 голосов
/ 19 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...