具有指向和单击运动的动画 [Unity2D]

Posted

技术标签:

【中文标题】具有指向和单击运动的动画 [Unity2D]【英文标题】:Animation with Point and Click Movement [Unity2D] 【发布时间】:2020-06-16 21:53:02 【问题描述】:

我有以下混合树来尝试根据运动方向更改动画。

我有一个机制,可以使用以下代码通过鼠标单击移动对象:

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;

public class ClickMovement : MonoBehaviour

    public float speed = 2;
    public Animator animator;
    private Vector3 target;

    public Rigidbody2D rb;

    void Start()
    
        target = transform.position;
    

    void Update()
    
        if (Input.GetMouseButtonDown(0))
        
            target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            target.z = transform.position.z;
        

        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);

        animator.SetFloat("Horizontal", transform.position.x);
        animator.SetFloat("Vertical", transform.position.y);
        animator.SetFloat("Magnitude", transform.position.magnitude);

    

虽然当我运行场景时,精灵会随意地通过动画。

我想这就是我在代码中导出水平和垂直浮点数的方式。有人可以帮我吗?非常感谢

【问题讨论】:

【参考方案1】:

您可能希望使用朝向目标的方向而不是位置。

Vector3 dir = target - transform.position;
dir.Normalize();

animator.SetFloat("Horizontal", dir.x);
animator.SetFloat("Vertical", dir.y);
animator.SetFloat("Magnitude", dir.magnitude);

【讨论】:

作为奖励,有没有办法让空闲状态成为精灵行进的最后一个方向? @Idrawthings 您可以根据最后一个非零幅度方向保存最后一个朝向。 if (dir.magnitude > 0f) lastDir = dir。然后将其应用到空闲的混合树上。 lastDir 是一个函数吗?我的控制台显示“当前上下文中不存在名称‘lastDir’”。 它必须是 Vector3 类型的新变量。

以上是关于具有指向和单击运动的动画 [Unity2D]的主要内容,如果未能解决你的问题,请参考以下文章

unity2d动画位置不在一起怎么调整

unity2D动画和图片切割

unity2d下落动画判断延迟

unity2d之2d帧动画创建

unity2d之2d帧动画创建

unity2d中动画状态比较多,且切换非常频繁,有啥办法好管理