C# 统一得到X&;动产抵押
我有一个自上而下的统一项目。玩家移动到屏幕被点击的位置 我想现在有正确的动画播放方向的球员正在移动。我已经建立了混合树,它可以工作,我有水平、垂直和大小的浮动参数 但是,当我点击屏幕时,播放器动画不会改变方向,或者如果它改变了方向,则会在移动的中途指向错误的方向。我确信我使用的是X-Y值,但我不确定如何获得正确的值C# 统一得到X&;动产抵押,c#,unity3d,C#,Unity3d,我有一个自上而下的统一项目。玩家移动到屏幕被点击的位置 我想现在有正确的动画播放方向的球员正在移动。我已经建立了混合树,它可以工作,我有水平、垂直和大小的浮动参数 但是,当我点击屏幕时,播放器动画不会改变方向,或者如果它改变了方向,则会在移动的中途指向错误的方向。我确信我使用的是X-Y值,但我不确定如何获得正确的值 using System.Collections; using System.Collections.Generic; using UnityEngine; public clas
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我编辑了我的答案来解决这个问题。您可以检查是否已到达目的地,如果已到达目的地,则直接将震级设置为零。