Jump to content
Unity Insider Forum

DerStefan

Members
  • Content Count

    20
  • Joined

  • Last visited

Community Reputation

1 Neutral

About DerStefan

  • Rank
    Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Vielen Dank für eure Unterstützung. Ich habe eure Ratschläge umgesetzt und Fortschritte erzielt. Es gibt aber noch ein paar kleine Unklarheiten: - warum ist der Text so riesig? (Größe: 40, was eigentlich kein Problem ist) - der Text befindet sich außerhalb des Sichtfeldes, wenn man PosX und PosY auf 0 hat (siehe Screenshot) In meiner anderen Beispiel-Szene musste ich noch das Canvas skallieren, was schon mal nicht so günstig war. Als der Text dann innerhalb der Cubes war, wurde er automatisch vergrößert, als ich die Cubes skallierte. Mein Wunsch ist es, dass der Text nicht skallierbar ist und sich in seiner Position nicht ändert, wenn ich den "Father-Cube" skalliere. Mittels Canvas -> [ ] Canvas Scaler (Komponente im Inspector) konnte ich keine Änderung erreichen. P.S: Und ja, der Text soll mit den Cubes verschoben werden - wo der Cube ist, soll auch ein Text sein. P.P.S: Muss ich mit einer 2. Kamera (UI-Kamera) arbeiten, oder reicht es, die MainCamera in das Canvas zu ziehen? Viele Grüße
  2. Hallo Unity-Experten, in meiner Beispiel-2D-Szene habe ich zwei Cubes erzeugt, in denen jeweils ein UI-Text-Element vorhanden ist. Breite und Höhe 60 Px, Größe 40 und vertikal und horizontal zentriert (vom Text). Befindet sich ein Cube auf x0, y0, ist der Text genau dort, wo er sein muss. In allen anderen Fällen ist der Text nicht mehr innerhalb des Cubes, obwohl er ein Child-Element ist. (Anscheinend ist der Text immer auf x0, y0). In der Hierarchie sieht es so aus: Main Camera Cube - Canvas -- Text EventSystem Cube (1) - Canvas -- Text Wie bekomme ich es hin, dass die Text-Elemente wirklich mit den Cubes verknüpft sind? P.S: Mit TextMeshPro war es das gleiche Problem. Danke für jede Hilfe und beste Grüße
  3. Vielen Dank für die beiden Tipps! Habe es jetzt so umgesetzt und mit 2D funktioniert es ebenfalls perfekt! Ja, ich dachte mir schon, dass das mit der extrem hohen Masse keine saubere Lösung ist... Beste Grüße!
  4. Ich bedanke mich für eure Hilfe! Nach einigen Versuchen habe ich ein neues Projekt (3D) erstellt und beide Objekte mit RigidBodies und BoxCollidern ausgestattet. Das Objekt, das zerstört werden soll, hat keine Gravity und eine Masse von 1. Die Plattform (die nach oben bewegt wird) hat ebenfalls keine Gravity aber eine Masse von 1000000, damit diese bei der Kollision sich nicht bewegt (ansonsten ändert sich ihre Rotation). Das obere Objekt wird zerstört! Das Problem bei dem 2D-Beispiel war, dass ich dort keine Cubes hatte und diese als 3D-Objekte einfügen musste. Und mit einem BoxCollider2D und RigidBody2D hat es nicht geklappt. Anscheinend hätte ich 2D -> TileMap verwenden müssen. Viele Grüße
  5. Hallo Unity-Experten, in meinem einfachen Beispiel habe ich ein Image (mit einer Button-Komponente ausgestattet), welches den Inhalt eines Textfeldes modifizieren soll. Mein Wunsch ist es, das Image auf 3 verschiedene Arten zu klicken (Touchscreen): 1) 1-Finger-Touch (wie Linksklick) 2) 2-Finger-Touch (wie Rechtsklick) 3) Swipe-Up (wie Mausrad nach unten) 4) Andere Gesten wie Swipe-Down, Right, Left oder mehr als 2 Finger können ignoriert werden Ich habe vorhandene Touch-Skripte genommen und kombiniert. Das Skript habe ich dann an die MainCamera gehängt und diese in die OnClick-Komponente des Button-Komponents reingezogen. Anschließend Build und auf dem Touchscreen meines Lenovo Yogas getestet. Es funktioniert ziemlich unzuverlässig. 🤨 Habt ihr eine Idee, woran es liegt und wie man das verbessern kann? using System; using UnityEngine; using UnityEngine.UI; public class SwipeManager : MonoBehaviour { private Vector2 fingerDown; private Vector2 fingerUp; public GameObject gameObjectText; // Platzhalter für UI-Textelement public float SWIPE_THRESHOLD = 40f; // Minimaler Abstand für Swipe in px public void MultiTouch() // Funktion, auf die der Button zugreift (daher public) { foreach (Touch touch in Input.touches) { if (touch.phase == TouchPhase.Began) { fingerUp = touch.position; fingerDown = touch.position; } if (touch.phase == TouchPhase.Ended) // Detects swipe after finger is released { fingerDown = touch.position; CheckSwipe(); // Prüfen, in welchr Richtung geswiped wurde } } } void CheckSwipe() // Prüfen, in welchr Richtung geswiped wurde { if (VerticalMove() > SWIPE_THRESHOLD && VerticalMove() > HorizontalValMove()) // Check if Vertical swipe { if (fingerDown.y - fingerUp.y > 0) // Up swipe { OnSwipeUp(); } else if (fingerDown.y - fingerUp.y < 0) // Down swipe { TextSchreiben(0); } fingerUp = fingerDown; } else if (HorizontalValMove() > SWIPE_THRESHOLD && HorizontalValMove() > VerticalMove()) // Check if Horizontal swipe { if (fingerDown.x - fingerUp.x > 0) // Right swipe { //OnSwipeRight(); // Vorerst nicht benötigt } else if (fingerDown.x - fingerUp.x < 0) // Left swipe { //OnSwipeLeft(); // Vorerst nicht benötigt } fingerUp = fingerDown; } else // Falls keine Swipe-Bewegung erfolgte: { TouchEingabe(); // Funktion aufrufen, die die Anzahl der Fingereingabe ermittelt } } float VerticalMove() // Berechnung vertikale Bewegung { return Mathf.Abs(fingerDown.y - fingerUp.y); } float HorizontalValMove() // Berechnung horizontale Bewegung { return Mathf.Abs(fingerDown.x - fingerUp.x); } void OnSwipeUp() { TextSchreiben(6); Debug.Log("Swipe UP"); } void TouchEingabe() { Touch myTouch = Input.GetTouch(0); Touch[] myTouches = Input.touches; for (int i = 0; i < Input.touchCount; i++) // Ermitteln, mit wie vielen Fingern getoucht wurde { TextSchreiben(i); } } void TextSchreiben(int i) // Anzahl Finger = Parameter { Text text = gameObjectText.GetComponent<Text>(); // Zugriff auf das Textfeld if (i == 0) // 1 Finger { text.text = "1 Finger touch"; // Anzuzeigender Text innerhalb des Textfeldes } if (i == 1) // 2 Finger { text.text = "2 Finger touch"; // Anzuzeigender Text innerhalb des Textfeldes } if (i == 6) // Swipe-up (könnte auch durch else ersetzt werden) { text.text = "Swipe up"; // Anzuzeigender Text innerhalb des Textfeldes } Invoke("TextLeeren", 1); // Funktion in 1 Sekunde aufrufen } void TextLeeren() { Text text = gameObjectText.GetComponent<Text>(); // Zugriff auf das Textfeld text.text = ""; // Textfeld leeren } } Vielen Dank für jede Hilfe und beste Grüße
  6. Danke für deine Hilfe. Ich habe es versucht, aber es hat nichts geändert. (Egal ob BoxCollider2D, RigidBody2D oder 3D) Die Objekte treffen aufeinander, aber es findet keine "Zerstörung" statt. Hier mal zwei Screenshots: Viele Grüße
  7. Hallo Freunde :) In meinem Beispiel möchte ich gern, dass Objekt 2 zerstört wird, sobald es von Objekt 1 berührt wird. Objekt 2 hat eine feste Position, während die Position von Objekt 1 gleichzeitig mit der Kamera modifiziert wird. (Um eine Art Aufzug-Simulation zu erzeugen.) Beide Objekte haben Collider und die Skripte sind: using UnityEngine; public class KameraBewegung : MonoBehaviour { public Transform player; public Vector3 offset; void Update() // Update is called once per frame { transform.position = new Vector3(transform.position.x, transform.position.y + 0.1f, transform.position.z); } } (Dieses Skript hängt sowohl an MainCamera als auch an Objekt 1) Hier noch das zweite Skript, welches ebenfalls an Objekt 1 (Aufzug) hängt: using UnityEngine; public class Zerstoerung : MonoBehaviour { private void OnCollisionEnter(Collision collision) // Sobald dieses GameObject mit einem anderen kollidiert { Destroy(collision.collider.gameObject); // Das andere GameObject zerstören } } Beide Objekte (A und B) befinden sich auf der gleichen Z-Achse, aber bei der Berührung passiert nichts. Warum? Danke für jede Hilfe und beste Grüße
  8. Hallo, ich habe 2 Images, welche ich mit einer Button-Komponente und einer Audiosource-Komponente ausgestattet habe. Ziel ist, dass beide Images zufällige Sounddateien abspielen, die sich in verschiedenen Arrays/Listen befinden. Die Variante für das Gegnerteam funktioniert einwandfrei, allerdings möchte ich nicht zwingend die Audiodateien in den Inspector reinziehen müssen. Aus diesem Grund bevorzuge ich die erste Variante (ClickSoundTeam), welche aber leider nicht funktioniert. "PlayOneShot was called with a null AudioClip." Kann mir bitte jemand sagen, warum es nicht funktioniert? Die Button-Komponenten greifen auf die korrekten Funktionen zu (mittels OnClick() im Inspector) Die wav-Dateien befinden sich im Ordner "Assets\Resources\Sounds". Ich hatte sie auch in "Assets\Sounds" gepackt und es sowohl mit als auch ohne Dateiendung versucht - gleiches Ergebnis. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SoundPlay : MonoBehaviour { private AudioSource audioSource; private AudioClip[] teamSoundList; public AudioClip[] opponentArray; public void ClickSoundTeam() { audioSource = GetComponent<AudioSource>(); teamSoundList = new AudioClip[]{(AudioClip)Resources.Load("Sounds/000.wav"), (AudioClip)Resources.Load("Sounds/001.wav"), (AudioClip)Resources.Load("Sounds/002"), (AudioClip)Resources.Load("Sounds/003"), (AudioClip)Resources.Load("Sounds/004"), (AudioClip)Resources.Load("Sounds/005")}; audioSource.clip = teamSoundList[Random.Range(0, teamSoundList.Length)]; audioSource.PlayOneShot(audioSource.clip); // FUNKTIONIERT NICHT! } public void ClickSoundOpponent() { audioSource = GetComponent<AudioSource>(); audioSource.clip = opponentArray[Random.Range(0, opponentArray.Length)]; audioSource.PlayOneShot(audioSource.clip); // FUNKTIONIERT! } } Vielen Dank für jede Hilfe und beste Grüße!
  9. Hallo und danke für eure Unterstützung! Ich habe das ursprüngliche Problem übrigens gelöst, indem ich im Canvas die Reference Resolution auf 1920x1080 gesetzt habe und den UI Scale Mode auf "Scale With Screen Size" festgelegt habe. Außerdem hab ich den Screen Match Mode auf Expand gesetzt (weiß nicht, ob das positiven Einfluss hatte). Selbstverständlich ist mir eure Meinung wichtig, daher habe ich darüber nochmal nachgedacht. Prinzipiell gebe ich euch Recht, dass die Art und Weise (selbst wenn's von der Performance her Toaster-Kompatibel ist ), nicht so praktisch ist. Allerdings waren meine Beispiele nur die halbe Wahrheit. Es soll am Ende eher in diese Richtung hier gehen: Unterschiedliche Schriftgrößen und 3D. Die normale Button-Beschriftung in Unity gibt das möglicherweise nicht her. Heißt auch, dass die Buttons dann nicht den gleichen Sprite nutzen könnten. (Hintergrund ist gleich, aber die Schrift ist anders.) TextMeshPro sieht allerdings interessant aus! Hab mir mal paar Beispiele angeschaut, und auf einem Blog hab ich das hier gesehen, was wirklich beeindruckend ist: Auf die Schnelle habe ich jetzt das hier hinbekommen: Ein UI-Image eingefügt, als Source Image diesen grünen Kasten verwendet und innerhalb des UI-Images ein UI-TextMeshPro-Element eingefügt und darin die Schrift reingeschrieben und Farbe + Größe mit tags definiert. Die Option TextMeshPro war bei mir übrigens schon standardmäßig drin. Wenn es keine 3D-Schrift ist, dann ist das auch kein so großer Untergang. Hätte sonst alles mit Photoshop gemacht, aber so werde ich mich nur auf die Hintergründe konzentrieren und die Schrift in Unity machen. Viele Grüße
  10. Hallo Unity Community, ich arbeite gerade an einem einfachen Beispiel, in dem ich Buttons platzieren möchte. Meine erste Idee war es, dies mit Image Buttons zu tun, aber ich denke, dass es performance-technisch besser wäre, wenn alle grafischen Elemente bereits im Hintergrundbild integriert wären. (Speziell in meinem Fall werden sich die grafischen Buttons nur minimal von einander unterscheiden.) Dies heißt also, dass ich ganz normale Unity-Buttons so platzieren möchte, dass sie über den grafischen "Buttons" liegen. Ich habe also einfach ein Canvas erzeugt, darin ein Panel mit dem entsprechenden Hintergrundbild und mehrere Unity-Buttons. Leider habe ich gleich 2 Probleme: 1) Platzierung Wenn ich die Buttons innerhalb des Editors korrekt platziere und dann auf Play drücke, befinden sie sich an einer anderen Stelle. Heißt also, dass mir die Scene und Game-Views in diesem Fall nicht helfen, da ich es probieren und testen muss. Sicherlich hab ich da was übersehen. 2) Falsche Abmessungen Das Hintergrundbild, das die grafischen Buttons integriert hat, hat eine Auflösung von 1920x1080. Ich habe das Bildverhältnis innerhalb von Unity auf 16:9 (statt Free Aspect) geändert. Die bereits integrierten Grafik-Buttons haben jeweils eine Auflösung von 200x100. Wenn ich meinen Unity-Buttons die gleiche Auflösung gebe, sind sie in der Vorschau viel größer als die Grafik-Buttons. Drücke ich auf Play, passt es von der Größe her, aber die Position ändert sich (wie bereits in Punkt 1 erwähnt). Kompiliere/builde ich, ist das Ergebnis wieder ganz anders. Zusammengefasst kann man sagen: Größe und Position sind in allen 3 Fällen unterschiedlich. So sieht das ganze aus, und nein, das wird nicht das finale Hintergrundbild sein Danke für jede Hilfe!
  11. *Thread kann gelöscht werden*
  12. Hi, wenn ich in Visual Studio 2017 in C# programmiere (für Unity), gibt es da gewisse Richtlinien, an die ich mich halten muss? Ich würde gerne deutsche Namen für Variablen, Klassen etc verwenden und Kommentare in Deutsch verfassen. (Bin ohne Team.) Rein technisch scheint dies kein Problem zu sein, aber bevor ich loslege, frage ich einfach mal! Wozu die Frage? Ich meine, gelesen zu haben, dass die Codes vor Veröffentlichung des Spiels geprüft werden (ob's Schadsoftware ist). Und da man mit Unity für so ziemlich jede Plattform Spiele programmieren kann, könnte es ja jemanden stören, wenn Variablennamen, Klassennamen oder Kommentare nicht auf Englisch sind. Hab halt keine Lust, am Ende alles nochmal extra übersetzen zu müssen... Danke für jede Hilfe
  13. Hey, super, da lag ich mit meinen Versuchen ja gar nicht so weit daneben. Danke dir
  14. Hallo, wenn ich einen Boden erzeuge und darauf verschiedene Objekte platziere, muss ich immer sehr genau arbeiten, damit das Objekt weder im Boden drin steckt noch schwebt. Besonders schwierig finde ich es, wenn ich Objekte verbinde (Parent -> Childs), weil ich dann bei den Positionen immer noch berechnen muss, wie groß z.B. der Boden (Child) ist. Hab einfach eine Art Teleporter gebaut, der aus 3 Cubes besteht. Ich könnte natürlich allen Objekten einen Rigidbody hinzufügen, so dass diese beim Start des Spiels automatisch auf den Boden fallen würden. Lieber wäre es mir aber, dass ich das Objekt im Editor gar nicht erst durch den Boden schieben kann. Wenn ich das Move Tool aktiviert habe und dann mit Strg+Linksklick das Objekt verschiebe, kann ich es anscheinend raster-artig verschieben. Mit Shift+Linksklick kann ich es wohl vertikal und horizontal verschieben/transformieren. Sowas wie Taste+Linksklick, um das Objekt nicht durchschieben zu können, wäre für mich perfekt. Gibt es da eine Möglichkeit? Oder hilft es nur, zu rechnen und pixelgenau zu arbeiten? Hier mal zwei Beispiele: Danke für jede Hilfe!
  15. Hi und Danke für deine Antwort! Also es klappt jetzt auf jeden Fall besser. (Im Tutorial sieht das alles echt kinderleicht aus...) Ich habe übrigens gemerkt, dass es die Option "Atomic" gar nicht mehr gibt. Anscheinend wurde sie durch "Settings -> Interruption Source" ersetzt. Wenn ich zwischen Idle (nichts tun) und Laufen wechseln möchte, dürfen beide Animationen die Option "Has Exit Time" NICHT angekreuzt haben. Ansonsten würde die jeweils aktuelle Animation immer erst zuende abgespielt werden, bevor in eine andere gewechselt werden kann. Schnelles Stop-And-Go wäre also nicht möglich, wenn "Has Exit Time" angekreuzt wäre. Hab ich das soweit richtig verstanden? Ich hatte jetzt noch das Problem, dass meine Sprung-Animation, welche nur aus 1 Haltung bestand (beide Füße etwas angehoben und rotiert), auf meinen eigentlichen Charakter Einfluss nahm. Die idle-Animation und die Lauf-Animation hatten dann plötzlich auch umpositionierte Füße. (Unten in der GIF hab ich das anhand der idle demonstriert.) Nach einigen Versuchen hat es dann aber endlich geklappt. Schade dass es oftmals Glückssache ist, ob es nun wirklich funktioniert oder nicht. (Für mich zumindest.) Der Autor des Tutorials hatte das hier gemacht: Mein Problem war daraufhin das hier: Ich hatte explizit NICHT auf den Record-Button gedrückt, weil der wieder mal zu sehr seltsamen Ergebnissen führte. (Füße waren dann wieder 1 Meter vom Körper usw. entfernt - hab dann alles rückgängig gemacht.) Ja, das sind hier alles Kleinigkeiten, aber da es 0-Basics sind, sollten keine Unklarheiten vorhanden sein. Ich mache mir bei einem Hausbau ja auch keine Gedanken über das Kino-Zimmer, wenn ich nicht mal 2 Ziegelsteine verbinden kann... 0-Basics sind Voraussetzungen für ALLES. Mfg
×
×
  • Create New...