• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z spadaniem w Unity

0 głosów
2,225 wizyt
pytanie zadane 3 marca 2020 w OpenGL, Unity przez NewbieProgrammer Początkujący (480 p.)
zmienione kategorie 3 marca 2020 przez Patrycjerz

Cześć, mam problem z spadaniem w Unity, konkretnie chodzi o to że postać nie spada na element który jest nieruchomy. Ustawiłem RigidBody 2D oraz Collider2d na obu obiektach. oraz ustawiłem, żeby podłoga była statyczna. Ale po puszczeniu gry postać spada ale zatrzymuje się w powietrzu. Collidery są wielkości elementów, nie mam pojęcia dlaczegotak sie dzieje

1
komentarz 3 marca 2020 przez KamQiX Dyskutant (9,090 p.)
Też dopiero zaczynam zabawę z Unity, ale czemu robisz rzeczy 2D (Rigidbody 2D, Box Collider 2D) w świecie 3D? Czy przy tworzeniu projektu nie powinieneś w takim razie wybrać projektu 2D?
komentarz 3 marca 2020 przez Mariusz08 Maniak (62,280 p.)
Zła kategoria -> mamy przecież Unity
komentarz 6 marca 2020 przez NewbieProgrammer Początkujący (480 p.)

@KamQiX, 

Myślę, że wybrałem projekt 2D przy tworzeniu. Dlaczego uważasz, że jest to projekt 3D? 

komentarz 6 marca 2020 przez KamQiX Dyskutant (9,090 p.)
Bo 2D nie ma nieba, które widać u Ciebie.

2 odpowiedzi

0 głosów
odpowiedź 3 marca 2020 przez Bondrusiek Maniak (61,460 p.)
wybrane 3 marca 2020 przez NewbieProgrammer
 
Najlepsza

Nie rozumiem pytania

Ale po puszczeniu gry postać spada ale zatrzymuje się w powietrzu

To znaczy spada i nie reaguje na Obiekt statyczny(z Colliderem). Czy Obiekt "lewituje" w powietrzu?

W pierwszym przypadku to spróbuj zmienić zmienną Collision Detection na Continuous wtedy obliczenia są dokładniejsze. Za dokumentacja: https://docs.unity3d.com/Manual/class-Rigidbody2D.html

When the Collision Detection is set to Continuous, GameObjects with Rigidbody 2Ds and Collider 2Ds do not pass through each other during an update. Instead, Unity calculates the first impact point of any of the Collider 2Ds, and moves the GameObject there. Note that this takes more CPU time than Discrete.

A jeśli chodzi o drugi przypadek to problemem może być brak ustawionego Rigidbody na Dynamic bądź źle ustawiona grawitacji dla świata lub obiektu.

komentarz 3 marca 2020 przez NewbieProgrammer Początkujący (480 p.)
Chodziło o to że obiekt spada i zatrzymuje się w powietrzu, tak jak na screanshocie - nie dolatuje nawet do podłogi.

Koniec końców stworzyłem nowy projekt i zrobiłem wszystko tak samo jak za poprzednim razem (tak mi się wydaje, ale widocznie nie tak samo) i wszystko działa...

Niedługo wrócę i postaram się rozwiązać tamten problem, bo w sumie jest to ciekawe.
komentarz 3 marca 2020 przez Bondrusiek Maniak (61,460 p.)
W komponencie Collider masz przycisk editor(Na obrazku obok boxCollider), klikając na niego pojawi Ci się obszar zderzacza. Być może ten obszar jest większy niż sprite stąd lewitujący obiekt.
0 głosów
odpowiedź 6 marca 2020 przez NewbieProgrammer Początkujący (480 p.)

Chciałem dodać funkcję skakania - udało się. Ale chciałem sprawić aby postać nie mogła skakać jeśli znajduje się poza boxcollider z triggerem. Niestety po dodaniu "&& m_IsOnGround" w kodzie postać przestaje nawet skakć, dlaczego? ;/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    Rigidbody2D m_RigidbodyComponent;
    [SerializeField] int m_Speed;
    [SerializeField] int m_jumpForce;
    bool m_IsOnGround;
    // Start is called before the first frame update
    void Start()
    {
        m_RigidbodyComponent = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        m_RigidbodyComponent.velocity = new Vector2(Input.GetAxis("Horizontal") * m_Speed, m_RigidbodyComponent.velocity.y);
        if (Input.GetKeyDown(KeyCode.Space) && m_IsOnGround)
        {
            m_RigidbodyComponent.AddForce(new Vector2(0, m_jumpForce * 100));

        }

        void OnTriggerEnter2D()
        {
            m_IsOnGround = true;

        }
        void OnTriggerExit2D()
        {
            m_IsOnGround = false;
        }
    }
}

 

Podobne pytania

0 głosów
1 odpowiedź 454 wizyt
pytanie zadane 8 kwietnia 2019 w OpenGL, Unity przez lukasz290521 Obywatel (1,410 p.)
0 głosów
1 odpowiedź 1,412 wizyt
+2 głosów
4 odpowiedzi 1,181 wizyt
pytanie zadane 29 czerwca 2017 w OpenGL, Unity przez MR.X Użytkownik (860 p.)

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...