我如何使用enum,switch,case和return来决定何时使用Animator状态?

时间:2017-04-03 21:38:51

标签: c# unity3d enums unity5

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Animations : MonoBehaviour {

    public enum AnimatorStates
    {
        WALK, RUN, IDLE
    }

    private static Animator _anim;

    // Use this for initialization
    void Start ()
    {
        _anim = GetComponent<Animator>();
    }

    private static  AnimStates(AnimatorStates states)
    {
        switch (states)
        {
            case AnimatorStates.IDLE:
                return _anim.Play("idle");
        }
    }

    // Update is called once per frame
    void LateUpdate ()
    {

    }
}

第一个问题是应该返回什么类型?静态之后:

private static  AnimStates(AnimatorStates states)

第二个问题是如何在LateUpdate中创建案例后如何使用它,如果我没有错,我应该从LateUpdate或Update函数中调用动画?

最后我怎么能在以后的另一个脚本中使用这个脚本? 仅举例来说,如果逻辑不是真正的代码,如果在另一个脚本中我会做出类似的东西:

if (text == "walk")
    Animations.walk

这种逻辑。

1 个答案:

答案 0 :(得分:1)

根据我收集的内容,您不需要将_animAnimStates标记为静态。在这种情况下,我会想象下面的代码会为你做这件事。

public class Animations : MonoBehaviour
{
    public enum AnimatorStates
    {
        WALK, RUN, IDLE
    }

    private Animator _anim;

    void Start()
    {
        _anim = GetComponent<Animator>();
    }

    private void PlayState(AnimatorStates state)
    {
        string animName = string.Empty;
        switch (state)
        {
            case AnimatorStates.IDLE:
                animName = "idle";
                break;
        }
        _anim.Play(animName);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) {
            PlayState(AnimatorStates.IDLE);
        }
    }
}