Top.Mail.Ru
Ответы

Баг в 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;
        }
    }
}
Игрок пролетает сквозь препятствия.И сильно ускоряется.Как исправить? 
По дате
По рейтингу
Аватар пользователя
Мудрец
11мес

Во всех гайдах Jump надо прописывать в FixedUpdate, а не Update.
Update вызвается на каждый рендер, то есть до сотни раз в секунду и, соотвественно, ускорение может придаться объекту целую кучу раз, а не один, как ожидается.

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