好的,所以我更改了代码并添加了新的C#脚本。我检查了箱菌,它们很好。现在的问题是我跳不起来。
这是我在Move2DPlayer中所做的更改
private void Jump()
{
if (Input.GetButtonDown("Jump") && isGrounded == true)
{
gameObject.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 5f), ForceMode2D.Impulse);
}
}
这是新的c#,称为“接地”
public class Grounded : MonoBehaviour
{
GameObject Player;
private void Start()
{
Player = gameObject.transform.parent.gameObject;
}
private void Update()
{
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "Ground")
{
Player.GetComponent<Move2DPlayer>().isGrounded = true;
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.collider.tag == "Ground")
{
Player.GetComponent<Move2DPlayer>().isGrounded = false;
}
}
}
答案 0 :(得分:0)
private void FixedUpdate()
{
isGrounded = Physics2D.OverlapCircle(rb.position, checkRadius, whatIsGround);
//Rest of your stuff
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
}
好的,所以我设法得到了一个与此相关的测试项目。如果这对您不起作用,那么我唯一想到的就是您的刚体可能太大,导致OverlapCircle的碰撞检测无法正常工作。确保将checkRadius设置得足够大以实际检测地面。
答案 1 :(得分:0)
您的播放器本身可能具有Collider2D
,并且whatIsGround
的配置不正确或您的播放器层有误,所以
Physics2D.OverlapCircle(rb.position, checkRadius, whatIsGround);
总是返回true
,因为您与播放器本身发生了碰撞。
我测试了您的代码,没有任何更改,它对我有用:
但是,一些性能和其他注意事项: