玩家跳跃时的 Unity Tag 和 Collider 问题
Unity Tag and Collider problem while player is jumping
这是我的播放器的跳转代码:
void Update()
{
float oldmoveHorizontal = moveHorizontal;
moveHorizontal = Joystick.Horizontal;
moveVertical = Joystick.Vertical;
if (isJumping == false && moveVertical >= .7f)
{
moveVertical = Speed * 70;
isJumping = true;
}
ball_move = new Vector2(moveHorizontal, moveVertical);
ball_rigid.AddForce(ball_move);
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ground")
{
isJumping = false;
}
}
}
当球碰到对撞机下方时,它可以再次跳跃。我怎样才能阻止这种情况?
如果下载不了:https://ibb.co/yVgXmrM
一个解决方案是检查碰撞的碰撞点的位置,看看它们中的任何一个是 "low enough" 从你的玩家的中心是一个可跳跃的碰撞:
private Collider2D playerCollider;
private float playerJumpableOffset = 0.001;
void Start() { playerCollider = GetComponent<Collider2D>(); }
void OnCollisionEnter2D(Collision2D col)
{
float jumpableWorldHeight = transform.position.y - playerJumpableOffset;
for (int i = 0 ; i < col.contactCount && isJumping; i++)
{
Vector2 contactPoint = col.GetContact(i).point;
if (contactPoint.y <= jumpableWorldHeight)
{
isJumping = false;
}
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ground")
{
foreach (ContactPoint2D item in col.contacts)
{
Debug.Log("Normal:" + item.normal);
if (item.normal.y > 0 && col.gameObject.tag == "Ground")
{
isJumping = false;
Debug.Log("Top of Collider");
}
}
}}
我通过检查对撞机的顶部找到了解决方案。
使用此代码方式,如果玩家触摸 collider 的顶部,它将再次激活跳跃。
这是我的播放器的跳转代码:
void Update()
{
float oldmoveHorizontal = moveHorizontal;
moveHorizontal = Joystick.Horizontal;
moveVertical = Joystick.Vertical;
if (isJumping == false && moveVertical >= .7f)
{
moveVertical = Speed * 70;
isJumping = true;
}
ball_move = new Vector2(moveHorizontal, moveVertical);
ball_rigid.AddForce(ball_move);
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ground")
{
isJumping = false;
}
}
}
当球碰到对撞机下方时,它可以再次跳跃。我怎样才能阻止这种情况?
如果下载不了:https://ibb.co/yVgXmrM
一个解决方案是检查碰撞的碰撞点的位置,看看它们中的任何一个是 "low enough" 从你的玩家的中心是一个可跳跃的碰撞:
private Collider2D playerCollider;
private float playerJumpableOffset = 0.001;
void Start() { playerCollider = GetComponent<Collider2D>(); }
void OnCollisionEnter2D(Collision2D col)
{
float jumpableWorldHeight = transform.position.y - playerJumpableOffset;
for (int i = 0 ; i < col.contactCount && isJumping; i++)
{
Vector2 contactPoint = col.GetContact(i).point;
if (contactPoint.y <= jumpableWorldHeight)
{
isJumping = false;
}
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ground")
{
foreach (ContactPoint2D item in col.contacts)
{
Debug.Log("Normal:" + item.normal);
if (item.normal.y > 0 && col.gameObject.tag == "Ground")
{
isJumping = false;
Debug.Log("Top of Collider");
}
}
}}
我通过检查对撞机的顶部找到了解决方案。 使用此代码方式,如果玩家触摸 collider 的顶部,它将再次激活跳跃。