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

Problem z spadaniem w Unity

Object Storage Arubacloud
0 głosów
1,467 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,300 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,370 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,370 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ź 264 wizyt
pytanie zadane 8 kwietnia 2019 w OpenGL, Unity przez lukasz290521 Obywatel (1,410 p.)
0 głosów
1 odpowiedź 812 wizyt
+2 głosów
4 odpowiedzi 681 wizyt
pytanie zadane 29 czerwca 2017 w OpenGL, Unity przez MR.X Użytkownik (860 p.)

92,592 zapytań

141,441 odpowiedzi

319,702 komentarzy

61,975 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...