Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Баг в unity

Валерий Чепрасов Ученик (122), на голосовании 3 месяца назад
 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();
}

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;
}
}
}
Игрок пролетает сквозь препятствия.И сильно ускоряется.Как исправить?
Голосование за лучший ответ
Manunich Мудрец (15891) 4 месяца назад
Во всех гайдах Jump надо прописывать в FixedUpdate, а не Update.
Update вызвается на каждый рендер, то есть до сотни раз в секунду и, соотвественно, ускорение может придаться объекту целую кучу раз, а не один, как ожидается.

OnCollisionEnter2D может быть вызван несколько раз, если объект остается на земле или двигается по ней. Например, при постоянном контакте с землей метод будет вызываться при каждом обновлении физики/кадра.
Похожие вопросы