Unity3d - 跳转碰撞功能
Unity3d - Jump in collision function
我希望我的角色只有在他站在地上时才会跳跃。尽管我写了碰撞函数,但当我按下键时他不会跳。有什么问题?
void OnCollisionEnter2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
}
}
只有当您 输入 地面触发器时,您才触发您的操作(您正在实现的功能是 OnCollisionEnter2D
)。仅当您在对撞机与 groundTag
对象发生碰撞的同一帧上按下 space 键时,您的功能才有效。
您可以尝试使用 OnCollisionStay2D
或使用 CharacterController;这应该会使角色的实现更容易一些。
OnCollisionEnter2D 只会在与地面碰撞时运行(单帧)。可能您需要为此条件创建一个布尔值。这可能不是最佳选择。当它与地面碰撞时使其为真,当它离开地面时使其为假。然后在更新函数中编写代码。
bool _canJump;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
_canJump = true;
}
}
void OnCollisionExit2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
_canJump = true;
}
}
我希望我的角色只有在他站在地上时才会跳跃。尽管我写了碰撞函数,但当我按下键时他不会跳。有什么问题?
void OnCollisionEnter2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
}
}
只有当您 输入 地面触发器时,您才触发您的操作(您正在实现的功能是 OnCollisionEnter2D
)。仅当您在对撞机与 groundTag
对象发生碰撞的同一帧上按下 space 键时,您的功能才有效。
您可以尝试使用 OnCollisionStay2D
或使用 CharacterController;这应该会使角色的实现更容易一些。
OnCollisionEnter2D 只会在与地面碰撞时运行(单帧)。可能您需要为此条件创建一个布尔值。这可能不是最佳选择。当它与地面碰撞时使其为真,当它离开地面时使其为假。然后在更新函数中编写代码。
bool _canJump;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb2d.AddForce(new Vector2(rb2d.velocity.x, Jumpforce));
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
_canJump = true;
}
}
void OnCollisionExit2D(Collision2D col)
{
if (col.collider.tag == "groundTag")
{
_canJump = true;
}
}