Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Yesterday
  2. Steve69

    Objekt vor Knie

    Hab's gefunden. Für meine Zwecke dürfte dies ausreichend sein. knee.position = LowerLeg.position + LowerLeg.forward/4; (/4 damit der Abstand nicht ganz so groß wird.) Alternativ wäre evtl. gegangen, ein leeres Objekt unterzuordnen und dessen Position wiederum auf die Kugel zu übertragen. Trotzdem recht schönen Dank. Hat mich auf die richtige Fährte gebracht. Stephan
  3. Steve69

    Objekt vor Knie

    Also wenn ich die Kugel vor dem Knie halte, dann eigentlich nicht. Wenn ich die Kugel unterordne dann passiert genau das. Dann springt das permanent hin und her. Ohne Unterordnung sieht es m.E. gut aus. Hab das mal mit Vector3.forward probiert. Geht halt dann nur in der einen Richtung. Gibt es eigentlich keine einfach Art und Weise ein anderes Objekt vor einem anderen anhängig dessen Ausrichtung zu platzieren. Das sollte doch gehen. Stephan
  4. Sascha

    Objekt vor Knie

    Das klingt irgendwie nicht gut, dass du die Kugel, die Bein-IK macht, nach dem Bein ausrichten willst. Da beeinflussen sich Kugel und bein doch abwechselnd gegenseitig?
  5. Sascha

    Animation Run Walk wechseln

    https://unity3d.com/de/learn/tutorials/topics/animation/blend-trees
  6. Steve69

    Objekt vor Knie

    Hallo Sascha, zuerst mal vielen Dank für die schnelle Antwort. Hab das mal probiert. Leider funktioniert das in meinem Fall jetzt nicht. Muß etwas ausholen, damit mein Problem klarer wird. Ich habe wie gesagt einen Charakter. Dieser wird über eine MotionCapture-Software mit Bewegungen versorgt. Da diese MotionCapture-SW sensorenbasiert ist und deswegen die Positionen nicht wie gewünscht liefert, habe ich über Wochen versucht sog. HTC VIVE Tracker zur Korrektur der Hüftposition zu nutzen. Das habe ich soweit auch hinbekommen. Da ich mit Hilfe der Tracker die Hüftposition verändere, wird damit die Animation beinflußt. In meinem Fall führt es dazu, dass die Füße anfangen zu schwimmen. Als ob sie sich auf Eis bewegen würden. D.h. ändert sich die Hüftposition, dann wird von dort aus die Bewegung neu berechnet, was dazu führt, dass die Füße auch mit verschoben werden. Nun kam mir der Gedanke, die Füße, wenn sie sich am Boden befinden, dort festzuhalten, sodass das Schwimmen aufhört. Da ich wie gesagt, nicht der Profi bin, habe ich im Asset Store das Asset "Inverse Kinematik" gefunden. Nach längeren Versuchen habe ich das dann auf die Füße adaptieren können. Habe dort eine Kugel für den Fuß (Target) und eine weitere Kugel für das Knie . Mit diesen beiden Kugeln kann ich die IK beeinflußen. Jedoch abhängig, wo die Kugel für das Knie positioniert ist, reagiert die IK auf die Veränderung der Kugel (Target). Die Kugelposition für das Knie definiert, wie die IK das Bein/Knie anwinkelt, wenn der Fuß z.B. gehoben wird. Somit dachte ich, dass wenn ich die Kugel für das Knie immer etwas vor dem Knie meines Charakter platziere, am besten abhängig auch von der Rotation des Knies, dann würde die IK beim Bewegen des Fußes (Target) mein Bein immer richtig anwinkeln. Aus diesem Grund würde ich gerne die Kugel des Knies etwas vor dem eigentlichen Knie positionieren. Wenn ich nun die Kugel, dem Schienbeinknochen unterordne, dann reagiert die IK ganz komisch. Somit geht das jetzt nicht. Somit bräuchte ich immer noch ne Lösung, wie ich die Knie-Kugel kurz vor das Knie positionieren kann. Hoffe meine Erklärung hilft. Gruß Stephan
  7. Kojote

    Animation Run Walk wechseln

    Und wie mache ich diese Abhängigkeit?
  8. Sascha

    Objekt vor Knie

    Warum nicht einfach die Kugel dem Knie-Knochen (wird wohl der Schienbein-Knochen sein) unterordnen?
  9. Sascha

    Animation Run Walk wechseln

    Ja, genau dafür sind Blend Trees da.
  10. Hallo! Ich habe gerade eine Animator Datei: https://s2.imagebanana.com/file/181212/JcDJgCsB.jpg In dieser befindet sich "Run Blend Tree". https://s2.imagebanana.com/file/181212/LAIyPJVP.jpg Klicken wir darauf lande ich im Blend Tree. Ich wollte nun gern abhängig von der Variable "Speed" entweder die Animation Walk beim laufen nutzen oder die Animation Run. Kann man dies im Animator einstellen, dass zum Beispiel die Animation Run genutzt wird, sobald der Speed höher als 2 ist?
  11. Steve69

    Objekt vor Knie

    Hallo Leute, bin noch blutiger Anfänger und versuche abhängig von einer Knieposition (lowerLeg) eines Charakters eine kleine Kugel zu platzieren. Diese soll immer in einem bestimmtem Abstand vor dem Knie platziert werden. Egal in welches Richtung letztendlich das Knie zeigt. Könnt ihr mir da bitte helfen? Also eigentlich : Kugel.position = lowerLeg.position + new Vectro3(?,?,?); Wie bekomme ich die ? berechnet? Addiere ich z.B Vector3.forward, dann liegt meine Kugel immer eine Einheit in X-Richtung. Das funktioniert, wenn das Knie in X-Richtung zeigt. Wenn das Knie jedoch z.B. um 90° gedreht wird, liegt die Kugel nicht mehr vor dem Knie sondern daneben. Gruß Stephan
  12. SyntaxTalkstoMe

    Discord

    Jetzt gehts auf einmal. Seltsam.
  13. Sascha

    SteamVR Asset funktioniert nicht

    Das sind aber keine Grundlagentutorials, die dir beibringen, wie man Unity benutzt. Du sollst verstehen, wie Unity funktioniert, damit du bei Problemen mit Plugins wie VRTK nicht sofort völlig aufgeschmissen bist. Erst kriechen, bevor man laufen kann und so. Ich verweise auf meine vorherige Aussage: Den Fehlermeldungen nach ist deine VRTK-Version aber auch eventuell veraltet. Schau mal, ob du eine aktuellere Version findest.
  14. Sascha

    Discord

    Der Link ist gültig und funktioniert auch bei mir. Kannst du anderen Discord-Servern beitreten?
  15. SyntaxTalkstoMe

    Discord

    Moin, ich hab die Suchfunktion genutzt, aber leider nix gefunden. Und zwar wenn ich Unity Insider in Discord joinen möchte, kommt die Meldung "Einladung ungültig - this invite may be expireed or u might have not have permission to join"
  16. malzbie

    Figur animieren

    Hi bruelhart. Willkommen im Forum. Du kannst deinen Code super formatiert hier einfügen wenn du den Knopf <> in der Objektleiste von deinem Texteingabefeld drückst. Dann geht ein neues Fenster auf wo du dann den Code super einfügen kannst. Unten rechts von diesem Fenster ist dann noch ne Auswahl, wo du die Formatierungsart einstellen kannst. Stell die einfach auf C um und schon kannst du sogar TAB's butzen um die Zeilen einzurücken. using UnityEngine; using System.Collections; public class PlayerControl : MonoBehaviour { void Update () { if (Input.GetKey (KeyCode.LeftArrow)) transform.Translate(Vector3. right * Time.deltaTime * 5); if (Input.GetKey (KeyCode.RightArrow)) transform.Translate (Vector3. left * Time.deltaTime * 5); } Das hier ist dein Code wenn er formatiert ist. Liest sich doch viel schöner. Ja, und jetzt fällt auch auf, dass bei deinem Code eine geschweifte Klammer am Ende fehlt. Das ist das, was Unity jetzt nicht mag. In der Console von Unity (sollte bei dir ganz unten als eine Zeile zu sehen sein) steht wahrscheinlich eine rote Fehlermeldung mit dieser Aussage: Da ist jetzt also irgendwas zuende, was noch nicht zuende sein darf. Wenn du die Klammer in den Code einfügst und speicherst solltest du keine Meldung mehr in der Console sehen. Jetzt kannst du das Script auf ein Objekt legen, welches du bewegen willst, falls du das noch nicht gemacht hast. Wenn du jetzt startest, kannst du mit den Pfeiltasten auch das Objekt bewegen.
  17. DrSkillix

    Unity Cloud Projekt kopieren

    Bzw hab das mal getestet, Projektordner kopiert und umbenannt und das Projekt mal geöffnet. Da geht leider garnichts, Keine Assets sind mehr vorhanden
  18. DrSkillix

    Unity Cloud Projekt kopieren

    Stimmt, ich könnte eine lokale Kopie des Projektes erstellen, diese dann einfach hochladen. Aber funktioniert das, wenn ich einfach den Projektorner im Explorer kopiere und umbenenne? Oder muss man da speziell vorgehen?
  19. knuddel

    SteamVR Asset funktioniert nicht

    Hallo Sascha, das ist es ja gerade. Ich versuche mich ja einzuarbeiten, deswegen arbeite ich mich durch Tutorials. Was ich im Moment sehr dringend bräuchte ist z.B. das grabben von Objekten. Im Tutorial zum Asset VRTK ist genau das beschrieben was ich benötige, aber sobald ich das Asset importiere steht eine ganze Liste Fehlermeldungen an. Im Tutorial Video gibt es diese Fehlermeldungen nicht, die können direkt damit loslegen.
  20. devandart

    Unity Cloud Projekt kopieren

    Ich kenne mich mit der Unity Versionierung nicht aus, aber eventuell kannst Du einfach ein neues Projekt anlegen in der Cloud, dieses auschecken und dann dein lokales Spiel in den neuen Ordner kopieren und diesen dann einchecken?
  21. bruelhart

    Figur animieren

    Sascha - besten Dank für deine AW - als Old Fashion Lerner bin ich streng nach Buch vorgegangen - d.h. Schritt für Schritt - inkl. Script auf das GameObject gezogen - das Script - abgeschrieben aus dem Buch in Visual Studio lautet: using UnityEngine; using System.Collections; public class PlayerControl : MonoBehaviour { void Update () { if (Input.GetKey (KeyCode.LeftArrow)) transform.Translate (Vector3. right * Time.deltaTime * 5); if (Input.GetKey (KeyCode.RightArrow)) transform.Translate (Vector3. left * Time.deltaTime * 5); } VisualStudio zeigt alles OK - Unity meldet: all compiler errors have to be fixed before you can enter play mode…. hm - keine Ahnung was ich falsch mache zu was ich will: > kein Game im eigentlichen Sinne - eher eine virtuelle Theaterbühne auf der die Besucher die Figuren in der Szene hin und her schieben kann - ein Trigger soll ein Audio auslösen (Sprachtext) - alles spielbar mit einer VR Brille über Steam > Total 12 Szenen - wie Bühnenbilder > Die Szenen und Figuren existieren bereits als 3D Low Poly Objekte Ich selber bin Prof. für Kunst und Design - bin kein Informatiker und somit blutiger Script Anfänger..... Deine Anregung "schwarzes Brett" nehme ich gerne auf.... Wenn du mir noch ein Tipp hast für ein brauchbares Script (simpel) Asset Store Unity bin ich dir dankbar... überhaupt Danke für deine Antwort!
  22. OK, sowas habe ich schon befürchtet. Dann muss ich mir mal Gedanken machen, wie ich da am besten den Überblick behalte. Danke für eure antworten.
  23. DrSkillix

    Unity Cloud Projekt kopieren

    Hallo Freunde, ich nutze Unity Teams und hab mein Projekt in der Cloud abgelegt. Nun möchte ich das gleiche Spiel auch für das Handy weiterentwickeln sprich ein extra Projekt in der Cloud anlegen für die mobile Version. Frage nun, wie kann ich das bestehende Projekt in der Cloud kopieren?
  24. Last week
  25. Sascha

    Spieler zählen die einen Bereich betreten...

    Uff. Das ist ne Menge Code. Ist vielleicht etwas ernüchternd, aber ich würde vorschlagen, das nochmal durchstrukturiert neu zu schreiben, vielleicht mit den neuen Erkenntnissen von weiter oben. Da gibt's ein paar Dinge, die ich noch dazu geben könnte: Namen - Benenne deine Variablen und Methoden aussagekräftiger. Ich sehe sachen wie TempGegner, Angriff_start_bew und Position() und ganz ehrlich; ich hab keinen Schimmer was die Dinger bedeuten und müsste mich durch den ganzen Code durchlesen, um zu verstehen was die Einheit macht. Gute Namen für Variablen und Methoden sind extrem wichtig für guten Code. Kleinere Einheiten, Kapselung, weniger Code-Duplizierung - Diese if-Abfrage unter dem Kommentar // Box von links oben aufziehen ist ziemlich harter Stoff. Selbst, wenn man weiß, was da abgeht, ist das Fehlerpotential in Code wie diesem extrem hoch. Statt einer Menge Anfragen genau dort, wo sie gebraucht werden, kann man idR eine Funktion bauen, in die man einen Punkt und ein Rect reinsteckt und die dann ansagt, ob der Punkt im Rect steckt. Dann kann man die Funktion an dieser Stelle aufrufen und das ganze wird einfacher lesbar. In diesem Fall gibt es dies Funktion sogar schon: Rect.Contains. Generell kannst du aber Methoden bauen, die durch ihren Namen beschreiben, was da passiert. Zum Beispiel geht sowas (komischer Code, nur zur Veranschaulichung): private void Update() { if (Input.GetButtonDown("Fire")) { cooldown = 0; var bullet = Instantiate(bulletPrefab, transform.position, transform.rotation); bullet.velocity = transform.forward * bulletVelocity; } } Der ist jetzt noch recht kurz und dadurch noch einigermaßen lesbar. Aber sobald das ein zwei Zeilen mehr werden, muss man schon den gesamten Block in der if-Abfrage lesen, um zu verstehen, was genau da passiert, wenn man denn "Fire" drückt. Deshalb wäre das hier besser: private void Update() { if (Input.GetButtonDown("Fire")) { FireBullet(); } } private void FireBullet() { cooldown = 0; var bullet = Instantiate(bulletPrefab, transform.position, transform.rotation); bullet.velocity = transform.forward * bulletVelocity; } Es passiert genau dasselbe, aber anstatt in Update erstmal einen Fließtext lesen zu müssen, um zu schauen was passiert, sieht man: Wenn man "Fire" drückt, wird eine Kugel abgefeuert. Alleine, weil die Methode so heißt. Wenn es einen dann interessiert, was genau es bedeutet, wenn eine Kugel abgefeuert wird, dann kann man sich die Methode ansehen. Solche Sachen sind Verbesserungen der Code-Qualität. Diese zeichnet sich nicht dadurch aus, ob der Code funktioniert oder nicht, sondern dadurch, dass man ihn gut lesen und warten kann, dass er robust gegen Änderungen ist und so weiter. Wenn dein Code von guter Qualität ist, können sich Probleme und Fehler viel weniger gut darin verstecken, und falls es doch mal ein Problem gibt, können andere den Code viel besser analysieren - nicht zuletzt, weil du weniger Code posten kannst, da du mit einer guten Struktur dein Problem direkt eingrenzen kannst.
  26. An2435

    Spiel updaten

    Bietet Unity Möglichkeiten ein Spiel "zuhause" anfragen zu lassen, ob es eine neue Version gibt und nach Bestätigung die notwendigen Daten zu verteilen? Wäre naheliegend. Aber nach was suche ich?
  27. chefselber

    Spieler zählen die einen Bereich betreten...

    Das habe ich jetzt gelöst. Vielen Dank für die doch sehr saubere Codelösung. Ich hätte da noch eine Kleinigkeit. Gehört zwar nicht mehr Thread. Und zwar kann ich über eine Auswahlbox die ich aufziehe den Spieler oder mehrere selektieren. Das klappt auch, nur wenn ich dann einen Punkt auf der Karte mit der rechten MT anwähle kann es sein, dass nur mal ein, zwei Spieler dorthin laufen... private void FixedUpdate() { // Scrollen oder neue Position mit rechtem Mausklick Position(); // Angriff??? if ((Angriff_start_bew || Angriff_start) && !angriff_flucht) Angriff(); if (!click.userdragging) // click.cs -- Auswahlbox ; Keine Box aufgezogen dann Einzelselektion { if (Input.GetMouseButton(0)) { switch (cameraRaycaster.layerHit) { case Layer.Begehbar: // Wenn Spieler ausgewählt und klick ins freie Feld ---> abwahl if (Selected) { Selected = false; SelectRect.SetActive(false); } break; case Layer.Spieler: // Einzelselektion if (cameraRaycaster.hit.transform.gameObject.name.ToString() == this.gameObject.name) { if (!Selected) // Wenn nicht ausgewählt dann Auswahlrahmen aktivieren { if (SelectRect == null) SelectRect = Instantiate(Rect, transform.position, Quaternion.Euler(105, 0, 0)); else SelectRect.SetActive(true); Selected = true; break; } if (Selected && Angriff_start) { SelectRect.SetActive(false); Selected = false; break; } } break; default: return; } } if (!Angriff_start_bew && !Angriff_start) { navmeshagent.destination = currentClickTarget; if (navmeshagent.remainingDistance > 4f && navmeshagent.remainingDistance > navmeshagent.stoppingDistance) { animator.SetBool("running", true); navmeshagent.isStopped = false; } else { navmeshagent.isStopped = true; //m_Character.Move(Vector3.zero, false, false); animator.SetBool("running", false); // navmeshagent.destination = Vector3.zero; } } } // Auswahlbox USER is DRAGGING else { //Selected = false; Vector3 screenPos = cam.WorldToScreenPoint(this.transform.position); // Box von links oben aufziehen if (screenPos.x > click.auswahlbox.x && screenPos.x < (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) > click.auswahlbox.y && (Screen.height - screenPos.y) < (click.auswahlbox.y + click.auswahlbox.height) // // Box von rechts oben aufziehen || screenPos.x < click.auswahlbox.x && screenPos.x > (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) > click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y - click.auswahlbox.height) // Box von links unten || screenPos.x > click.auswahlbox.x && screenPos.x < (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) < click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y + click.auswahlbox.height) // Box von rechts unten || screenPos.x < click.auswahlbox.x && screenPos.x > (click.auswahlbox.x + click.auswahlbox.width) && (Screen.height - screenPos.y) < click.auswahlbox.y && (Screen.height - screenPos.y) > (click.auswahlbox.y + click.auswahlbox.height) ) { if (!Selected && Input.GetMouseButtonUp(0)) { // Warten(); if (SelectRect == null) SelectRect = Instantiate(Rect, transform.position, Quaternion.Euler(105, 0, 0)); else SelectRect.SetActive(true); Selected = true; } } } und hier die klasse der Auswahlbox... ublic class click : MonoBehaviour { Camera cam; private Vector3 currentMousePosition; private Vector3 startMousePosition; public GUIStyle skin; private Vector2 DragStartPoint; public static bool userdragging = false; /* public delegate void dragger(); dragger dragit; */ public static Rect auswahlbox; // Use this for initialization void Start() { cam = GetComponent<Camera>(); } /// <summary> /// Prüfung ob Wert bei erstem Druck der Maustaste im Vergleich mit aktueller Mausposition sich geändert hat /// </summary> /// <param name="startPoint"></param> /// <param name="actualPoint"></param> /// <returns></returns> private bool Userisdragging(Vector2 startPoint, Vector2 actualPoint) { float x = Mathf.Abs(actualPoint.x - startPoint.x); float y = Mathf.Abs(actualPoint.y - startPoint.y); if (x > 5f || y > 5f) { return true; } else return false; } // Update is called once per frame void Update() { // Maustaste am Anfang gedrückt? if (Input.GetMouseButtonDown(0)) { DragStartPoint = Input.mousePosition; startMousePosition.x = Input.mousePosition.x; startMousePosition.y = Screen.height - Input.mousePosition.y; } // Maustaste aktuell gedrückt?? if (Input.GetMouseButton(0)) { userdragging = Userisdragging(DragStartPoint, Input.mousePosition); } else { userdragging = false; // Dragging stoppen } // Maustaste losgelassen?? Dragging Stop if (Input.GetMouseButtonUp(0)) { DragStartPoint = Input.mousePosition; userdragging = false; } } private void OnGUI() { if (userdragging) { float boxwitdh = Input.mousePosition.x - DragStartPoint.x; float boxheigth = DragStartPoint.y - Input.mousePosition.y; auswahlbox = new Rect(DragStartPoint.x, Screen.height - DragStartPoint.y, boxwitdh, boxheigth); GUI.Box(new Rect(auswahlbox), "", skin); } } } hier noch die Position -Methode! private void Position() { if (Selected) SelectRect.transform.position = Quadpos(transform.position); if (Messung()) // Wenn Player selektiert und unter 0.17 gedrückt wurde { switch (cameraRaycaster.layerHit) { case Layer.Feind: Angriff_start_bew = true; Feindname = cameraRaycaster.hit.transform.name.ToString(); TempGegner = richtigerGegner(Feindname); break; case Layer.Begehbar: if (Angriff_start || Angriff_start_bew) angriff_flucht = true; Angriff_start_bew = false; Angriff_start = false; TempGegner = null; animator.SetBool("Schuss", false); currentClickTarget = cameraRaycaster.hit.point; break; case Layer.Spieler: return; } } else currentClickTarget = currentClickTarget_old; messung = 0; // return; }
  1. Load more activity

Announcements

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

Weiterleitung zum Entwickler "daubit"



×