unity人物基础动画应用。行走、待机之类的简单动画切换。

@[TOC]unity人物基础动画应用

1.将动画或带有动画的,模型导入到unity

直接将项目拖入资源层级就好。这里推荐一个网站,可以给导入网站的模型自动绑骨,并且可挑选动画下载。网站自身也带有很多模型可以直接下载。免费又好用,就是可能网有点慢。
链接: link

2.创建动画控制器以及动画控制器设置

1)在项目管理器中右键->创建->动画控制器。双击新建的文件就会弹出动画器的控制界面啦。请添加图片描述
2)将动画拖取到动画器中。第一个拖进去的动画将呈现橘黄色并且entry将直接指向这个动画。意味开始的时候就执行这个动画。之后导入的动画呈现灰色需要手动创建过渡。第一个拖进去的动画将呈现橘黄色并且entry将直接指向这个动画。意味开始的时候就执行这个动画。之后导入的动画呈现灰色需要手动创建过度。
3)创建过渡,右键AnyState点击创建过度并链接需要的动画。第一次创建过渡并不会出现问题,第二次可能会出现anystate无法选中右键没有创建过渡的情况这个时候。先选中你需要创建过渡的动画按住shift在选中anystate此时右键就可以正常创建过渡了。请添加图片描述
4)在左侧的参数栏里添加参数 在参数栏中点击搜索框右边的加号就行,这里建议的是选择Trigger。这里根据要使用的动画创建了三个。

请添加图片描述
5)点击anystate到各个动画的连线设置连线。在conditions中添加一个并选中为对应的Trigger。walk动画就选中walkTrigger以此类推。
请添加图片描述
6)在项目资源管理器中选择那些需要循环播放的动画。例如待机动画,走路动画等。将循环时间,循环动作勾选上。
请添加图片描述
7)在放入场上的模型上添加组件Animator。控制器选择刚刚创建的动画控制器。
Alt

3.使用代码控制动画实现人物动作

1)新建一个脚本playerControl并挂载在人物上
2)代码如下

// An highlighted block
[Header("动画")]
    public Animator ator;
    private enum CharactorState
    {
    
    
        walkTrigger,
        runTrigger,
        idleTrigger
    }
    private CharactorState newstate;
    private CharactorState oldstate;
    void Start()
    {
    
    
        ator = GetComponent<Animator>();
        newstate = CharactorState.idleTrigger;
        oldstate = CharactorState.idleTrigger;
    }
     void Update()
    {
    
    
        
        if (Input.GetKeyDown(KeyCode.W))
        {
    
    
            if (Input.GetKey(KeyCode.LeftShift))
            {
    
    
                newstate = CharactorState.runTrigger;
            }
            else
            {
    
    
                newstate = CharactorState.walkTrigger;
            }
        }
        if (Input.GetKeyUp(KeyCode.W))
        {
    
    
            newstate = CharactorState.idleTrigger;
        }
        if (newstate != oldstate)
        {
    
    
            if (newstate == CharactorState.walkTrigger)
            {
    
    
                ator.SetTrigger("walkTrigger");
                oldstate = newstate;
            }
            if (newstate == CharactorState.runTrigger)
            {
    
    
                ator.SetTrigger("runTrigger");
                oldstate = newstate;
            }
            if (newstate == CharactorState.idleTrigger)
            {
    
    
                ator.SetTrigger("idleTrigger");
                oldstate = newstate;
            }
           
        }

    }

猜你喜欢

转载自blog.csdn.net/Kotomine_Kirei/article/details/130305856