Footloose Geschrieben 24. Oktober 2016 Melden Share Geschrieben 24. Oktober 2016 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 More sharing options...
Zer0Cool Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Ich denke du wolltest "Texture" verwenden (texture gibt es nicht als Typ und daher die FM). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 Das wäre auf jeden Fall ein Fehler der nach mir klingt. Werde ich nachher Zuhause mal ausprobieren. Danke LG Tobi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 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 More sharing options...
Helishcoffe Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Probiers mal so: public Texture armed_pic; public Texture disarmed_pic; armed_disarmed.texture = armed_pic; armed_disarmed.texture = disarmed_pic; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 Dann bekomme ich dieselbe Fehlermeldung nur dass da dann "texture" drin steht statt "Texture"... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Also eigentlich müsstest du erst einmal eine Fehlermeldung kriegen, weil "armed_disarmed" nirgendwo definiert ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 Achso ja hab ich vergessen zu sagen. Ich habe "armed_icon" zu "armed_disarmed" geändert, deswegen kommt die Fehlermeldung nicht Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 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 More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 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 More sharing options...
Sascha Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Also in deinem Code oben hast du keine Variablen vom Typ RawImage. Poste bitte mal deinen aktuellen Code. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 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 More sharing options...
Zer0Cool Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Sollte gehen, probiere mal: armed_disarmed.texture = (Texture)armed_pic; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 "(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 More sharing options...
Sascha Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 using UnityEngine.UI; ganz oben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 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 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 More sharing options...
Footloose Geschrieben 25. Oktober 2016 Autor Melden Share Geschrieben 25. Oktober 2016 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 LG Tobi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 25. Oktober 2016 Melden Share Geschrieben 25. Oktober 2016 Du kannst nicht den Clip mit Play() starten, sondern nur eine AudioSource! public AudioSource alert_audio; Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Footloose Geschrieben 26. Oktober 2016 Autor Melden Share Geschrieben 26. Oktober 2016 Das funktioniert Super! Dann kann ich ja weitermachen. Bestimmt werde ich mich nochmal melden LG Tobi Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.