2016-07-04 84 views
1

好吧,我差不多完成了我的2D RPG点击移动游戏。如果你看看这个video,你将会看到,当我点击前进我的球员时,一旦它到达了位置,就会面对错误的方向,而不是直接面对球员。为了让自己更清晰,这是我目前使用的精灵表的image,因为你可以看到它有8个方向。当您点击here(在游戏中)时,我的玩家将走下来并面对此direction或此direction,而不是面对此direction(正常/首选位置)。当我点击here(在游戏中)时,也会发生这种情况,我的玩家会走上并面对此direction或面对此direction,而不是面对此direction。我如何确保我的玩家一旦到达目的地就会面对正确的方向。再次,这只发生在Y轴内,所以沿着X轴行走很好。Unity3D:我如何提高我的空闲动画(Y轴)

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); 
     } 
    } 
} 

}

回答

2

我刚刚开始接触团结,但希望我能帮助。

从您发布的视频中我注意到,当X组件中oldPosition和newPosition点击不同时,精灵只是“错误的”。当你点击直接下来它会显示所需的行为和精灵。

您是否尝试过打印出您的代码正在使用的x和y值来计算它设置的精灵?

起初我以为也许是因为你在Blend Tree中设置的值是-1,1等,并且由于规范化你有时会以0.9为特定值。

你可以尝试在打开animator窗口的情况下调试它,就像你在最后做的那样?写下价值观并在理想和不想要的行为之间进行比较可能会告诉你更多的东西。

对不起,我没有你的问题的具体解决方案,但我希望这有助于。

编辑澄清:
基本上,我建议是:
1)打印出来的时候,行为发生了,你所得到的价值观,如何打印这些东西的例子是使用LogFormat,例如:现在

Debug.LogFormat("X: {0}, Y: {1}", xPosition, yPosition);

,你会得到的值被印刷出来,当它移动完成。

2)写下当活动与“错误”精灵完成的价值,并不断地点击移动,直到“”精灵出现了。再次写下数值。

3)比较每个值,并找出差异。现在推导出为什么的差异就像它们一样,将这些值与您的混合树结合使用。

4)一旦你知道了为什么,回到你的代码/混合树并重写/修复它,使其按照你的意图工作。

+0

一个很好的答案 –

+0

谢谢你的回复,你能否给我一个关于如何执行我的debug.log的想法。再次感谢您的答复。 –

+0

到目前为止,我已经拿出了这个:\t \t \t \t \t print(“movementDirection.x is:”+ movementDirection.x +“movementDirection.y is:”+ movementDirection.y); –