Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Today
  2. 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
  3. 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?
  4. 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
  5. 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?
  6. Yesterday
  7. 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
  8. if (other.tag == "Player") if (other.GetComponent<Player>())
  9. Hey habe den selben Fehler hast du eine Lösung gefunden ?? Bitte währe nett wenn du antwortest
  10. Hallo Sascha wird es auch gleich schreiben: die Idee mit den Tags ist nicht optimal! Christoph
  11. 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.
  12. 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.
  13. 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.
  14. 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?
  15. 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
  16. Hi, dann würde ja nur die Animation nicht stimmen. Bei mir läuft der Spieler aber wirklich und nicht nur die Animation.
  17. 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) (...)
  18. 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.
  19. 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.
  20. Last week
  21. 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.
  22. 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.
  23. 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".
  24. 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); } } }
  25. 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
  26. Im nächsten Update kommt auf Wunsch von jemanden der das Asset benutzt ein Laptop.
  27. Danke für die Informationen, ich hatte angenommen das irgendwo was fehlt. Ich werde wohl da ich eine Menge unterschiedliche bewegte Objekte habe in den Räumen und Gängen Trigger Collider setzen die etwas kleiner als die Räume selbst sind und eine "OnTriggerStay" Methode und die Position abfragen, verläßt ein Objekt den Trigger Colider setze ich es auf die letzte Position zurück oder lasse es schlicht fallen, mal schauen ob ich ein funktionierendes C# Script hinbekomme.
  28. Hallo, ich probiere gerade etwas mit dem neuen Input System aus. Ich habe Input Actions für "Tastatur und Maus" und für "Controller" konfiguriert. (Als die Kamera noch Child vom Charakter war und ich noch den Charakter gedreht habe, hat alles perfekt funktioniert!) Ich habe also einen Charakter und einen Kamerahalter, beide haben eine "Player Input" Component mit dem InputActionAsset Der Kamerahalter folgt dem Charakter und soll sich mit der Maus, oder dem rechten Stick drehen lassen. In der Aktuellen Konfiguration lässt sich die Kamera aber nur mit der Maus drehen und der Charakter läuft auch nur mit dem linken Stick des Gamepads Ich verstehe nicht was der Fehler sein soll. Es soll ja immer je nachdem welches Gerät man benutzt wechseln, aber hier funktionieren beide Cotrol Shemes nur halb und das gleichzeitig. Das Script des Charakters: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class PInput2 : MonoBehaviour { Rigidbody rb; public static Animator Animator; float movementInput_x; float movementInput_z; void Start() { rb = GetComponent<Rigidbody>(); Animator = GetComponent<Animator>(); print("PInput Script Start"); } public void OnSpringen(InputValue value) { Animator.SetTrigger("Springen"); } public void Springen() { rb.AddForce(transform.up * 5, ForceMode.Impulse); } public void OnLaufen(InputValue value) { Vector2 movementV2 = value.Get<Vector2>(); movementInput_x = movementV2.x; movementInput_z = movementV2.y; } void FixedUpdate() { if (movementInput_z == 0 && movementInput_x == 0 || movementInput_z == 0 && movementInput_x == 0) { Animator.SetBool("Idle", true); } if (movementInput_z >= 0.1 && movementInput_x >= -0.4 && movementInput_x <= 0.4) { Animator.SetBool("Walk F", true); Animator.SetBool("Run F", false); Animator.SetBool("Idle", false); } if (movementInput_z <= -0.1) { Animator.SetBool("Idle", false); Animator.SetBool("Walk R", true); } if (movementInput_z == 0) { Animator.SetBool("Run F", false); Animator.SetBool("Walk F", false); Animator.SetBool("Walk R", false); } } } Das Script des Kamerahalters: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class Mouselook : MonoBehaviour { GameObject Character; GameObject CharacterHead; Transform MainCamera; float drehenInput_x; int DrehenSpeed = 170; // Start is called before the first frame update void Start() { Character = GameObject.FindWithTag("Player"); MainCamera = GameObject.FindWithTag("MainCamera").transform; CharacterHead = GameObject.FindWithTag("SpielerKopf"); } public void OnDrehen(InputValue value) { Vector2 drehenV2 = value.Get<Vector2>(); drehenInput_x = drehenV2.x; } // Update is called once per frame void LateUpdate() { transform.position = Vector3.Lerp(transform.position, CharacterHead.transform.position, 5 * Time.deltaTime); transform.Rotate(new Vector3(0, drehenInput_x, 0), Time.deltaTime * DrehenSpeed); } } So ähnlich habe ich es aber schon mit dem alten Input System gebaut.
  1. Load more activity

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...