Jump to content
Unity Insider Forum

uGUI (das neue) - Input Field Input abrufen


Recommended Posts

Ich beisse mir grade die Zähne am Input Field aus. Ich will bei einer Änderung des Inhalts eine Zahl auf den Wert ändern den ich da erhalte. Sprich ich muss auf Änderung checken und das Ganze über einen String und parsing verarbeiten.

 

Beim Button gibts ja ein OnMouseclick Event. Wo man das Ding dann weiter verarbeiten kann. Beim Input Field ist aber nichts dabei. Es gibt auch kein Beispiel. Und die Manual ist auch leer. Und ausgerechnet zum Thema Input Field gibt es auch kein Video.

 

Ich kann noch nicht mal den String der Editbox extrahieren. Weiss der Deibel was die sich da gedacht haben :/

 

var myinputfield:UI.InputField;
var mystring:String="";

function Update () {
       mystring=myinputfield.text;
}

 

Assets/testscript.js(10,39): BCE0022: Cannot convert 'UnityEngine.UI.Text' to 'String'.

 

Wie ist denn das Arbeiten mit dem Input Field gedacht? Hat das schon jemand hinbekommen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ha! Du warst fast richtig. Und hast mich auf die richtige Spur gebracht. Ich brauche mystring=myinputfield.text.text; :D

 

Kann man natürlich auch wieder auf mystring=myinputfield.text einkürzen wenn man oben die Variable so nennt:

 

var myinputfield:UI.Text;

 

Ich muss jedenfalls an die Textvariable des Textscriptes im UI.Inputfield ran.

 

Und ich habe auch rausgefunden wie ich das Ganze steuere. Ich muss einen Event Trigger an das Input Field anhängen. Bin allerdings immer noch auf der Suche welche Methode denn nun bedeutet dass man die Änderungen der Editbox mit Enter oder einem Mausklick bestätigt hat ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu früh gefreut. Die Methoden im Event Trigger Script sind nicht wirklich brauchbar. Ich brauche die vom Input Field. Am Besten hört sich da OnSubmit an. Aber da scheint derzeit kein Rankommen zu sein :/

 

Angeblich soll das Ding doch Open Source sein. Wo stecken denn die Scripte?

post-744-0-35453800-1408726169_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Generel kannst du auf ein UI-Element ein EventTrigger-Componet anfügen. (UpdateSelected Event auswählen)

Dann benötigist du ein Script mit einer public Methode (in C# in einer Klasse - kann sein dass es in JS Unity anders ist)

Die kann z.B. so definiert sein.

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MainEvents : MonoBehaviour {
public void ButtonEvent(GameObject sender)
{
 Debug.Log ("Sender: " + sender);
}
public void InputUpadteEventText(Text sender)
{
 Debug.Log ("Sender: " + sender.text);
}
}

 

Anschließend das GameObj. (wo das Script mit der public Methode/function) auf den Eventrigger (UpdateSelected) ziehen, oder auswählen. Dann die Methode/function auswählen und den Übergabe-Parameter definieren. Siehe Screenshot.

 

Hoffe es ist verständlich...zumindest kommst du so an die Text.text Variable

post-4299-0-12547000-1408749176_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke delspeedy,

 

Das mit dem EventTrigger habe ich ja schon. Und dann auf den Text zugreifen ist auch nicht das Problem. Das habe ich auch schon funktionierend. Ich bin nur nicht glücklich damit.

 

Denn du kannst mit dem Event Trigger Script und dessen Möglichkeiten nicht den Moment abfangen wo der User das Ganze bestätigt. Und dann wirds sehr kompliziert zum Beispiel einen Input Text zu parsen um zu checken ob der Text auch Buchstaben enthält oder nur Zahlen. Ich brauche ja den Moment in dem der User den ganzen Text eingegeben hat, und nicht bei jedem neuen Buchstaben noch mal von vorn.

 

Das Ganze ist dann auch mit UpdateSelected sehr unperformant weil er das dann jeden Loop lang macht bis die Editbox wirklich endlich deselektiert ist. Mit Enter wird zwar der Text übernommen, aber mit UpdateSelected rödelt das lustig weiter. Denn die Editbox ist immer noch ausgewählt. Und wie gesagt, den Enter Befehl kann ich nicht direkt abnehmen. Da müsste ich nun noch mal extra über Keycode rangehen. Die Workarounds werden grade länger und länger.

 

Ich sehe halt dass im Input Field genau die Methoden stecken die ich eigentlich brauche. OnSubmit zum Beispiel. Nur haben die das noch nicht angestöpselt :(

 

Zitat Tim C, seines Zeichens Unity Entwickler:

 

Hi, we will be exposing this in the next version.

 

Und die erzählen was von Beta, heh. Beta ist in der Regel Feature Complete, checken auf Bugs. Wenn noch Features dazukommen ist es eigentlich Alpha ^^

 

Jedenfalls muss ich nun wohl noch ein wenig warten. Ich hoffe mal dass die hinnemachen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem EventTrigger habe ich ja schon. Und dann auf den Text zugreifen ist auch nicht das Problem. Das habe ich auch schon funktionierend. Ich bin nur nicht glücklich damit.

 

Denn du kannst mit dem Event Trigger Script und dessen Möglichkeiten nicht den Moment abfangen wo der User das Ganze bestätigt. Und dann wirds sehr kompliziert zum Beispiel einen Input Text zu parsen um zu checken ob der Text auch Buchstaben enthält oder nur Zahlen. Ich brauche ja den Moment in dem der User den ganzen Text eingegeben hat, und nicht bei jedem neuen Buchstaben noch mal von vorn.

 

Das Ganze ist dann auch mit UpdateSelected sehr unperformant weil er das dann jeden Loop lang macht bis die Editbox wirklich endlich deselektiert ist. Mit Enter wird zwar der Text übernommen, aber mit UpdateSelected rödelt das lustig weiter. Denn die Editbox ist immer noch ausgewählt. Und wie gesagt, den Enter Befehl kann ich nicht direkt abnehmen. Da müsste ich nun noch mal extra über Keycode rangehen. Die Workarounds werden grade länger und länger.

 

Da hast du vollkommen recht, das ist nicht so toll gelöst. Das sollte eigentlich schon jetzt funtionieren, da es eine Standardfunktion von einer GUI ist. Man könnte einen Workarround schreiben, aber wenn man das auf alle verfügbaren Systeme (Windows,Mac,Linux,...) anwenden möchte ist es fast unmöglich, ohne detailierte Kenntnisse des jeweiligen Systems, was brauchbares zu coden.

Ich kenne es eben von Windows.Forms, das man für jede noch so unscheinbare Änderung am Control ein Event zur Verfügung hat.

Wenn es tatsächlich noch nicht eingebaut ist, dann würde ich evtl. nur die Daten des Inputfield weiterverarbeiten wenn eine Änderung des String, oder wenn ein Submit Button gedrückt ist.

 

Zitat Tim C, seines Zeichens Unity Entwickler:

 

 

 

Und die erzählen was von Beta, heh. Beta ist in der Regel Feature Complete, checken auf Bugs. Wenn noch Features dazukommen ist es eigentlich Alpha ^^

 

Jedenfalls muss ich nun wohl noch ein wenig warten. Ich hoffe mal dass die hinnemachen.

Hoffe die meinen mit nächster Version nicht 5.0 :wacko:

 

Edit:

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MainEvents : MonoBehaviour {
string tempInputFieldText = string.Empty;
public void InputUpadteEventText(Text sender)
{
 if (sender.text != tempInputFieldText)
 {
  tempInputFieldText = sender.text;
  Debug.Log ("InputField.text: " + tempInputFieldText);
 }
}
}

 

Mit dieser Lösung könntest du nur dann parsen wenn es nötig ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, ich weiss. Mit ein paar Workarounds würde ich da sicher irgendwie zum Ziel kommen. Aber ich glaube ich warte einfach die paar Tage bis ich auch auf die Methoden des Input Fields zugreifen kann :)

 

 

Hoffe die meinen mit nächster Version nicht 5.0 :wacko:

 

Die geht in vier bis acht Wochen angeblich an die Betatester. Also nix diesen Sommer mit Release der 5er. Ich seh das eher gegen Weihnachten oder noch später.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die geht in vier bis acht Wochen angeblich an die Betatester. Also nix diesen Sommer mit Release der 5er. Ich seh das eher gegen Weihnachten oder noch später.

 

Dachte die 4.6 mit der uGUI sollte Ende diesen Sommer kommen. Da war von der 5.0 Version noch keine Rede - soweit ich weiss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

kann mir mal einer sagen wie ich die Texturinfos bekomme auf der ich geklickt habe?

Es geht um ein Inventar, da ich jetzt doch gleich das neue GUI-System nehmen möchte.

 

Was soll gehen?

Ich möchte in einen "Slot" klicken und die Textur an der Maus haben.

 

Mit der mitgelieferten Methode Image.sprite und Event PointerClick kann ich ja schon mal die Textur im Slot gegen eine leere austauschen.

--->Schritt 1 erledigt, da die aus dem Slot ja dann an der Maus hängen soll.

 

Nur leider habe ich keine Ahnung wie ich bei den neuen System auf die Infos der Textur zugreifen kann und wäre über eure Hilfe sehr erfreut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist recht leicht.

Der Button ist ein ganz normales GameObjekt und das Image ist ein Script, also eine Component des GO's.

Die Grafik auf dem Button ist ein Sprite, somit kannst du z.B. sowas machen:

 

private Sprite mausBild;
public GameObject invButton; // zum Testen den Button einfach mal im Inspector hier ablegen
void Update(){
  if(Irgendwas was merkt, dass du auf den Button geklickt hast){
  mausBild=invButton.GetComponent<Image>().sprite;
  }
}

 

Ist ungetestet, sollte aber so gehen.

 

EDIT: Du musst unbedingt im Header des Scriptes

using UnityEngine.UI

einfügen, sonst kennt er das nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Boar malzbie mein Retter... :wub:

Hab die Reference vergessen. Ewig gesucht im Netz.

 

Danke Dir.

 

Man kann auch einen Event Trigger drauflegen der dann die if übernimmt.

Im Trigger kann man dann ein GameObjekt mit Skript ziehen und beliebige Sachen, unter anderem public Methoden in dem Skript ausführen.

 

Danke nochmal. Jetzt sollte es funktionieren :D

post-2150-0-82061000-1409416017_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...