我最近开始在Unity中使用物理学,我需要让我的角色跳跃。
我想用AddForce()
来做,但我还需要检查字符是否接地。
在代码中我用时间来检查它。
下面是我的代码:
private void JumpByForce()
{
time_after_jump = Time.time + 1f;
Debug.Log(time_after_jump);
if (Time.time > time_after_jump)
{
isJumping = true;
}
if (isJumping)
{
Player.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 750));
isJumping = false;
}
}
private void Start()
{
Player_pos_x = Player.transform.position.x;
Player_pos_y = Player.transform.position.y;
isJumping = true;
}
我以为我写了一个正确的代码,但在console
是不是出现我想要的.
(It的打印time_after_jump
而不添加+ 1f
)。
当我第一次点击跳跃按钮时,玩家正确地跳跃。但接下来的时间它不跳。
我最大的问题是-为什么time_after_jump
打印没有
(+ 1f
)?
3条答案
按热度按时间1mrurvl11#
Debug.Log()
打印最终值,而不是变量中的表达式。在您的情况下,它打印time_after_jump
的最终值。Unity在前一行计算该值,然后打印它(因此打印11而不是打印10+1)。此外,玩家在第一次之后不跳转的原因是因为
Time.time
永远不会大于time_after_jump
,因为在检查之前向它添加1,因此第一个if永远不会被触发,因此isJumping
永远不会为true,除了第一次使用值true初始化它时。0g0grzrc2#
我相信我已经找到了这里的问题。
if(Time.time > time_after_jump)
而总是返回false
。假设Time.time = 2,time_after_jump = Time.time + 1,那么time_after_jump = 3,这意味着它总是更大。
试试这个:
虽然,我个人会使用time.deltaTime,创建一个计时器,并在跳转时重置计时器值,以便将isJumping设置为false。
例如:
然而,如果你使用一个输入来获得跳转,这会简单得多。然后当按下跳转时,你会重置计时器。
我在工作,所以这是未经测试的,但我希望你得到的想法。快乐编码。
zed5wv103#
为了让角色随着时间的推移通过AddForce跳跃,我必须在
FixedUpdate
方法中检查time_after_jump
,如果Time.time
将超过time_after_jump
,则isJumping
将为真,我可以再次跳跃我们的角色。我使用了这个代码: