Jump to content
Unity Insider Forum

Mouselook deaktivieren - nix einfacher als das?


Faddy

Recommended Posts

Hallo,

 

vielleicht liegt es an den späten Stunden oder ich hab grad irgendwie n Brett vorm Kopp!

 

Ich möchte, während ich eine Notiz ins GUI Blende die Bewegung deaktivieren.

Also, Mouselook deaktivieren.

 

Dachte ich, nix leichter als das. Gibts ja schließlich tausend Threads zu.

Nun habe ich folgendes Script:

 

   private MouseLook mouseLookx;
   private MouseLook mouseLooky;
   private bool mouseBreak = false;
.
.
.
void Awake () {
  	 mouseLookx= GameObject.Find("First Person Controller").GetComponent<MouseLook>();
  	 mouseLooky= GameObject.Find("Main Camera").GetComponent<MouseLook>();
   }
.
.
.
void Update () {
wenn ich ne Taste drück, dann mouseBreak true

if (mouseBreak)
{
mouseLookx.enabled = flase;
mouseLooky.enabled = false;
}
else
{
mouseLookx.enabled = true;
mouseLooky.enabled = true;
}

 

Jetzt sagte er mir aber die ganze Zeit:

NullReferenceException: Object reference not set to an instance of an object

ReadDiary.Update () (at Assets/scripts/ReadDiary.cs:45)

 

Die beiden GameObjekte besitzen jeweils ein MouseLook-Script.

Steuer ich das falsch an? Oder ist der Variablentyp MouseLook hier falsch?

 

Ich meine sogar, ich hätte das in einem früheren Projekt schon einmal so ähnlich als Pausenmenü genutzt.

 

Seh das grad aber irgendwie nicht... Oo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hier dürfte schonmal nicht kompilieren:

 

mouseLookx.enabled = flase;

 

... hast du das abgetippt oder kopiert?

 

Die Frage wäre dann auch, was genau Zeile 45 von ReadDiary ist - dort tritt die NullReferenceException ja auf. Am ehesten würde ich vermuten, dass die Objekte "First Person Controller" bzw. "Main Camera" bei dir anders heissen. Oder du hast mehrere Objekte namens "Main Camera", und das, das dir von Find geliefert wird hat kein MouseLook-Objekt.

 

Ist ohne die konkrete Szene schwer zu sagen - aber ich denke mit diesen Infos müsstest du es hinbekommen ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hier dürfte schonmal nicht kompilieren:

 

mouseLookx.enabled = flase;

 

... hast du das abgetippt oder kopiert?

 

Die Frage wäre dann auch, was genau Zeile 45 von ReadDiary ist - dort tritt die NullReferenceException ja auf. Am ehesten würde ich vermuten, dass die Objekte "First Person Controller" bzw. "Main Camera" bei dir anders heissen. Oder du hast mehrere Objekte namens "Main Camera", und das, das dir von Find geliefert wird hat kein MouseLook-Objekt.

 

Ist ohne die konkrete Szene schwer zu sagen - aber ich denke mit diesen Infos müsstest du es hinbekommen ...

 

abgetippt... steht natürlich false

 

Zeile 45 ist der Block

 

if (mouseBreak)
{
mouseLookx.enabled = flase;
mouseLooky.enabled = false;
}
else
{
mouseLookx.enabled = true;
mouseLooky.enabled = true;
}

 

Ich hab das ganze Projekt abgesucht, ob da ein zweites Mal der Name vergeben wir. Hab nix gefunden. Auch über findgamobjectwithtag und dann nach "Player", was ja auch einmalig ist. Den Namen geändert in FPC und Cam.

Hat alles nix gebracht.

 

EDIT: Hab jetzt auch mal ne neue Szene erstellt. Nur ne Plane, den First Person über Prefab, und das Objekt mit dem Script über Prefab.

Derselbe Fehler. Also doppelter Name ist wohl ausgeschlossen. :/

 

Und noch ein Edit: Hab gesehen, dass ich folgende Warnung bekomm:

Assets/scripts/ReadDiary.cs(10,17): warning CS0436: The type `MouseLook' conflicts with the imported type `MouseLook'. Ignoring the imported type definition

 

Das wären diese beiden Zeilen:

10-> private MouseLook mouseLookx;

17-> wäre eine Kommentarzeile

danach kommt

void Awake () {
  	 mouseLookx = GameObject.FindGameObjectWithTag ("Player").GetComponent<MouseLook> ();
	mouseLooky = GameObject.FindGameObjectWithTag ("MainCamera").GetComponent<MouseLook> ();
}

 

Und weils grad so schön ist, noch ein Edit:

Ich hab den ganzen Mouselook-Shizzle jetzt einfach mal mit nem Javascript als kleines Pausescript versucht. Und siehe da, es geht.

 

var isPause : boolean;
var FPS : Transform;

function Start () {

}

function Update () {

if(Input.GetKeyDown(KeyCode.E))
{
isPause = !isPause;
}

if (isPause)
{
   Time.timeScale = 0;
   FPS.GetComponent(MouseLook).enabled = false;
}
else
{
   Time.timeScale = 1;
   FPS.GetComponent(MouseLook).enabled = true;
}

}

zum testen hatte ich hier das mouselook-script auf der Cam gelöscht und dem auf dem FPC beide Achsen zugewiesen. Hab ich in C# probiert, und geht auch nicht. Dachte einen kurzen Moment, dass es das sein könnte ;)

 

Also wie gesagt, mir ging es hier ausschließlich um die mouselook-Deaktivierung.

Was muss ich den in C# machen um das funktionsfähig zu machen?

Will da jetzt deswegen nicht anfangen die Scriptsprachen zu mischen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Interessant wäre jetzt wo dein Problem jetzt ganz genau liegt..

Findest du denn überhaupt die Main Camera und den FPC? Mach einfach mal

Debug.Log(GameObject.FindGameObjectWithTag("Player"));

und guck was dabei raus kommt ^^

Oder leg ne public GameObject an und weise der das zu..

 

Wenn da was gespeichert wird, würde ich vermuten, dass es mit der Warnung zusammenhängt (die kommt mir ziemlich suspekt vor.. würde sogar direkt darauf tippen, dass die den Grund angibt)

 

Du kannst auch mal die Mouselook Variablen auf public stellen und denen direkt im Editor ihre Werte zuweisen und schaun ob's funktioniert ^^ Wobei ich jetzt echt verwundert wäre, wenn das nicht funktionieren würde ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...