Баг в unity
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float speed;
public float jumpForce;
private bool isGrounded;
private Rigidbody2D rigidbody2d;
public void Start()
{
rigidbody2d = GetComponent<Rigidbody2D>();
}
public void Update()
{
Vector3 position = transform.position;
position.x += Input.GetAxis("Horizontal") * speed;
transform.position = position;
if(Input.GetKeyDown(KeyCode.Space))
{
Jump();
}
}
private void Jump()
{
if(isGrounded)
{
isGrounded = false;
rigidbody2d.AddForce(transform.up * jumpForce,ForceMode2D.Impulse);
}
}
public void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "Ground")
{
isGrounded = true;
}
}
}
Игрок пролетает сквозь препятствия.И сильно ускоряется.Как исправить?
По дате
По рейтингу
Во всех гайдах Jump надо прописывать в FixedUpdate, а не Update.
Update вызвается на каждый рендер, то есть до сотни раз в секунду и, соотвественно, ускорение может придаться объекту целую кучу раз, а не один, как ожидается.
OnCollisionEnter2D может быть вызван несколько раз, если объект остается на земле или двигается по ней. Например, при постоянном контакте с землей метод будет вызываться при каждом обновлении физики/кадра.
Больше по теме