Unity3D 2D角色根据鼠标方向改变动画

Unity3D 2D角色根据鼠标方向改变动画

本篇文章是通过动画控制器 (Animator) 中的混合树 (Blend Tree) 来实现2D角色看向鼠标方向,希望能对您有帮助。

还记得我曾经的毕设,是一款2D解谜游戏,游戏中的小人会根据鼠标位置看向不同的方向。那个时候我通过动画控制器 (Animator) 实现了这个功能,但这个方法给我造成了下图的困扰。。。
Unity3D 2D角色根据鼠标方向改变动画_第1张图片
看,如此之多的状态让动画控制器 (Animator) 一片混乱!

由于游戏中玩家有待机、移动、死亡等状态,而每个状态又有四种朝向,这就使得动画控制器需要控制状态数乘 4 数量的状态,从而使得动画控制器 (Animator) 里一片混乱。

不过还好有混合树 (Blend Tree) ,它可以帮助我们更好的管理自己的动画。你只需要在动画控制器 (Animator) 中右键 -> Creat State -> From New Blend Tree 就能创建它。
Unity3D 2D角色根据鼠标方向改变动画_第2张图片

因为我们要通过鼠标来控制它,所以要先在动画控制器 (Animator) 的 Parameters 窗口创建两个 Float 。(注意:这里的命名最好和我一样,不然用下面我给出的代码运行会报错)
Unity3D 2D角色根据鼠标方向改变动画_第3张图片

双击你创建的混合树 (Blend Tree) 即可编辑它,将其 Blend Type 改为 2D Freeform Directional (当然你也可以试试其它选择,效果会有细微的差别),并在其 Parameters 中填写你刚才创建的两个 Float 的名称。(注意:本人使用的 Unity 版本为 2019.2 ,早期版本的 Blend Type 中可能没有我的选项,那就选 2D 即可)Unity3D 2D角色根据鼠标方向改变动画_第4张图片

接下来,在 Motion 窗口加入四个方向的动画,并在其 Pos X 、 Pos Y 下输入如下值。
Unity3D 2D角色根据鼠标方向改变动画_第5张图片

最后,在你动画控制器控制的角色或物体上加入脚本并写入如下代码。

    Animator myAnimator;//角色自身动画控制器 

    private void Start()
    {
        myAnimator = GetComponent();//获取角色自身动画控制器
    }    
    
    private void Update()
    {
        PlayerLookMouse();//角色看向鼠标方向
    }    
    
    //角色看向鼠标方向
    void PlayerLookMouse()
    {
        //获取鼠标坐标
        Vector2 worldMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);//获取鼠标的世界坐标
        Vector2 localMousePosition = transform.InverseTransformPoint(worldMousePosition);//获取鼠标对于自身的局部坐标
        
        //通过鼠标坐标改变动画方向
        myAnimator.SetFloat("MousePositionX", localMousePosition.x);
        myAnimator.SetFloat("MousePositionY", localMousePosition.y);
    }

运行,会发现角色或物体会根据鼠标方向改变动画。

你可能感兴趣的:(Animation)