Jump to content
Unity Insider Forum

Sascha

Administrators
  • Content count

    11,064
  • Joined

  • Last visited

  • Days Won

    500

Sascha last won the day on March 18

Sascha had the most liked content!

Community Reputation

2,223 Excellent

5 Followers

About Sascha

  • Rank
    Community Manager
  • Birthday 08/13/1990

Contact Methods

  • Website URL
    http://www.indiepowered.net

Profile Information

  • Gender
    Male
  • Location
    Hamburg
  • Interests
    Programmierung

Recent Profile Visitors

34,492 profile views
  1. Sascha

    scene view in editor window anzeigen

    Ach, du willst einfach eine Asset-Vorschau haben? Da dürfte dir das hier helfen: https://docs.unity3d.com/ScriptReference/AssetPreview.html
  2. Sascha

    scene view in editor window anzeigen

    Dazu gibt's schon Versuche von Unity, wenn auch für einen anderen Kontext. Geht leider alles nicht so einfach, weil das, was in der Scene View angezeigt wird, auch in der Hierarchie zu sehen ist. Solcherlei Probleme hindern Unity daran, dir zwei Scene Views zu geben, die unterschiedliche Dinge anzeigen.
  3. Okay... ist für mich schwer zu entscheiden, wo ich ansetzen soll. Einerseits kommt einige Verwirrung daher, dass deine Schleifenvariable ("Durchlauf") keine lokale Variable ist, sondern auch nach Beendigung deines Schleifencodes weiterhin bestehen bleibt und du deshalb manuell den Wert zurücksetzt. Aber anstatt darauf einzugehen, würde ich lieber noch ein, zwei Schritte zurückgehen und darauf hinweisen, dass es mehr Datensammelstrukturen als Listen gibt. Wenn dein Ziel ist, eine Sammlung von Elementen zu haben, in der kein Element doppelt vorkommt, und du willst wissen, ob ein bestimmtes Element drin ist oder nicht, empfiehlt sich ein HashSet. Das entspricht nämlich genau dem mathematischen Konzept einer Menge und erlaubt dir superfixes Nachschauen, ob ein Element schon drin ist. Zwar hat die Liste auch eine "Contains"-Funktion, aber es gibt gute Gründe, bei einer solchen Situation das Set zu nehmen. Performance ist nur einer davon, und nicht einmal der beste Hier ein Beispiel, wie man HashSets benutzt: var menge = new HashSet<int>(); menge.Add(5); menge.Add(10); Debug.Log(menge.Contains(5)); // true
  4. Sascha

    scene view in editor window anzeigen

    Ich würde sagen: Mach halt ne Scene View auf. Du kannst mit [ExectureInEditMode] ein Script auch außerhalb des play modes laufen lassen. Ansonsten gibt's noch EditorApplication.update. Kannst einfach eine zweite Game View öffnen.
  5. Wenn das nicht eine unschöne Veränderung für deinen Code bedeutet, kannst du ein Struct verwenden, da diese sich ein- und ausklappen lassen. [System.Serializable] private struct SpeedSettings { public float speed; public float acceleration; } [SerializeField] private SpeedSettings speedSettings; DoSomethingWith(speedSettings.speed); Ansonsten geht so etwas nur mit einem eigenen Inspector. Alternativ auch mit so etwas wie Odin, wenn du dich da reinfuchsen willst. Der Inspector könnte etwa so ausshen: [CustomEditor(typeof(YourClassName))] public class YourClassNameEditor : Editor { private bool open = false; public override void OnInspectorGUI() { serializedObject.Update(); open = EditorGUILayout.Foldout(open, "Show My Variable"); if (open) { EditorGUILayout.PropertyField(serializedObject.FindProperty("myVariableName")); } serializedObject.ApplyModifiedProperties(); } }
  6. Mein Code war 100% Beispielcode. Es gibg darum, zu zeigen, dass du Werte im IMGUI-Code an bestimmten stellen ändern musst, z.B. beim Drücken eines Knopfes. Dein neuer Post und Code wirken so, als gäbe es ein grundsätzliches Verständnisproblem mit IMGUI. Zeilen wie "GUILayout.Label" erzeugen keine neuen UI-Elemente - sie zeigen sie einmalig an... vereinfacht ausgedrückt. Wenn du also in jedem OnGUI-Aufruf fünf Mal GUILayout.Label aufrufst, dann wirst du fünf Labels sehen. Wenn du Daten in ein IMGUI-Interface speisen willst (also z.B. eine Liste anziegen), dann sollte diese Liste außerhalb des UI existieren, und das gleiche gilt, wenn du Daten über IMGUI erstellen willst. Hier hast du Beispielcode für das Anzeigen und Bearbeiten einer Liste. Beachte, wie die Liste nur dann erweitert wird, wenn man auf "Hinzufügen" klickt. Der Inhalt der Liste ändert sich niemals zum Zweck der Anzeige im UI. private List<string> list = new List<string>(); private OnGUI() { var deleteIndex = -1; for (var i = 0; i < list.Count; i++) { GUILayout.BeginHorizontal(); // Textfeld zum Bearbeiten list[i] = GUILayout.TextField(list[i]); // Knopf zum Löschen if (GUILayout.Button("X", GUILayout.Width(26))) { deleteIndex = i; } GUILayout.EndHorizontal(); } if (deleteIndex > -1) { list.RemoveAt(deleteIndex); } // Knopf zum Hinzufügen else if(GUILayout.Button("Hinzufügen")) { list.Add(""); } }
  7. Sascha

    AR export nach HTML

    Mein Wissen hierzu mag nicht ganz aktuell sein, aber mein letzter Kenntnisstand ist, dass Vuforia und WebGL nicht miteinander können. Man möge mich gegebenenfalls korrigieren.
  8. Sascha

    Leeren des Eingabe Textes vom Input Field

    Einfach Mauszeiger über den Variablennamen halten, dann verrät dir jede halbwegs vernünftige IDE direkt, welchen Typ die Variable hat. Auch bei Benutzung von var
  9. Sascha

    Leeren des Eingabe Textes vom Input Field

    Ich benutze fast überall var. Ich würde behaupten wollen, dass es für die Lesbarkeit (Typ sofort erkennen) auch nur einen Unterschied macht, wenn man schlechte Variablennamen wählt.
  10. Erst einmal solltest du dir Klammern angewöhnen. if (Bedingung) { Dann Zeug } Im Gegensatz zu Python reicht es bei C# nicht aus, einfach die Sachen einzurücken. Deshalb solltest du dir angewöhnen, immer Klammern hinzuschreiben, auch wenn es möglich ist, sie bei einzelnen Zeilen wegzulassen. Die Diskussion hatten wir auch gerade in einem anderne Thema. Zum eigentlichen Problem: Bau dir einen Input-Vektor, benutze ihn für einen einzelnen Translate-Aufruf (auch wenn du dabei nicht lange bleiben solltest, aber das ist ein anderes Thema), und dann nutze ihn außerdem für die Drehung. Oder du drehst einfach nur und bewegst dich dann vorwärts in die jeweilige Richtung. // Habe hier mal versucht, den Vektor an dein Richtungsschema anzupassen // TODO Ggf. ändern var input = new Vector3(0, Input.GetAxis("Vertical"), Input.GetAxis("Horizontal")); if (input != Vector3.zero) { // Rechne aus, wo du dich in Abhängigkeit zum Input hindrehen willst var targetRotation = Quaternion.LookRotation(input); // Drehe dich da mit turnSpeed hin transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, turnSpeed * Time.deltaTime); // Bewege dich in deine Blickrichtung vorwärts transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); }
  11. Sowas? private bool displayPopup; private int number = 0; private void OnGUI() { GUILayout.Label("number: " + number); if (GUILayout.Button("Show popup")) { displayPopup = true; } if (displayPopup) { if (GUILayout.Button("Count + 1")) { number++; displayPopup = false; } } } Du hast ja schon bestimmte Momente, in denen die Werte geändert werden sollen (in diesem Fall displayPopup). Du musst halt dafür sorgen, dass die Wertänderung ausschließlich dann passiert, wenn du sie auch haben willst, z.B. beim Klicken eines Knopfes.
  12. Musst halt deine bools außerhalb der Methode haben, damit sie bleiben. private bool displayLabel; private void OnGUI() { if (GUILayout.Button("Toggle Label")) { displayLabel = !displayLabel; } if (displayLabel) { GUILayout.Label("Hi there."); } }
  13. IMGUI-Code gehört keinesfalls in Update. Woher deine Fehlermeldung jetzt genau kommt, kann ich nicht sagen, aber wenn du deinen UI-Code nur noch in OnGUI bzw. den ausschließlich darin aufgerufenen Methoden hast, läst sich das Problem vermutlich von alleine.
  14. Sascha

    Schöner oder kurzer Code?

    Das ist die Sache mit der Robustheit. Du hast zwei Möglichkeiten, etwas in einer Situation zu tun. Die eine Möglichkeit funktioniert immer und die andere erfordert, dass du bei bestimmten Folgesituationen (Debugging, Änderung im Code) erstmal deinen bestehenden Code abändern musst.
  15. Sascha

    UI Shader Draw on Top

    Einen Shader brauchst du für die Reihenfolge von 2D-Objekten nicht. Aber im Falle von UI-Elementen kannst du einen Canvas nehmen, ihn deinen anderen UI-Elementen unterordnen und mit der Option "Override Sorting" die Sortierung ändern. Im Zweifelsfall würde ich aber auch empfehlen, noch einmal gründlich darüber nachzudenken, warum du das überhaupt machen willst - eigentlich braucht man diesen Workaround nämlich gar nicht.
×