输出在内部版本和统一编辑器中看起来有所不同

时间:2019-03-19 07:18:36

标签: c# unity3d

这是编辑器的屏幕截图:

enter image description here

这是构建屏幕截图:

enter image description here

如您所见,当我在编辑器中运行时,会显示stat名称,但在构建时,它不会显示在应用程序中。可能是什么原因?

以下是屏幕快照中工具提示的脚本。

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 :(得分:-1)

尝试将“画布缩放器”上的“ UI缩放模式”设置为“按屏幕尺寸缩放”!

编辑:这不太可能是错误,但我看不到屏幕截图上的设置,如果您还没有的话,也许值得一试

答案 1 :(得分:-1)

由于您使用OnValidate来初始化tooltip而导致问题。据我所知,OnValidate用于检查在编辑器中更改的值。因此,它不适用于您的构建。您应该使用Awake进行初始化。