Jump to content
Unity Insider Forum

Raw_Image Texture wechseln durch Script... Leider nichts passendes gefunden...


Footloose

Recommended Posts

Hey :)

 

Ich habe nochmal eine Frage:

 

Und zwar habe ich mir ein Canvas gemacht.

Das heißt "Main_UI" und soll halt das UserInterface beinhalten.

Darin befindet sich ein Raw_Image, genannt "armed_disarmed".

 

Diesem Raw_Image kann ich ja eine Textur zuweisen.

Das ist auch nicht schwer. Nun möchte ich dieses ändern, und zwar immer wenn

der Spieler eine bestimmte Taste drückt (in diesem Beispiel "r").

 

Dann soll die Textur des raw_Image halt geändert werden.

Beide Texturen möchte ich manuell festlegen können, ohne jedes Mal den Code verändern zu müssen.

 

Meine Frage ist nun ob das so funktioniert oder ob ich das besser anders machen soll?

Ich habe häufig gelesen dass man Sprites verwenden soll, warum? Was ist an den Raw_Images

falsch?

 

Jedenfalls habe ich noch die Fehlermeldung:

"error CS0246: The type or namespace name `texture' could not be found. Are you missing a using directive or an assembly reference?"

 

Hier ist der Code:

using UnityEngine;
using System.Collections;
public class IngameUIManager : MonoBehaviour {

public bool armed;
public GameObject armed_icon;
public texture armed_pic;
public texture disarmed_pic;

void Start () {

 armed = false;

}

void Update () {

 if(Input.GetKeyDown("r")) {

  if(armed == false) {

armed = true;
armed_disarmed.texture = armed_pic;


  }
  else {

armed = false;
armed_disarmed.texture = disarmed_pic;

  }

 }

}

}

 

Hoffe ihr verzeiht mir die Anfängerfrage.

Also die Textur des raw_images soll halt geändert werden.

Dasselbe System möchte ich auch auf andere Bilder anwenden.

Das Crosshair soll zum Beispiel durch ein rotes ersetzt werden, wenn die

Waffen aktiviert werden.

 

LG Tobi :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe jetzt "Texture" statt "texture":

 

public Texture armed_pic;
public Texture disarmed_pic;

armed_disarmed.Texture = armed_pic;
armed_disarmed.Texture = disarmed_pic;

 

Leider immer noch die Fehlermeldung:

error CS1061: Type `UnityEngine.GameObject' does not contain a definition for `Texture' and no extension method `Texture' of type `UnityEngine.GameObject' could be found (are you missing a using directive or an assembly reference?)

 

Also gibt es "Texture" anscheinend auch nicht.

LG Tobi :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, du hast also eine Variable vom Typ UnityEngine.Texture namens armed_disarmed.

(Nicht) überraschenderweise hat die Klasse "Texture" aber keine Eigenschaft mit Namen "texture", nachzuschlagen hier: https://docs.unity3d.com/ScriptReference/Texture.html

 

Ich nehme stark an, du willst eigentlich ein Image haben, also ein Bild auf dem Canvas. Dessen Bild kannst du austauschen, da es eine Eigenschaft namens "sprite" gibt, der du ein anderes Sprite zuweisen kannst: https://docs.unity3d.com/ScriptReference/UI.Image-sprite.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiß das nicht so genau, bin halt noch ein ziemlicher Anfänger...

Ich habe ja bereits ein Bild drin, will halt nur dass ein anderes geladen wird wenn ich "r" drücke.

Das vorhandene also ersetzt wird.

 

Wenn ich mir das RawImage also anschaue finde ich da allerdings ein "texture".

https://docs.unity3d.com/ScriptReference/UI.RawImage.html

Da ich wie bereits erwähnt ein ziemlicher Anfänger bin kann ich damit noch nicht so viel anfangen...

 

Ich habe ja das GameObject "armed_disarmed", welches ein RamImage ist.

Deshalb dachte ich von diesem kann ich die Texture einfach mit .texture ändern.

 

Warum das nun nicht geht weiß ich nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich GameObject durch "RawImage" ersetze bekomme ich wieder den ersten Fehler, nur dann halt mit "RawImage" statt mit "texture".

 

using UnityEngine;
using System.Collections;
public class IngameUIManager : MonoBehaviour {

public bool armed;
public RawImage armed_disarmed;
public Texture armed_pic;
public Texture disarmed_pic;

void Start () {

 armed = false;

}

void Update () {

 if(Input.GetKeyDown("r")) {

  if(armed == false) {

   armed = true;
   armed_disarmed.texture = armed_pic;


  }
  else {

   armed = false;
   armed_disarmed.texture = disarmed_pic;

  }

 }

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

"(12,16): error CS0246: The type or namespace name `RawImage' could not be found. Are you missing a using directive or an assembly reference?"

 

Leider immer noch nicht ganz. Doch ich fühle es, wir sind nahe dran^^

 

Mit dem RawImage stimmt halt was nicht.

Dabei ist RawImage doch eine Klasse in der UnityEngine.UI...

 

Hier noch mal der ganze aktuelle Code:

using UnityEngine;
using System.Collections;
public class IngameUIManager : MonoBehaviour {

public bool armed;
public RawImage armed_disarmed;
public Texture armed_pic;
public Texture disarmed_pic;

void Start () {

 armed = false;

}

void Update () {

 if(Input.GetKeyDown("r")) {

  if(armed == false) {

   armed = true;
   //armed_disarmed.texture = armed_pic;
   armed_disarmed.texture = (Texture)armed_pic;


  }
  else {

   armed = false;
   //armed_disarmed.texture = disarmed_pic;
   armed_disarmed.texture = (Texture)disarmed_pic;

  }

 }

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, wenn ich eine neue Zeile

"using UnityEngine.UI;" hinzufüge

(nicht nur .UI dann

findet er MonoBehavior nicht)

dann läuft das.

 

Für alle die es interessiert wie man ein RawImage die Textur wechselt,

hier nochmal der funktionierende ganze Code:

// written by Tobias Simon
// 25-10-16
// used to manage Ingame User Interface
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class IngameUIManager : MonoBehaviour {

public bool armed;
public RawImage armed_disarmed;
public Texture armed_pic;
public Texture disarmed_pic;

void Start () {

 armed = false;

}

void Update () {

 if(Input.GetKeyDown("r")) {

  if(armed == false) {

   armed = true;
   //armed_disarmed.texture = armed_pic;
   armed_disarmed.texture = (Texture)armed_pic;


  }
  else {

   armed = false;
   //armed_disarmed.texture = disarmed_pic;
   armed_disarmed.texture = (Texture)disarmed_pic;

  }

 }

}

}

 

1001 Dank für eure Hilfe :D

Ihr seid echt ein geiles Forum, ich bleibe gerne

hier um zu lernen und später hoffentlich auch zu helfen.

 

LG Tobi ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Frage habe ich noch.

Hat nur wenig mit dem Problem zu tun, etwas aber doch.

 

Wenn ich die "r" taste drücke, wechselt das UI also nun von blau auf rot.

Das funktioniert soweit.

Jetzt möchte ich dass dann noch ein Warnton gespielt wird.

 

Dafür habe ich ein Audio Source Objekt erstellt, welchem ich eine .mp3 zugewiesen

habe.

 

Nun möchte ich halt, dass das abgespielt wird wenn "r" gedrückt wird:


   alert_audio.Play();
  // alert_audio is the name of the audio source object

 

Hier mal mein gesamter Code:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class IngameUIManager : MonoBehaviour {

public bool is_armed;

public RawImage armed_disarmed;
public RawImage crosshair;

public Texture armed_pic;
public Texture disarmed_pic;

public Texture crosshair_armed;
public Texture crosshair_disarmed;

public AudioClip alert_audio;

void Start () {

 is_armed = false;
 armed_disarmed.texture = (Texture)disarmed_pic;
 crosshair.texture = (Texture)crosshair_disarmed;

}

void Update () {

 if(Input.GetKeyDown("r")) {

  if(is_armed == false) {

   is_armed = true;
   armed_disarmed.texture = (Texture)armed_pic;
   alert_audio.Play();
   crosshair.texture = (Texture)crosshair_armed;


  }
  else {

   is_armed = false;
   armed_disarmed.texture = (Texture)disarmed_pic;
   crosshair.texture = (Texture)crosshair_disarmed;

  }

 }

}

}

 

Nun bekomme ich folgende Fehlermeldungen:

(41,45): error CS1061: Type `UnityEngine.AudioClip' does not contain a definition for `Play' and no extension method `Play' of type `UnityEngine.AudioClip' could be found (are you missing a using directive or an assembly reference?)

MissingReferenceException: The object of type 'Object' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

 

Das ist auch der Grund warum ich dies noch in diesem Post hinzufügen möchte.

Ich komme noch nicht ganz damit klar, wo genau ich die Objekte (Wie AudioClip bzw. AudioSource) genau herbekomme, bzw. wie ich das herausfinde. Ein ähnliches Problem wie zuvor also.

 

Hoffe ihr könnt mir noch einmal helfen, denn ihr seit echt ein tolles Forum :D

LG Tobi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...