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

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

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

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

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

不过还好有混合树 (Blend Tree) ,它可以帮助我们更好的管理自己的动画。你只需要在动画控制器 (Animator) 中右键 -> Creat State -> From New Blend Tree 就能创建它。
无

因为我们要通过鼠标来控制它,所以要先在动画控制器 (Animator) 的 Parameters 窗口创建两个 Float 。(注意:这里的命名最好和我一样,不然用下面我给出的代码运行会报错)
无

双击你创建的混合树 (Blend Tree) 即可编辑它,将其 Blend Type 改为 2D Freeform Directional (当然你也可以试试其它选择,效果会有细微的差别),并在其 Parameters 中填写你刚才创建的两个 Float 的名称。(注意:本人使用的 Unity 版本为 2019.2 ,早期版本的 Blend Type 中可能没有我的选项,那就选 2D 即可)无

接下来,在 Motion 窗口加入四个方向的动画,并在其 Pos X 、 Pos Y 下输入如下值。
无

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

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

    private void Start()
    {
        myAnimator = GetComponent<Animator>();//获取角色自身动画控制器
    }    
    
    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);
    }

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

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值