带有点击运动的动画 [Unity2D]
Animation with Point and Click Movement [Unity2D]
我有以下 blendtree 尝试根据运动方向改变动画。
我有一个机制,可以使用以下代码通过单击鼠标来移动对象:
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);
}
}
尽管当我 运行 场景时,精灵 运行 随意地通过动画。
我想这就是我在代码中导出水平和垂直浮点数的方式。谁能帮我解决这个问题?非常感谢
您可能想使用指向目标的方向而不是位置。
Vector3 dir = target - transform.position;
dir.Normalize();
animator.SetFloat("Horizontal", dir.x);
animator.SetFloat("Vertical", dir.y);
animator.SetFloat("Magnitude", dir.magnitude);
我有以下 blendtree 尝试根据运动方向改变动画。
我有一个机制,可以使用以下代码通过单击鼠标来移动对象:
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);
}
}
尽管当我 运行 场景时,精灵 运行 随意地通过动画。
我想这就是我在代码中导出水平和垂直浮点数的方式。谁能帮我解决这个问题?非常感谢
您可能想使用指向目标的方向而不是位置。
Vector3 dir = target - transform.position;
dir.Normalize();
animator.SetFloat("Horizontal", dir.x);
animator.SetFloat("Vertical", dir.y);
animator.SetFloat("Magnitude", dir.magnitude);