运动位置等于Int

时间:2015-10-17 20:22:38

标签: unityscript

我不确定如何标题,但我会解释我的意思。我试图让我的游戏对象移动:

transform.translate(Vector2.up \* moveSpeed * time.deltaTime); 现在我想做的是造成一些麻烦的原因。我希望对象继续移动,直到它达到Y值为1,然后向左转。我几乎有这个工作。如果我使用> = 1,看它会工作,因为它跳过值1(不是由波动的整数移动)。即使我尝试将其更改为== 1.0f,它仍然无法正常工作,因为我猜对象移动得太快并且跳过某些值。我们已经尝试将其重新定位在> =代码块中,但是这些错误并没有发挥作用。

如果您有任何想法或可能的解决方案,那就太棒了!谢谢! :-D

代码:

  if (transform.position.x <= -2 && transform.position.y < -1) {
 transform.Translate(Vector2.up * playerSpeed * Time.deltaTime);
}
 else if (transform.position.y <= -4)
 {
 transform.Translate(Vector2.left * playerSpeed * Time.deltaTime);
}

1 个答案:

答案 0 :(得分:1)

我无法真正匹配你想要的gif。虽然,当您考虑添加名为didCollidHappen的bool值并在脚本中实现OnCollideEnter方法时,您需要的是相当简单的。 这样做,当您在每个帧调用Update时,您将验证是否存在任何冲突,然后调用代码以使您的游戏对象跳转。以下是代码片段。将其插入C#脚本: - )

public bool didCollideHappen =false;

public void OnCollideEnter(Collision col)
{
  if(col.gameObject.tag ==  "Something")//if it's any game object, then just put bool value to true !! 
  {
     didCollidedHappen = true; 
  }
}

public void MakeSlowedJump()
{
      actualSpeed -= slowAmount * Time.fixedDeltaTime; 
      transform.position += new Vector3 (0.13F, actualSpeed * Time.fixedDeltaTime, 0);
}


public void Update()
{
    if(didCollideHappen)
         MakeSlowedJump();
 }