Animation Unity3D:如何改进空闲动画(Y轴)

Animation Unity3D:如何改进空闲动画(Y轴),animation,unity3d,Animation,Unity3d,好的,我的2d rpg点击移动游戏快完成了。如果你看这个,你会发现当我点击我的球员前进时,一旦它到达它的位置,面对错误的方向,而不是直接面对球员。为了让我自己更清楚,这是我目前使用的精灵表的一部分,你可以看到它有8个方向。当你点击(在游戏中)时,我的玩家会走下来面对这个或这个,而不是面对这个(正常/首选位置)。当我点击(在游戏中)时,我的玩家也会走上前去面对这个或面对这个,而不是面对这个。当我的玩家到达目的地时,我如何确保它朝向正确的方向。同样,这只发生在Y轴内,因此沿X轴行走是可以的 priv

好的,我的2d rpg点击移动游戏快完成了。如果你看这个,你会发现当我点击我的球员前进时,一旦它到达它的位置,面对错误的方向,而不是直接面对球员。为了让我自己更清楚,这是我目前使用的精灵表的一部分,你可以看到它有8个方向。当你点击(在游戏中)时,我的玩家会走下来面对这个或这个,而不是面对这个(正常/首选位置)。当我点击(在游戏中)时,我的玩家也会走上前去面对这个或面对这个,而不是面对这个。当我的玩家到达目的地时,我如何确保它朝向正确的方向。同样,这只发生在Y轴内,因此沿X轴行走是可以的

private Animator anim;
public float speed = 15f;
private Vector3 target;
private bool touched;
private bool playerMovementRef;



void Start () {
    target = transform.position;
    anim = GetComponent<Animator> ();
}


void Update () {
    if (Input.GetMouseButtonDown (0)) {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = 10; // distance from the camera
        target = Camera.main.ScreenToWorldPoint (mousePosition);
        target.z = transform.position.z;


        var movementDirection = (target - transform.position).normalized;
        Vector3 animDirection = Vector3.zero;
        if (movementDirection.sqrMagnitude > 0)
        {
            // Use >= to default to horizontal on both being equal
            if (movementDirection.x > movementDirection.y) 
                animDirection.x = 1;
            else
                animDirection.y = 1;

            anim.SetBool ("walking", true);
            anim.SetFloat ("SpeedX", movementDirection.x);
            anim.SetFloat ("SpeedY", movementDirection.y);

            if (movementDirection.x < 0) {
                anim.SetFloat ("LastMoveX", -1f);
            } else if (movementDirection.x > 0) {
                anim.SetFloat ("LastMoveX", 1f);
            } else {
                anim.SetFloat ("LastMoveX", 0f);
            }
            if (movementDirection.y > 0) {
                anim.SetFloat ("LastMoveY", 1f);
            } else if (movementDirection.y < 0) {
                anim.SetFloat ("LastMoveY", -1f);
            } else {
                anim.SetFloat ("LastMoveY", 0f);
            }
        }
    } else {
        if (Mathf.Approximately (transform.position.x, target.x) && Mathf.Approximately (transform.position.y, target.y)) {
            touched = false;
            anim.SetBool ("walking", false);
        } else {
            transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
        }
    }
}
私人动画师动画;
公共浮子速度=15f;
私有向量3目标;
私密的布尔触摸;
私人布尔playerMovementRef;
无效开始(){
目标=变换位置;
anim=GetComponent();
}
无效更新(){
if(Input.GetMouseButtonDown(0)){
Vector3 mousePosition=Input.mousePosition;
mousePosition.z=10;//与摄像机的距离
目标=Camera.main.ScreenToWorldPoint(鼠标位置);
target.z=transform.position.z;
var movementDirection=(target-transform.position);
Vector3方向=Vector3.0;
if(movementDirection.sqrMagnitude>0)
{
//使用>=在两者相等时默认为水平
if(movementDirection.x>movementDirection.y)
x=1;
其他的
y=1;
anim.SetBool(“行走”,真实);
anim.SetFloat(“SpeedX”,movementDirection.x);
anim.SetFloat(“快速”,movementDirection.y);
如果(移动方向x<0){
anim.SetFloat(“LastMoveX”,-1f);
}else if(movementDirection.x>0){
anim.SetFloat(“LastMoveX”,1f);
}否则{
anim.SetFloat(“LastMoveX”,0f);
}
如果(移动方向y>0){
anim.SetFloat(“LastMoveY”,1f);
}else if(移动方向y<0){
anim.SetFloat(“LastMoveY”,-1f);
}否则{
anim.SetFloat(“LastMoveY”,0f);
}
}
}否则{
if(Mathf.approxing(transform.position.x,target.x)和&Mathf.approxing(transform.position.y,target.y)){
触摸=假;
anim.SetBool(“行走”,假);
}否则{
transform.position=Vector3.moveToward(transform.position,target,speed*Time.deltaTime);
}
}
}

}

我刚从Unity开始,但希望我能帮上忙

从您发布的视频中,我注意到,只有当oldPosition和newPosition单击在X组件中不同时,精灵才是“错误的”,例如,当您直接向下单击时,它将显示所需的行为和精灵

您是否尝试打印出代码用于计算其设置的精灵的x和y值

起初我认为这可能是因为在混合树中设置的值为-1、1等,并且由于对某个值进行规格化,有时会得到0.9

你可以试着在animator窗口打开的情况下调试它,就像你在最后做的那样吗?写下这些值,并将它们与期望的和不期望的行为进行比较,可能会告诉你更多

对不起,我没有一个具体的办法来解决你的问题,但我希望这能有所帮助

编辑以澄清:
基本上,我的建议是:
1)打印出行为发生时获得的值,如何打印这些值的示例是使用,例如:

Debug.LogFormat(“X:{0},Y:{1}”,xPosition,yPosition)

现在,当它完成移动时,您将得到打印出来的值

2)记下移动结束时“错误”精灵的值,并持续单击以移动,直到“正确”精灵出现。再次写下这些值

3)比较每个值,找出差异。现在,将这些值与混合树结合使用,推断出差异的原因


4)一旦您知道原因,请返回代码/混合树并重写/修复它,使其按您的预期工作。

谢谢您的回复,您能告诉我如何执行debug.log吗。再次感谢您的回复。到目前为止,我已经想到了这个:print(“movementDirection.x是:“+movementDirection.x+”movementDirection.y是:“+movementDirection.y”);获得价值观,如:;移动方向。x为:0.00201756移动方向。y为:-0.9999976。我得到的大多数值都是不需要的,我看不到任何需要的值。你好,Jessica,我希望我做得对(因为我也是Stackoverflow的新手),但请查看编辑后的答案以获得更多澄清。希望有帮助!