我一直在遵循指南,一直在数十个论坛中徘徊,随后,我一直在扯扯掉剩下的头发!
正如您在代码中看到的那样,我尝试使用速度进行运动,并使用AddForce进行跳跃运动。如果我使用速度,它会跳得最快并且最大,我只是不希望这种情况发生。我想要一个平滑的跳跃,更现实一些,所以我看到它说使用AddForce代替。除了...。它根本不起作用,他只是现在不跳……什么都没有。
我努力工作。该代码是 rb.velocity =跳跃* jumpForce;
就像我说的那样,这行得通,但是跳得非常快,而且看起来并不正确。
public class PlayerController : MonoBehaviour
{
public float speed = 3.0f;
public float jumpForce = 4.0f;
public Rigidbody2D rb;
public Vector2 movement;
public bool isJumping;
public Animator animate;
public Vector2 jumping = new Vector2(0,1);
// Start is called before the first frame update
void Start()
{
rb = this.GetComponent<Rigidbody2D>();
//animate = this.GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
//animate.SetFloat("Horizontal", Input.GetAxis("Horizontal"));
movement = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
}
void FixedUpdate()
{
moveCharacter(movement);
jumpCharacter();
}
void moveCharacter(Vector2 direction)
{
rb.velocity = direction * speed;
}
void jumpCharacter()
{
if(Input.GetKey(KeyCode.Space) && !isJumping)
{
isJumping = true;
rb.AddForce(jumping * jumpForce);
}
}
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isJumping = false;
rb.velocity = Vector2.zero;
}
}
}
答案 0 :(得分:0)
您有Input.GetKey(KeyCode.Space)
。将GetKey
更改为GetKeyDown
。
如果您正在寻找GetKey
,则在按住键时变量将始终为true。 GetKeyDown
确保每次按下该键时代码都能运行一次。
答案 1 :(得分:0)
我遇到过和你一样的情况,我发现使用
Rigidbody2D.velocity =+ Vector2.up * force;
在 FixedUpdate()
Rigidbody2D.AddForce(Vector2.up * force);
可以工作。但我也想知道为什么 AddForce
不能正常工作。