Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Today
  2. Du hast es geschafft, die gestellte Frage geschickt zu umgehen Daher nochmal ganz explizit: Willst du, dass die Zahlen in der 3D-Szene an die Würfel gebunden sind? Als wären die Würfel Bildschirme, die etwas anzeigen? Dann könnte man die auch wegdrehen, etwa so: Oder willst du in Wirklichkeit einfach nur, dass eine Zahl über jedem Würfel zu sehen ist, die, genau wie Lebensanzeigen in vielen Top-Down-Spielen nichts mit dem Objekt zu tun haben außer ihrer Position? https://i.kinja-img.com/gawker-media/image/upload/t_original/bcjyblk1goennkdlu0rr.png Ich habe nämlich das Gefühl, dass du eigentlich letzteres willst, und in dem Fall ist die Herangehensweise mit den mehreren World Space-Canvas einfach schonmal komplett falsch. Stattdessen solltest du einen Screen Space-Canvas haben und den UI-Text-Komponenten ein Script geben, das ihre Position z.B. in LateUpdate in Abhängigkeit eines zuweisbaren Zielobjekts setzt. Dafür kannst du z.B. diese Klasse benutzen.
  3. Yesterday
  4. 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
  5. Hallo, @Sascha Ich hab in so verstanden das sich der Text als Child Objekt des Cubes sich Mitbewegen soll. Das geht halt nur im Mode World Space. Aber du hast recht, alles nur spekulativ wenn man nicht genau weiß was er zu erreichen versucht. Gruß Jog
  6. Naja, das ist halt die Frage. Ich war mir beim Anfangspost halt nicht sicher, ob hier nicht doch von einem Screen Space Canvas die Rede ist. Oder aber sein sollte. Man kann ja auch Text in einem Screen Space Canvas so darstellen, dass er über Objekten der 3D-Welt liegt. Ist auch gar nicht mal so schwer. Von daher, @DerStefan, erzähl doch mal: Was genau versuchst du zu erreichen?
  7. Hallo, Wie @Sascha schon gesagt hat, muss man den Canvas Render Mode World Space benutzen. Beim Render Mode World Space wird der Canvas wie ein normales GameObject behandelt, das heißt man kann ihn skalieren, drehen und in der Szene platzieren, und ist somit nicht mehr an einer festen Bildschirmposition gebunden. Aber daran denken den Canvas-Parameter Event Camera die Kamera zuweisen die das Bild rendert, ansonsten kommt es zu Problemen. Screen Space - Overlay: Canvas nicht verschiebbar. Controls, Text nur verschiebbar. Screen Space - Camera: Canvas nicht verschiebbar. Controls, Text mit räumlicher Tiefe darstellbar. Gruß Jog
  8. Der Canvas ist auf World Space gestellt? Und das ist auch so gedacht, dass das UI in der 3D-Welt hockt und nicht als Overlay darüber?
  9. Last week
  10. 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
  11. if (other.tag == "Player") if (other.GetComponent<Player>())
  12. Hey habe den selben Fehler hast du eine Lösung gefunden ?? Bitte währe nett wenn du antwortest
  13. Hallo Sascha wird es auch gleich schreiben: die Idee mit den Tags ist nicht optimal! Christoph
  14. Hi Sascha, super Danke für den Tipp. Ich habe die Buttons von der Mitte aus positioniert und nicht vom Rand. Daher hat es nicht gepasst.
  15. Ah, du redest also vom UI. Schau dir mal den Canvas Scaler an. Spiele da einfach mal ein bisschen mit den Einstellungen. Du kannst in der Game View auch alle möglichen Auflösungen einstellen, um das direkt zu testen. Wenn der Canvas Scaler richtig eingestellt ist, musst du evtl. nochmal schauen, dass die Anker deiner UI-Elemente richtig sind.
  16. ich habe Buttons zum Laufen, Springen usw. bei mir auf dem Handy sind sie so wie unter Game in Unity angeordnet. Bei dem anderen Handy sind sie zur Hälfte abgeschnitten.
  17. Ohne weiteres Zutun nimmt Unity meines Wissens nach auf mobilen Geräten immer die native Auflösung. Inwiefern passt die denn nicht mehr zum Spiel?
  18. Hi, ich habe mein Spiel als Android Version ausgeleitet und es hat alles super funktioniert. Jetzt habe ich es auf einem anderen Handy ausprobiert, welches eine andere Auflösung hat. Diese passt jetzt aber nicht mehr zum Spiel. Daher meine Frage. Nimmt unity immer die Auflösung her welche ich unter "Game" eingestellt habe? Wie mache ich das am besten, dass ich es auf verschiedenen Handys installieren kann? Danke
  19. Hi, dann würde ja nur die Animation nicht stimmen. Bei mir läuft der Spieler aber wirklich und nicht nur die Animation.
  20. Ach herrlich... Funktioniert sofort und ohne Probleme. So gefällt mir das Für alle mit dem gleichen Problem und die durch die Sucher hier gelandet sind: Hier noch mal das Script-Update an entsprechender Stelle: (...) void OnTriggerStay(Collider other) { if (other.tag == "Player") { Debug.Log("Triggered by the Player"); { if (Input.GetKeyDown(KeyCode.Space) && !open) (...)
  21. Oh... okay. Danke. ist tatsächlich das erste mal, dass so einen spezifischen Trigger benötige. Bisher kam ich mit dem allgemein gültigen sehr gut aus :D probiere ich heute Abend direkt aus.
  22. Das habe ich gerade versucht mit einem Trigger Collider der im Raum steht aber etwas kleiner ist und eine "OnTriggerStay" Methode abgefragt wird, da fallen dann auch Null Gravity gesetzte Objekte zu Boden, selbst die auf Weltkoordinaten Null gesetzte Gravity, oder im Rigidbody wird ignoriert da spielen aber alle Objekte verrückt und rotieren innerhalb der nicht fixierten Achsen wie wild? Ein anderer Versuch mit einer Abfrage der vorhandenen Collider mit "OnCollisionEnter" bewirkt gar nichts und wird ignoriert, ich habe einen Sound gesetzt bei Kollision, lasse ich das Schott auf die Wand zugleiten bekomme ich bei Trigger meinen Sound, führe ich das Schott mit der Hand passiert nischt. Ich gehe davon aus dass das MRTK Script irgendwie die Collider ausser Kraft setzt und werde mir das Script wohl mal genauer ansehen müssen allerdings sind diese Scripts für mich als Anfänger nicht leicht verständlich, das Script bietet aber die Möglichkeit Events auszuwerten evt. kann ich da was setzen.
  23. Sicher das es der CrossPlatformInputManager ist und du nicht eher ein Problem mit den Zuständen deines Animationcontrollers hast (da das GO des Spielers beim Laden vermutlich nicht neu geladen wird)? Da würde es Helfen direkt nach dem Level laden den Controller z.b. in den Idle-State oder ähnliches zu versetzen.
  24. Man könnte das Objekt sobald es sich in einen anderen Collider hineinbewegt auch leicht zurücksetzen (in die Gegenrichtung der Bewegung der Hand oder des Players) und dann das Objekt dem Spieler aus der Hand fallen lassen. Sollte sich der Gegenstand nach dem Zurücksetzen immer noch im anderen Collider befinden würde ich es auf die Initialposition zurücksetzen. Allerdings kann dieses Zurücksetzen oder das aus der Hand fallen lassen den Spieler auch nerven. Dieses leidige Problem des Clippens eines Gegenstandes in ein anderes Objekt hatte ich auch schon ohne VR bei einem einfachen Schwertkampf mit Schild. Hier clippte das Schild immer in den Gegner (wenn der Spieler zu nah an den Gegner lief) und ich musste daraufhin die Position des Spieler korrigieren damit das Schild wieder "frei" wird.
  25. Da hast du grundsätzlich was falsch verstanden. Die OnTriggerStay-Methode liefert dir immer den Collider der gerade im Trigger steht. wie du diese Variable benennst, ob "other" oder "fremderCollider" oder "horst" ist völlig egal. Allerdings kannst du dir über den Collider das zugehörige GO geben lassen und hier prüfen ob es sich es im das GO handelt welches den Spieler definiert. Viele machen das über den Tag des GOs: //Check to see if the tag on the collider is equal to Player if (other.tag == "Player") { Debug.Log("Triggered by the Player"); } , du kannst aber auch eine Komponente des GOs abfragen und so ermitteln, welcher Collider dort in deinen Trigger geraten ist: //Check to see if the gameObject of the collider has a PlayerController component PlayerController playercontroller = other.gameObject.GetComponent<PlayerController>(); if (playercontroller != null) { Debug.Log("Triggered by the Player"); } In dem Beispiel hat der Spieler einen PlayerController und er wird darüber "erkannt".
  26. Hallo Leute, ich stehe gerade etwas auf dem Schlauch. Ich habe einen Tresor gebaut, der von Spieler mittels richtiger Kombination geöffnet werden kann (Wird ein Escape-Room-Spiel). Aktuell habe ich schon mal den Tresor, das Öffnen wenn man davor steht, Sounds etc. für die grundsätzliche Funktion gescriptet. Die Nummernsteuerung folgt später. Funktioniert auch alles, alles cool. Wo ich mich aber grad wundere, ich habe dem Trigger-Collider gesagt, dass er sich nur öffnen soll, wenn der Spieler in ihm steht, sprich im Spiel, der Spieler vor dem Tresor. Jetzt die entscheidene Frage: Mache ich das nicht, indem ich den Collider nicht mit "other", sondern mit dem Namen des Spieler-Colliders benenne? Also in meinem Fall mein Männchen "Horst"? (Siehe Zeile 18: "void OnTriggerStay(Collider Horst)" ). Ich habe den Trigger Collider jetzt erstmal vor den Tresor gesetzt, so dass für den Moment alles vernünftig funktioniert und ich an anderen Stellen weiterarbeiten kann. Ist aber eben nur eine temporäre Lösung, da der Tresor durchaus vom Schrank gestoßen oder der Schrank mitsamt Tresor umgeworfen werden kann. Dann ist der Schrank oder Fußboden schon Hindernis genug um ihn zu öffnen zu können - Was natürlich gerade NICHT sein soll... Im Anhang ein Screenshot des Tresors, mit den beiden Collidern (Tresor selbst, und der Trigger-Collider VOR dem Tresor). Und im Folgenden, mein Script so far... Vielen Dank für eure Ideen und Anregungen. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Tresoroeffnen : MonoBehaviour { public GameObject Karatsafe; public Animator anim; private bool open = false; public AudioClip Safesound; void Start() { anim = GetComponent<Animator>(); } void OnTriggerStay(Collider Horst) { if (Input.GetKeyDown(KeyCode.Space) && !open) { open = true; anim.Play("Karatoeffnen"); AudioSource.PlayClipAtPoint (Safesound, transform.position,1); } else if (Input.GetKeyDown(KeyCode.Space) && open) { open = false; anim.Play("Karatschliessen"); AudioSource.PlayClipAtPoint (Safesound, transform.position,1); } } }
  27. Danke für die Antwort! Habe ein sehr gutes Tutorial für dieses Problem gefunden: Bei mir hat es geklappt und man kann meine App jetzt kostenlos im Google Play Store runterladen: https://play.google.com/store/apps/details?id=com.noCompany.ColorRingRoyal Viele Grüße Fazeli24
  1. Load more activity

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...