如何解决防止玩家无限跳跃
我有很多问题要解决。 我看到很多指南如何解决我的问题,但他们都建议添加我的地面检查 已经有了,所以我不知道问题是什么。 当我希望我的玩家跳跃时,他会跳跃并且永不返回(他处于无限跳跃中,继续向上) 谢谢:)
代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerManager : MonoBehavIoUr
{
public float movmentSpeed;
public float jumpForce;
public Transform groundCheck;
public LayerMask groundLayer;
public bool isGrounded;
private SpriteRenderer spriteRender;
private Rigidbody2D rb2D;
private void Start()
{
rb2D = GetComponent<Rigidbody2D>();
spriteRender = GetComponent<SpriteRenderer>();
}
private void FixedUpdate()
{
PlayerMovementHandle();
}
public void PlayerMovementHandle()
{
GroundCheck();
var movement = Input.GetAxis("Horizontal");
rb2D.veLocity = new Vector2(movement,rb2D.veLocity.y)*movmentSpeed*Time.fixedDeltaTime;
Flip();
Jump();
}
void GroundCheck()
{
isGrounded = false;
Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCheck.position,0.2f,groundLayer);
if (colliders.Length>0)
{
isGrounded = true;
}
}
public void Jump()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (isGrounded)
{
// rb2D.veLocity = Vector2.up * jumpForce;
rb2D.AddForce(new Vector2(0,jumpForce),ForceMode2D.Impulse);
}
}
}
public void Flip()
{
if (rb2D.veLocity.x < -0.1f)
{
spriteRender.flipX = true;
}
else if (rb2D.veLocity.x > 0.1f)
{
spriteRender.flipX = false;
}
}
}
解决方法
在 movmentSpeed*Time.fixedDeltaTime
中乘以您的 y 值 FixedUpdate
将使您的角色沿 y 方向移动。
rb2D.velocity = new Vector2(movement,rb2D.velocity.y)*movmentSpeed*Time.fixedDeltaTime;
尝试将 y 值设为 0 并让 Jump() 方法进行跳转。
rb2D.velocity = new Vector2(movement,0f)*movmentSpeed*Time.fixedDeltaTime;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。