Błąd NullReferenceException 5516 8

O temacie

Autor Nekron197

Zaczęty 3.05.2013 roku

Wyświetleń 5516

Odpowiedzi 8

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Witam.
Napisałem sobie kod postaci, aby się ruszała. Niestety wywala mi w unity jakiś dziwny błąd o takiej treści:
NullReferenceException: Object reference not set to an instance of an object
ZaawansowanyRuchZolnierza.Update () (at Assets/Skrypty/ZaawansowanyRuchZolnierza.cs:34)
Nie rozumiem oco chodzi w tym wpisie.

Oto kod ruchu:
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(CharacterController))]

public class ZaawansowanyRuchZolnierza : MonoBehaviour
{
public float PredkoscObrotu = 200;
public float PredkoscRuchu = 2;
public float PredkoscBiegu = 5;
public float Grawitacja = 20;

private Transform TransformacjaGracza;
private CharacterController Kontroler;
private Vector3 KierunekRuchu = Vector3.zero;


// Use this for initialization
void Start ()
{
TransformacjaGracza = transform;
Kontroler = GetComponent<CharacterController>();
animation.wrapMode = WrapMode.Loop;
animation.CrossFade("Idle1");



}

// Update is called once per frame
void Update ()
{

if(Kontroler.isGrounded)
{
KierunekRuchu = new Vector3(0, 0, Input.GetAxis("RuchPrzodTyl"));
KierunekRuchu = TransformacjaGracza.TransformDirection(KierunekRuchu);
KierunekRuchu = KierunekRuchu * PredkoscRuchu;


if(Input.GetButton("RuchLewoPrawo"))
{
//Debug.Log ("Nareszcie Ruszasz Tylek" + Input.GetAxis("RuchLewoPrawo"));
TransformacjaGracza.Rotate(0, Input.GetAxis("RuchLewoPrawo") * PredkoscObrotu * Time.deltaTime , 0);
}


if(Input.GetButton("RuchPrzodTyl"))
{
Ruch ();

if(Input.GetButton("Bieg"))
{
Bieg ();
KierunekRuchu = KierunekRuchu * PredkoscBiegu;
}

}
else
{
animation.CrossFade("Idle1");
}


}
else

{
KierunekRuchu.y -= Grawitacja;
}
Kontroler.Move(KierunekRuchu * Time.deltaTime);

}


public void Ruch()
{
animation.CrossFade("WalkForward");
animation["WalkForward"].speed = 1.3f;
}
public void Bieg()
{
animation.CrossFade("RunForward");
animation["RunForward"].speed = 2.5f;

}
}
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
No, masz nulla. Nie zainicjowałeś gdzieś obiektu.

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
[quote author=Adanos#msg date=1367580577e = WrapMode.Loop;
   animation.CrossFade("idle");
   }
   
   // Update is called once per frame
   void Update ()
   {
      if(Kontroler.isGrounded)
      {
         KierunekRuchu = new Vector3(0, 0, Input.GetAxis("RuchPrzodTyl"));
         KierunekRuchu = TransformacjaGracza.TransformDirection(KierunekRuchu);
         KierunekRuchu = KierunekRuchu * Szybkosc_Ruchu;   
         
      if(Input.GetButton("RuchLewoPrawo"))
      {
      //Debug.Log ("Nareszcie Ruszasz Tylek" + Input.GetAxis("RuchLewoPrawo"));
      TransformacjaGracza.Rotate(0, Input.GetAxis("RuchLewoPrawo") * Szybkosc_Obrotu * Time.deltaTime , 0);      
      }
      if(Input.GetButton("RuchPrzodTyl"))
         {
         Ruch ();
      
         if(Input.GetButton("Bieg"))
         {
         Bieg();
         KierunekRuchu = KierunekRuchu * Szybkosc_Biegu;
         }
            
         }
         else
         {
         animation.CrossFade("idle");   
         }

         
      
      }
      else
      {
      KierunekRuchu.y -= grawitacja;   
      }
      Kontroler.Move(KierunekRuchu * Time.deltaTime);
   }
   
   
   public void Ruch()
   {
   animation.CrossFade("walk");   
   animation["walk"].speed = 1.2f;
   }
   public void Bieg()
   {
   animation.CrossFade("run");   
   animation["run"].speed = 1.3f;
   }
}
[/code]
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
34. wiersz, to
if(Kontroler.isGrounded)
więc pewnie Kontroler jest nullem.

Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Tylko, że przecież zdefiniowałem kontrolera, więc czemu akurat to?! W innym projekcie nie było błędów z tym skryptem, a zrobiłem nowy i nagle Null na czymś co jest zrobione niby dobrze.
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Błąd NullReferenceException
#5 2013-05-03, 13:53(Ostatnia zmiana: 2013-05-03, 13:55)
Użyj debugera, albo sprawdzaj w metodzie Update, czy Kontroler nie jest nullem. A może po prostu źle wywołujesz?

Jesteś pewien, że metoda Update jest wywoływana przed Start? Inicjalizacja obiektów, moim zdaniem, powinna być w konstruktorze.


Nekron197

Nekron197

Użytkownicy
posty192
Propsy13
  • Użytkownicy
Faktycznie kontroler jest nullem, ale jak to naprawić?


EDIT

Rozwiązane. Wystarczyło dodać Character Controller. Nie zwróciłem na to uwagi ponieważ ostatnio CharacterController zaimportował mi skrypt
 

Sawik

Sawik

Użytkownicy
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Użytkownicy
  • Rebel
:mellow:
A wczoraj pisałeś ze dasz rade napisać RPG = |
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry