C# 统一得到X&;动产抵押

C# 统一得到X&;动产抵押,c#,unity3d,C#,Unity3d,我有一个自上而下的统一项目。玩家移动到屏幕被点击的位置 我想现在有正确的动画播放方向的球员正在移动。我已经建立了混合树,它可以工作,我有水平、垂直和大小的浮动参数 但是,当我点击屏幕时,播放器动画不会改变方向,或者如果它改变了方向,则会在移动的中途指向错误的方向。我确信我使用的是X-Y值,但我不确定如何获得正确的值 using System.Collections; using System.Collections.Generic; using UnityEngine; public clas

我有一个自上而下的统一项目。玩家移动到屏幕被点击的位置

我想现在有正确的动画播放方向的球员正在移动。我已经建立了混合树,它可以工作,我有水平、垂直和大小的浮动参数

但是,当我点击屏幕时,播放器动画不会改变方向,或者如果它改变了方向,则会在移动的中途指向错误的方向。我确信我使用的是X-Y值,但我不确定如何获得正确的值

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {

    float speed = 2f;
    Vector2 targetPos;

    private Rigidbody2D myRigidbody;
    private Animator myAnim;

    private void Start()
    {
        myRigidbody = GetComponent<Rigidbody2D>();
        myAnim = GetComponent<Animator>();
        targetPos = transform.position;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            targetPos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
        }
        if ((Vector2)transform.position != targetPos)
        {
            Move();
        }
    }

    void Move()
    {
        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        myAnim.SetFloat("Horizontal", transform.position.x);
        myAnim.SetFloat("Vertical", transform.position.y);
        myAnim.SetFloat("Magnitude", transform.position.magnitude);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类玩家控制器:单行为{
浮动速度=2f;
向量2 targetPos;
私人刚体;
私人动画师myAnim;
私有void Start()
{
myRigidbody=GetComponent();
myAnim=GetComponent();
targetPos=变换位置;
}
无效更新()
{
if(Input.GetMouseButtonDown(0))
{
targetPos=(Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
如果((矢量2)transform.position!=targetPos)
{
Move();
}
}
无效移动()
{
transform.position=Vector2.movetoward(transform.position,targetPos,speed*Time.deltaTime);
myAnim.SetFloat(“水平”,transform.position.x);
myAnim.SetFloat(“垂直”,transform.position.y);
myAnim.SetFloat(“幅值”,变换.位置.幅值);
}
}

您需要根据移动的方向而不是变换的新位置来设置浮动。为此,您需要找到新位置和旧位置之间的差异,并使用该向量

此外,由于要单独处理幅值,因此可能需要规格化组件的运动矢量。这取决于混合的设置方式

但是,如果您的移动将您带到目标位置,您将希望将幅值设置为零

void Move()
{
    Vector2 oldPos = transform.position;
    transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

    Vector2 movement = transform.position - oldPos;

    if (transform.position == targetPos) 
    {
        myAnim.SetFloat("Magnitude", 0f);
    } 
    else 
    {
        myAnim.SetFloat("Magnitude", movement.magnitude);
    }

    # You may need to normalize for your components.
    # Vector2 movementNormed = movement.normalized;
    # myAnim.SetFloat("Horizontal", movementNormed.x);
    # myAnim.SetFloat("Vertical", movementNormed.y);

    # Otherwise, just use the ordinary components.
    myAnim.SetFloat("Horizontal", movement.x);
    myAnim.SetFloat("Vertical", movement.y);

}

谢谢你的回复。我已经对“Vector2 movement=(Vector2)transform.position-oldPos;”进行了更正因为它试图用向量2减去向量23。我有一个问题还没有解决,那就是震级永远不小于0.001,我需要将其更改为空闲动画。@KeithPower我编辑了我的答案来解决这个问题。您可以检查是否已到达目的地,如果已到达目的地,则直接将震级设置为零。