浅谈Unity里在动画运行时切换动画。(Animator Controller和runtimeAnimatorController)

本博客内容确实非常浅显,也就是说很适合像我这样的初学者,日后会根据我的学习不断更新此文章。

今天做红白机坦克大战项目,吃到五角星坦克会升级,这就涉及到Animator的动画切换。我看了Unity的官方文档。AnimatorOverrideController官方API说明,里面讲解的更加细致。我刚开始看不懂,慢慢琢磨才看懂一些皮毛。简而言之,动画的切换(不是单纯的同一角色的动画切换。)是依靠状态机的重写来实现的。状态机的重写在这里不再赘述。在Project视图中Creat一个Animator Override Controller然后将你要重载的状态机控制器拖入Controller即可。

然后我们开始实现吃到五角星Controller的切换,首先我们在脚本新建一个public AnimatorOverrideController[] tankatate;

然后将你的重载控制器拖进来。

然后我们在角色与五角星碰撞的脚本private void OnTriggerEnter2D(Collider2D collision)里面添加判定逻辑。

这里的tankLevel是PlayerManager里的单例公有整型变量。Up是五角星的Tag。

private void OnTriggerEnter2D(Collider2D collision)
    {
        switch (collision.tag)
        {
            case "Up":
                Destroy(collision.gameObject);
                if(PlayerManager.Instance.tankLevel<3)
                {
                    PlayerManager.Instance.tankLevel++;
                }
                break;
            default:
                break;
        }
    }

然后我们在Update()里写上

if(PlayerManager.Instance.tankLevel>=0)
        {
            Animator animator = GetComponent<Animator>();
            animator.runtimeAnimatorController = tankatate[PlayerManager.Instance.tankLevel];

        }

就可以实现简单的动画状态切换了。有不懂的或者有更好的实现方法的可以在下面留言,大家一起交流,一起进步。


猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/80677072
今日推荐