0

我有以下基类

public abstract class Character : MonoBehaviour
{
    protected abstract Enum CurrentState
    {
        get;
        set;
    }
}

和以下子类

public class Player : Character
{
    protected override Enum CurrentState
    {
        get
        {
            return (State)_anim.GetInteger("State");
        }
        set
        {
           _anim.SetInteger("State", Convert.ToInt32(value));
        }
    }

    private enum State
    {
        IDLE = 0,
        WALK = 1,
        JUMP = 2,
        FALL = 3,
        CLIMB = 4,
        LOOKING_DOWN = 5,
        NPC = 6,
        IMPATIENT = 7,
        LOOKING_UP = 8,
        STUCK = 9,
    }

    void FixedUpdate()
    {
        if (CurrentState == State.CLIMB)
        {

        }
    }

}

线

if (CurrentState == State.CLIMB)

产生以下错误:运算符'=='不能应用于'Enum'和'Player.State'类型的操作数

有什么帮助吗?吸气剂工作正常。所以也许我需要在 set 访问器中进行强制转换?我不太确定...我对此很陌生...任何帮助都将不胜感激。

4

4 回答 4

0

您正在比较一个Enumwith State。这是非法的。CurrentState的返回类型应该是State。就像是 -

protected override State CurrentState
{
    get
    {
        return (State)_anim.GetInteger("State");
    }
    set
    {
       _anim.SetInteger("State", Convert.ToInt32(value));
    }
}
于 2018-05-10T19:22:28.970 回答
0

如前文所述,Enum 的非法操作。不要那样做。

 namespace ConsoleApplication1
    {
        public enum State
        {
            IDLE = 0,
            WALK = 1,
            JUMP = 2,
            FALL = 3,
            CLIMB = 4,
            LOOKING_DOWN = 5,
            NPC = 6,
            IMPATIENT = 7,
            LOOKING_UP = 8,
            STUCK = 9,
        }

        public abstract class Character : MonoBehaviour
        {
            protected abstract State CurrentState
            {
                get;
                set;
            }
        }


        public class MonoBehaviour
        {
        }

        public class Player : Character
        {      

            protected override State CurrentState
            {
                get
                {
                    return (State)_anim.GetInteger("State");
                }
                set
                {
                    _anim.SetInteger("State", Convert.ToInt32(value));
                }
            }



            void FixedUpdate()
            {
                if (CurrentState == State.CLIMB)
                {

                }
            }

        }

    }
于 2018-05-10T19:26:00.907 回答
0

尝试这个:

if (Convert.ToInt32(CurrentState) == Convert.ToInt32(State.CLIMB))
            { 

            }

由于 Enum 不能作为类型进行比较,因此您需要将它们转换为比较。

于 2018-05-10T19:27:28.617 回答
0

如果我用两个不同的访问器替换该属性,它似乎可以工作......

protected override Enum SetCurrentState
{
    set
    {
        _anim.SetInteger("State", Convert.ToInt32(value));
    }
}

private bool GetCurrentState(State state)
{
    return Convert.ToInt32((State)_anim.GetInteger("State")) == Convert.ToInt32(state);
}
于 2018-05-10T22:14:59.933 回答