Jump to content
Unity Insider Forum

Wie macht man ein Gameobjekt unsichtbar?


Unityanfang

Recommended Posts

Ich weiß, dass es eine simple Frage ist und es mit dem Renderer zusammenhängt. Leider finde ich im Internet keine funktionsfähige Möglichkeit:

 

renderer.enabled = false;

 

Funktioniert nicht, weil kein Objekt angegeben ist.

 

gameobjekt.enabled = false;

 

"Ist ein Typ, wird aber als Variable benutzt". Fehlermeldung... Lösungen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grundätzliche Herangehensweise an alle Probleme in Unity: Such dir die zuständige Komponente mit GetComponent und schmaiße irgendwas entgegen!

Mach das noch schön mit Component Caching, dann sieht's so aus:

private Renderer renderer;

void Awake()
{
 renderer = GetComponent<Renderer>();
}

und dann geht an beliebiger Stelle auch:

renderer.enabled = false;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Komischer weise wird es trotzdem nicht ausgeblendet.

 

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Namenprüfen : MonoBehaviour {
public string charaktername;

public Text nameprüfen;
private Renderer renderer;

void Awake () {

 charaktername = nameprüfen.text;
 PlayerPrefs.SetInt ("New", 2);

 renderer = GetComponent<Renderer> ();
 renderer.enabled = false;

 print ("Renderer ausgestellt!");

}
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Sascha

Nein, es gibt keine Fehlermeldung

 

@MarcoMeter

Doch, ich habe das Script an das Panel angehangen. Trotzdem wird es nicht "unsichtbar".

 

---------

 

Gerade noch etwas herum getüftelt. Problem halbwegs gelöst. Die Fehlermeldung hab ich nun wegbekommen, indem ich einfach ein Renderer an das empty GameObject, mit dem Skript drinne, gefügt habe. Nun ist aber das "empty" GameObject unsichtbar und nicht das Bild, dass eig. weg sollte ._. :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jetzt gibt es nur das Problem. Wie kann ich den Teil ausführen?

 

public Text nameprüfen; charaktername = nameprüfen.text;

 

Das Problem ist nämlich, dass ich das Skript ohne GameObject an ein Gameobject gefügt habe und so jetzt nicht mehr den Text auswählen kann, von welchem er sich den namen holen soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst, anstatt das komplette GameObject zu deaktivieren, einzelne Komponenten deaktivieren. Beispielsweise könnte das die Image Komponente betreffen.

 

Alternativ kannst du den Inhalt vom Text in einer anderen Variablen speichern, die nicht zu einer Komponente des zu deaktivierenden GameObjects gehört. Beispielsweise könntest du die PlayerPrefs nutzen, um den Namen des Charackters zu speicher und zu laden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, ich hole mal weiter aus:

 

Ich habe ein Panel mit einem Image-UI, das Image-UI hat ein Button-Component und außerdem noch ein Input Field, in welches der Name eingegeben werden soll. Das Panel mit dem Knopf und dem Feld soll eingeblendet werden und nach Eingabe eines Names, der per Knopfdruck bestätigt werden soll, wieder ausgeblendet werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn wir schon dabei sind. Was bedeuten die Fehler unten links in der Console? >.>

 

Es kann sein, dass in deinem Script LevelManager.cs der Import der UnityEngine fehlt:

using UnityEngine;

 

Deine Hierarchy sieht ziemlich chaotisch aus. Sinnvollere Namen für die GameObjects wären von Vorteil. Gut wäre es auch, wenn du Struktur darein bekommst, damit zusammengehörige UI auch erkennbar ist wie in diesem Beispiel:

post-2810-0-55192600-1470495203_thumb.png

 

In dem Beispiel bräuchte ich mit dem Button Click Event des BackButtons nur das OptionsMenu deaktivieren und das MainMenu aktivieren. Die Logik und Funktionen für das UI sollten dann auf den übergeordneten Objekten erfolgen. Also beispielsweise auf OptionsMenu oder MainMenu. Das soll jetzt ein Tipp sein, welcher der Übersicht dient und dadurch die Wartbarkeit vereinfacht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

void Update () {
 if (Input.GetKeyUp (KeyCode.C)) {
  if (yn != 2) {  
   yn = 2;print ("2");
  } else {
   yn = 1;print ("1");
  }
  LoadLevelb();
 }
 if (Input.GetKeyUp (KeyCode.V)) {
   if (yn != 3) {  
 yn = 3;
 print ("3");
   } else {
   yn = 1;print ("1");
   } 
   LoadLevelb();
  }
 if (Input.GetKeyUp (KeyCode.N)) {
   if (yn != 4) {  
 yn = 4;
 print ("4");
   } else {
   yn = 1;print ("1");
   } 
   LoadLevelb();
  }
 if (Input.GetKeyUp (KeyCode.I)) {
   if (yn != 5) {  
 yn = 5;
 print ("5");
   } else {
   yn = 1;print ("1");
   } 
   LoadLevelb();
  }
 if (Input.GetKeyUp (KeyCode.H)) {
   if (yn != 6) {  
 yn = 6;
 print ("6");
   } else {
   yn = 1;print ("1");
   } 
   LoadLevelb();
  }
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...