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

Ubity - Rigidbody przestaje działać po drugim wczytaniu sceny

Aruba Cloud - Virtual Private Server VPS
0 głosów
213 wizyt
pytanie zadane 4 lipca 2019 w Systemy operacyjne, programy przez niezalogowany

Witam,

Tak jak w temacie - rigidbody przestaje działać po drugim wczytaniu sceny. Za pierwszym razem jest wszystko dobrze, ale po wczytanie kolejnej sceny i powrocie do poprzedniej już nie działa. Pozostała część kodu znajdująca się w tej metodzie nadal działa.

Linijka kodu która przestaje działać:

            rBody.AddForce(new Vector3(0, -speed, 0), ForceMode.Impulse);

 

Ktoś wie jak to rozwiązać?

komentarz 4 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Może więcej informacji?

Jak wczytujesz scenę? Asynchronicznie?

Obiekt ma 'DontDestroyOnLoad'?
komentarz 5 lipca 2019 przez niezalogowany
edycja 5 lipca 2019

Scenę próbowałem wczytać na oba sposoby.

Obiekt nie ma DontDestroyOnLoad.

Tym obiektem jest kamera w menu 2d z dodanym komponentem RB3d. Może to przez to?

Pozostała część skryptu działa tak jak powinna, tyko że kamera się nie przemieszcza.

To znaczy działa za pierwszym razem ale jak wczytam grę i z gry wrócę z powrotem do menu to już się nie przemieszcza.

Wcześniej miałem że kamera po prostu zmienia swoją pozycję i działało tak jak powinno więc musi mieć to jakiś związek z Rigidbody.

Edit: Zmieniłem na RB2D i nadal nie działa.

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

public class MenuCamera : MonoBehaviour
{
    private Rigidbody rBody;

    public float speed;

    public int pozycja = 0;
    public static int slot = 2;




    private void Start()
    {
        rBody = GetComponent<Rigidbody>();
    }




    void Update()
    {
        //wyjscie
        if (pozycja == 0 && Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }



        // wczytywanie save
        if (pozycja == 1 && slot == 1 && Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadSceneAsync(1);
        }

        if (pozycja == 1 && slot == 2 && Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadSceneAsync(1);
        }

        if (pozycja == 1 && slot == 3 && Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadSceneAsync(1);
        }



        //przemieszczenie
        if (pozycja == 0 && Input.GetKeyDown(KeyCode.Space))
        {
            pozycja = 1;
            rBody.AddForce(new Vector3(0, -speed, 0), ForceMode.Impulse);
        }

        if (pozycja == 1 && Input.GetKeyDown(KeyCode.Escape))
        {
            pozycja = 0;
            rBody.AddForce(new Vector3(0, speed, 0), ForceMode.Impulse);
        }



        //zmiany slota
        if (pozycja == 1 && Input.GetKeyDown(KeyCode.D))
        {
            if(slot == 3)
            {
                slot = 1;
            }
            else
            {
                slot += 1;
            }
        }

        if (pozycja == 1 && Input.GetKeyDown(KeyCode.A))
        {
            if (slot == 1)
            {
                slot = 3;
            }
            else
            {
                slot -= 1;
            }
        }

    }
}

 

komentarz 5 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Czy ja dobrze rozumiem?

Masz Scena1 i Scena2. W Scena1 masz kamerę która ma przypięty ten skrypt. Jak przechodzisz do Scena2, a później z tamtąd wracasz do Scena1, kamera nie porusza się tak?

Właduj Scena2 normalnie [ LoadScene(2); ] i później do wróć do Scena1 także normalnie.
komentarz 5 lipca 2019 przez niezalogowany
Tak, dobrze rozumiesz.

Robiłem już w ten sposób i kamera nadal się nie poruszała.

Masz jeszcze jakiś pomysł? Albo inny sposób na poruszanie kamerą?
komentarz 6 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)

No bo wczytujesz scenę na nowo, czyli znowu musisz spełniać te warunki:

if (pozycja == 0 && Input.GetKeyDown(KeyCode.Space))
        {
            pozycja = 1;
            rBody.AddForce(new Vector3(0, -speed, 0), ForceMode.Impulse);
        }
 
        if (pozycja == 1 && Input.GetKeyDown(KeyCode.Escape))
        {
            pozycja = 0;
            rBody.AddForce(new Vector3(0, speed, 0), ForceMode.Impulse);
        }

 

komentarz 6 lipca 2019 przez niezalogowany
edycja 6 lipca 2019
No i je spełniam. Zmienna "pozycja" jest na starcie ustawiona na 0, a spacje muszę wciskać sam.

Poza tym w unity widzę że po wciśnięciu spacji lub esc zmienna "pozycja" się zmienia i w ogóle wszytko działa poza poruszaniem kamery.
komentarz 7 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Obiekt zmienia swoją pozycję?

Daj ustawienia z RigidBody
komentarz 7 lipca 2019 przez niezalogowany

Nie zmienia się pozycja kamery tylko zmienna "pozycja" którą tak nazwałem. Chodziło mi o to czy kamera jest u góry czy na dole; 0 lub 1.

 

To ustawienia RB i skryptu który dałem wcześniej. Poza kilkoma obrazkami nic więcej nie znajduje się na tej scenie.

komentarz 8 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Zmienną rBody daj jako publiczną i sprawdź czy jest nie jest pusta, gry drugi raz wczytujesz scenę.

Jakieś błędy w konsoli?
komentarz 9 lipca 2019 przez niezalogowany
Zmienna rBody nie jest pusta po drugim wczytaniu.

Nie ma żadnych błędów w konsoli.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 109 wizyt
pytanie zadane 26 kwietnia 2020 w C# przez Mariner Nowicjusz (140 p.)
0 głosów
3 odpowiedzi 632 wizyt
pytanie zadane 16 grudnia 2015 w C# przez vverum Gaduła (4,340 p.)
0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 31 maja 2022 w C# przez Routa Nowicjusz (160 p.)

93,336 zapytań

142,332 odpowiedzi

322,418 komentarzy

62,672 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...