【问题标题】:Getting Stats to show in inspector?让统计数据显示在检查员中?
【发布时间】:2014-01-03 11:38:10
【问题描述】:

如何让 mainChars 统计信息显示在检查器中??

using UnityEngine;
using System.Collections;

public class BaseStats : MonoBehaviour {

    public struct baseStats {
        public string name;
        public int currentLevel;
        public int targetLevel;
        public int currentHp;
        public int maxHp;
        public int currentAp;
        public int maxAp;

        public int strength;
        public int toughness;
        public int agility;
        public int intelligence;
        public int willPower;
        public int luck;

        public int attack;
        public int hitPercentage;
        public int defence;
        public int evasionPercentage;
        public int abilityAttack;
        public int abilityDefence;
        public int abilityDefencePercentage;

        public int currentExp;
        public int targetExp;

        public baseStats(string Name, int CurrentLevel, int TargetLevel, int CurrentHp, int MaxHp, int CurrentAp, int MaxAp, int Strength, int Toughness, int Agility, int Intelligence, int WillPower, int Luck, int Attack, int HitPercentage, int Defence, int EvasionPercentage, int AbilityAttack, int AbilityDefence, int AbilityDefencePercentage, int CurrentExp, int TargetExp) {
            name = Name;
            currentLevel = CurrentLevel;
            targetLevel = TargetLevel;
            currentHp = CurrentHp;
            maxHp = MaxHp;
            currentAp = CurrentAp;
            maxAp = MaxAp;

            strength = Strength;
            toughness = Toughness;
            agility = Agility;
            intelligence = Intelligence;
            willPower = WillPower;
            luck = Luck;

            attack = Attack;
            hitPercentage = HitPercentage;
            defence = Defence;
            evasionPercentage = EvasionPercentage;
            abilityAttack = AbilityAttack;
            abilityDefence = AbilityDefence;
            abilityDefencePercentage = AbilityDefencePercentage;

            currentExp = CurrentExp;
            targetExp = TargetExp;
        }
    }

    void Start() {
        baseStats mainChar = new baseStats(
            "Truth",
            98,
            99,
            7554,
            9999,
            754,
            999,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            100,
            255,
            255, 
            100,
            7773473,
            7777777);

        print(mainChar.currentHp);
    }

}

我希望它可以让每个字符成为检查器中的下拉菜单。我也想要它,这样我就可以代替将 hp 设置为当前和最大值,我也可以将其设置为每个包含当前和最大值的字符的下拉列表,对于 ap 和 exp 也是相同的。提前谢谢!!!

【问题讨论】:

    标签: c# unity3d inspector


    【解决方案1】:

    将 struct baseStats 更改为 class baseStats 并使其可序列化,Struct 是一个值类型,Unity 不会对其进行序列化,因此更改为 Class[System.Serializable] 的原因是编辑器需要知道在运行预览、关闭场景、打开场景等时如何保存和恢复类数据。

    public class BaseStatComponent : MonoBehaviour {
        [System.Serializable]
        public class baseStats {
           public int Example;
        }
        public baseStats mainChar; //this will be accessible to inspector now.
    
        void Start() {
            // This will always create a new instance of baseStats that overrides the values
            // set in inspector.  Remove this line if you want the values set in the
            // inspector to remain.
            mainChar = new baseStats { Example = 12 };
        }
    }
    

    mainChar 现在将出现在检查器中。至于下拉内容,我建议阅读extending the Unity editor。这是一个bit much 来深入研究一个 SO 问题。

    【讨论】:

    • 很酷,谢谢!我如何才能显示实际值,它只显示 0 为所有内容。我应该把 public baseStats mainChar;在启动函数中?
    • 运行预览时,值将更改为您在Start() 函数中分配的值。在 start 函数中分配值的唯一问题是它们总是会覆盖您在检查器中设置的值。由于您在检查器中设置值,因此您可以从 Start 中删除 baseStats 构造函数,并将这些值复制到检查器中的字段中。值将保存。
    • 它永远不会改变我分配的那些 D:哦,我想我会继续尝试的事情......不过非常感谢!!!
    • 那是因为你在 Start() 中将 mainChar 声明为一个局部变量,像我的例子一样让它成为一个类成员。查看我的编辑。
    • 你的男人!哈哈,我终于整个周末都在尝试这样做!!!!谢谢大佬!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2022-11-03
    • 2019-09-20
    • 2023-04-03
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多