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

Object reference not set to an instance of an object - Problem z kodem.

Object Storage Arubacloud
0 głosów
1,987 wizyt
pytanie zadane 28 października 2018 w C# przez DreaM Użytkownik (840 p.)

Witam. Stworzyłem prosty skrypt odpowiedzialny za poruszanie się kamery za graczem.

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

public class CameraMove : MonoBehaviour
{

    public Transform player;
    public Transform cameraa;
    public int cameravalue = 1;

    public void Update()
    {

        if (cameravalue == 1)
        {
            Vector3 vector = new Vector3(3f, 2.5f, 0);
            moveCamera(vector);
        }

        else if (cameravalue == 2)
        {

            Vector3 vector = new Vector3(3f, 5.5f, 0);
            moveCamera(vector);
        }

        Debug.Log(cameravalue);
    }
    void moveCamera(Vector3 vector)
    {
        Vector3 newPosition = player.position + vector;
        cameraa.position = Vector3.Lerp(cameraa.position, newPosition, Time.deltaTime * 2f);
        cameraa.LookAt(player);
    }
}

Oraz stworzyłem dwa dodatkowe skrypty. Ich zadaniem jest ustawianie dla zmiennej "cameravalue" odpowiedniej wartości gdy gracz wejdzie w daną kolizję: 

Tak prezentuje się drugi skrypt:

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

public class Cam2 : MonoBehaviour {

    private void OnTriggerEnter(Collider other)
    {
        var cam = other.GetComponent<CameraMove>();
        cam.cameravalue = 2;
    }
}

Błąd pojawia się dopiero w unity gdy gracz wejdzie w kolizję. Dokładny błąd to:

NullReferenceException: Object reference not set to an instance of an object
Cam2.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Cam2.cs:10)

Ktoś wie jak rozwiązać ten błąd? Może robię coś po prostu źle. Ogólnie chodzi mi o to by drugi skrypt "cam2" ustawiał dla zmiennej znajdującej się w pierwszym skrypcie "CameraMove" wartość "2" dla zmiennej "cameravalue" gdy gracz wejdzie w kolizję z obiektem. 

1
komentarz 28 października 2018 przez swetroniusz Użytkownik (540 p.)

Hej!
Przyczyna jest prosta - próbujesz zmienić pole obiektu, którego nie ma w pamięci. Cam ma wartość null, ponieważ wywołanie other.GetComponent<CameraMove>(); zwróciło null.
Dokumentacja unity o GetComponent<Type>() mówi: Returns the component of Type type if the game object has one attached, null if it doesn't - przekładając to na twój kod, obiekt z którym następuje kolizja nie ma podpiętego komponentu CameraMove.

PS Więcej ci nie podpowiem, bo programuję w C++/UE4 (ten konkretny błąd - zmienianie wartości niezdefiniowanego obiektu - występuje również w C++)

komentarz 29 października 2018 przez DreaM Użytkownik (840 p.)
Dziękuję. Pomogłeś mi rozwiązać problem.

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

Podobne pytania

0 głosów
1 odpowiedź 301 wizyt
0 głosów
1 odpowiedź 1,643 wizyt
0 głosów
1 odpowiedź 511 wizyt

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 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!

...