Jump to content
Unity Insider Forum

Steve69

Members
  • Posts

    19
  • Joined

  • Last visited

Recent Profile Visitors

696 profile views

Steve69's Achievements

Member

Member (2/3)

1

Reputation

  1. Hallo Malzbie, zuerst mal vielen Dank für deine Hilfe. Habe mir die Sache mal angeschaut und versuche aktuell meinen Code dahingehend zu ändern, dass ich Transform nicht mehr verwende. Hab auch die Verarbeitung, wie geraten, in die FixedUpdate-Funktion eingebaut. Mit meiner alten Implementierung (Transform) hatte das keine Auswirkung. Konnte aber den Fehler in meinem Code wiederum dank deiner Anregung finden. Hatte vor dem eigentlichen Setzen der yDir eine IF-Bedingung (bei der Frage leider nicht ersichtlich), die in bestimmten Fällen diese dann nicht aktualisiert hatte. Zum Zeitpunkt meiner Anfrage war mir nicht bewußt, dass ich yDir eigentlich auf 0 hätte setzen müssen, anstatt die Aktualisierung einfach zu übergehen. Durch das Übergehen hat sich Unity, aufgrund dessen, dass ich yDir außerhalb der Update-Funktion deklariert hatte, den Wert natürlich gemerkt. So kam es dann zustande, dass bei jedem Update mein Player zunächst auf den alten yDir Wert gesetzt wurde (also etwas weiter oben) und durch die Schwerkraft dann wieder runterbewegt wurde. Dadurch kam das "hoppeln" zustande. Nachdem ich dann quasi die Zeile Vector2 moveVector2D = new Vector2(xDir,yDir); in Vector2 moveVector2D = new Vector2(xDir,0); geändert hatte, war mein Problem gelöst. Dennoch werde ich die Sache entsprechend so umprogrammieren, dass ich das mit Transform in diesem Fall nicht nutze. Viele Dank nochmals für die Hilfe und für die tolle Erklärung. Gruß Stephan
  2. Hallo Leute, ich brauche mal wieder etwas Hilfe von euch. Ich versuche mich gerade mal an einem 2D-Spiel, bei dem mein Player durch Gänge läuft und auch Leitern hoch und runtern klettern kann. Solange mein Player horizontal sich bewegt, habe ich die Eigenschaft Gravity Scale im Rigidbody2D auf 1 gesetzt, damit die Schwerkraft ihn auf dem Boden hält. Sehr nütlich, wenn er eine Schräge hochläuft. Damit er eine Leiter hoch und runter klettern kann, schalte ich die Eigenschaft Gravity Scale auf 0, damit die Schwerkraft nicht greift. Ansosnten würde er herunterfallen. Um meinen Player zu bewegen, verwende ich die GetAxis-Funktionen innerhalb der Update-Funktion. Sieht dann bei mir so aus. (vereinfacht ausgedrückt. Die Variablen habe ich außerhalb definiert. Sind hier aufgeführt damit ihr seht, worum es sich handelt) --> die Gravity Scale setze ich an anderer Stelle float xDir; float yDir; float hSpeed = 1.0f; float vSpeed = 1.0f; xDir = Input.GetAxis("Horizontal") * hSpeed * Time.deltaTime; yDir = Input.GetAxis("Vertical") * vSpeed * Time.deltaTime; Vector2 moveVector2D = new Vector2(xDir,yDir); transform.Translate(moveVector2D); Das klappt soweit auch, solange ich meine Tasten schön hintereinander betätige. Um nun beim Hochklettern schnellstmöglich am Ende der Leiter z.B. nach rechts abbiegen zu können, betätige ich kurz vor Ende jetzt beide Achsen gleichzeitig. Jetzt tritt plötzlich das Phänomen auf, dass mein Player anfängt zu hopfen (Jitter). Obwohl der moveVector2D im yDir-Wert immer konstant bleibt, verändert sich im Inspector der Y-Wert stetig. Da ich dachte, dass das mit der Gravity Scale Einstellung zu tun haben könnte, habe ich den Wert auch beim horizontalen Laufen auf 0 gestellt. Auch in diesem Zustand "hoppelt" mein Player. Nur etwas wenige hoch. Echt komisch. Habt ihr ne Idee, woran das liegen könnte. Was mache ich da falsch? Im Voraus besten Dank für eure Hilfe. Gruß Stephan
  3. Hallo Leute, ich möchte mit Hilfe von zwei HTC Vive Trackern, die ich mit Hilfe eines Gürtels umgeschnallt habe (beide so ungefähr gegenüber) den Punkt ermitteln, um den ich mich selbst drehe. D.h. ich würde gerne mich um 360° drehen und dann meine Drehachse dabei ermitteln. Geht das? Brauche ich mehr Tracker? Problem ist für mich, dass zum einen die Tracker nicht zwingend in Richtung des Mittelpunktes zeigen (also eine andere Rotation aufweisen), und zum anderen mein eigener Mittelpunk sich beim Drehen um 360° selbst bewegt. Also "herumeiert". Hat da jemand eine pfiffige Methode, die Drehachse (so genau wie möglich) zu ermitteln? Wäre für jede Hilfe dankbar, da ich schon lange an diesem Problem herumprobiere, aber irgendwie nicht zum Ergebnis komme. Im Voraus besten Dank Stephan
  4. Hallo zusammen, ich benötige mal wieder eure Hilfe. Folgendes: (etwas vereinfacht dargestellt) Ich habe zwei HTC Vive Tracker. Der eine ist bei mir hinten am Rücken (TrackerHip), der andere um 90° gedreht an der rechten Hüfte (TrackerRHüfte) befestigt. Der TrackerHüfte besitzt einen Cylinder (dient nur zur Kontrolle, ob alles richtig berechnet ist) Soll also so aussehen. Möchte jetzt im nächsten Schritt nach Starten der Anwendung und Drücken eines "Synchronisationsbutton", die Positions- und Rotationsdifferenz beider Tracker ermitteln. Das habe ich jetzt so versucht zu lösen. public class TrackerSynchronisation : MonoBehaviour { public Transform TrackerHip; public Transform TrackerRHüfte; public Transform Cylinder; private Vector3 diffPosition; private Quaternion diffRotation; public bool Synchronisiere = false; public void SynchonisiereTracker() { //Hier soll die Positions- und Rotationsdifferenzen zwischen Hip und Tracker festgestellt werden diffPosition = TrackerRHüfte.position - TrackerHip.position; diffRotation= Quaternion.Inverse(this.transform.rotation) * TrackerHip.rotation; Synchronisiere = false; } // Update is called once per frame void Update() { if (Synchronisiere) SynchonisiereTracker(); //Hier soll der Cylinder so positioniert werden, dass er zum TrackerHip passt Cylinder.position = (TrackerRHüfte.position - diffPosition); Cylinder.rotation = TrackerRHüfte.rotation * diffRotation; //Da der Cylinder am TrackerHüfte um 90° gedreht ist, somit dies auch am TrackerHip Cylinder.rotation *= Quaternion.Euler(90, 0, 0); } Starte ich nun die Anwendung und aktiviere ich dann die Checkbox "Synchronisiere", <-- wurde dem Objekt TrackerRHüfte zugewiesen dann erhalte ich folgendes Ergebnis. Probleme 1: Hätte jetzt irgendwie erwartet, dass der Zylinder am TrackerHip ähnlich positioniert ist wie am TrackerRHüfte. --> liegt evtl. an der Korrektur Z= -0.05, die ich ggf. mitberücksichtigen müßte. Position des Zylinders am TrakcerHüfte Jedoch mein eigentliches Problem. Bewege ich mich nun mit dem TrackerRHüfte vorwärts oder seitlich, dann bewegt sich der Zylinder am TrackerHip (korrekt platziert) mit. Soweit so gut. Drehe ich mich aber, dann positioniert sich der Zylinder am TrackerHip leider nicht so mit, wie ich es erwartet hätte. Hier 90° nach rechts gedreht. Um 180° gedreht. Wie kann ich es nun erreichen, dass egal, wie ich mich drehe, der Zylinder am TrackerHip wie bei TrackerRHüfte platziert ist. Ich vermute, ich muss die ursprüngliche Positionsdifferenz, die ich in SynchronisiereTracker() mir gemerkt habe, in irgendeiner Weise mit der Rotation des TrackerRHüfte korrigieren/umrechnen. Kann mir jemand sagen, wie ich das machen muß? Im Voraus vielen Dank für eure Hilfe. Gruß Stephan
  5. Bin jetzt nicht sicher, ob das ein Kind eines anderen Objektes ist. In Blender wurden die Puzzleteile so umgesetzt. in Unity sieht es dann so aus. Hab das ja über die Blend-Datei zuerst importiert. Da traten die Problem auf. Hab jetzt die Puzzleteile aus Blender als FBX exportiert und das dann in Unity nochmals importiert. Sieht zwar gleich aus, aber damit habe ich jetzt keine Probleme mehr. Falls noch jemand eine Erklärung dafür hätte, wäre ich dankbar. Wäre ja schon interessant zu wissen, was hier schief lief. Schon um zukünftig solche Problem vermeiden zu können. Danke Stephan
  6. Hallo Leute, irgendwie verstehe ich die Welt nicht mehr und hoffe ihr könnt mir da weiterhelfen. Ich habe zu Übungszwecken verschiedene Puzzleteile (siehe Bild) und einen Rahmen mit Bodenplatte in Blender erstellt und dann die Objekte in Unitiy per blend-Datei über Import Asset importiert. Danach habe ich allen Objekten jeweils ein Rigidbody und ein oder mehrere Box-Collider zugewiesen. Die Box-Collider habe ich deutlich kleiner gemacht, als die eigentlichen Puzzleteile, damit nicht sofort Kollisionen ausgelöst werden. Setze ich jetzt eines der Puzzleteile etwas über den Rahmen mit Bodenplatte, starte dann das "Game" dann bewegt sich das Puzzleteile aufgrund eingeschalteter Gravity langsam nach unten. Sobald die Bodenplatte erreicht ist, bleibt es dort liegen. Jedoch was mich jetzt stutzig macht, ist, dass der Transform.Position.Y Wert weiter hochgezählt werden. Greife ich dann das Objekt in der Scene, springt dieses sofort an die Y-Position, die sich zwischenzeitlich deutlich unterhalb meiner Bodenplatte befindet. Generiere ich ein Cube innerhalb von Unity, versehe ich diesen mit Rigiddbody und Box-Collider, dann fällt der runter, bleibt liegen und der Wert Transform.Position.Y bleibt konstant. Bewegt sich somit nicht weiter. Meine Vermutung ist jetzt, dass es an den in Blender generierten Teilen liegt. Haben die evtl. selbst Rigidbodys und Collider, die dann in Unity diesen Effekt mit der Y-Position verursacht? Habt ihr mir da einen Tipp, wie ich das fixen kann. Muss ich in Blender etwas verändern, anders Importieren, oder kann ich die Blender-Rigidbody und -Collider ggf. irgendwie ausschalten? Konnte jetzt selbst noch nichts finden, was mir helfen könnte. Vielleicht suche ich einfach auch falsch. Wäre für Tipps dankbar. Im Voraus besten Dank Stephan
  7. Hallo zusammen, da noch keiner geantwortet hat und ich jetzt irgendwie noch eine andere Idee hatte, wollte ich die auch noch zum Besten geben. Wäre es nicht besser, ich würde ein Dummy-Objekt z.B. eine Sphere generieren und den Tracker als untergeordnetes Objekt anhängen? Müßte dadurch eine Rotation nicht ganz autom. berücksichtigt werden ? Werde das mal die Tage probieren. Müßte dann nur noch eine geeignete Methode finden, dem Dummy-Objekt die richtige Größe (Radius) zuzuorden. Meine die 2cm Abstand vom Tracker zum Sensor dürfte nicht die richtige Wahl sein. Ich müßte m.E. eher den Abstand vom angebrachten Tracker (hinten am Kreuz) zu meiner Drehachse (also Mitte meines Beckens) irgendwie ermitteln. Dies dann auf das Dummy-Objekt übertragen. Gibt es eigentlich eine Möglichkeit eine Art Kalibrierung für meine Zwecke durchzuführen? Dacht an folgendes: Ich drehe mich im Kreis und der Tracker liefert ständig entsprechend Positions- und Rotationswerte. Nach ein oder zwei Umdrehungen sollte eine geeignete Berechnung, den Mittelpunkt liefern. Stelle mir als Laie das ziemlich schwer vor, dies zu ermöglichen. Kann mich ja selbst auch nicht richtig im Kreis drehen. Da werde ich ja sicherlich rumeiern 🙂 Hoffe ihr könnt mir da, wie gesagt den ein oder anderen Tipp geben. Vielleicht kennt ja auch schon jemand so ne Art Kalibrierung. Evtl. als Asset! Im Voraus besten Dank Stephan
  8. Hallo Leute, da ich leider noch blutiger Anfänger im Scripting von Unity bin, hoffe ihr könnte mir bei meinem Problem weiterhelfen. Irgendwie denke ich vermutlich zu viel um die Ecke und komme deswegen nicht weiter. Hab mal versucht das verständlich zu beschreiben. Ist etwas viel geworden. Hoffe es liest auch jemand :-) Also folgendes Problem: Ich habe zwei Perception Neuron Systeme von NoItom (also ein Sensoren basiertes Mocap-System), mit denen ich gerne Tanzfiguren animieren möchte. Das Problem ist, dass die Sensoren keine absolute Positionen ermitteln, sondern nur aufgrund Winkeländerungen und Beschleunigungen, die Positionen berechnen. Das System arbeitet eigentlich gar nicht schlecht. Da jedoch bei einem Tanzpaar zwei Personen miteinander interagieren sollen, sind mir aktuell die Abstände für eine Nacharbeitung zu groß. Die aufgezeichneten Figuren driften auseinander. Aus diesem Grunde bin ich auf die Idee gekommen je einen HTC Vive Tracker als Positionierungshilfe zu verwenden. Habe deswegen auf den Sensor der Hüfte (Hip) den Tracker befestigt. Bin also ein paar cm (ca. 2-3) vom eigentlichen Sensor entfernt. Die Software Axis Neuron bietet u.a. auch ein Unity-Projekt an, mit dessen Hilfe ich die Hip-Position überschreiben und somit die Position korrigieren kann. In Unity habe ich nun zwei Figuren. Die Figur1 gibt die Übertragung der Werte aus Axis Neuron wieder. Figur2 die korrigierte Position. Wenn ich nun meine Figur in Axis Neuron auf einen Nullpunkt setze und dann in Unity dies auch durchführe (Figur1 und Figur2 sind dann deckungsgleich), dann kann ich im ersten Schritt den Offset von "Nullpunkt" des Hip-Sensors zur Trackerposition festhalten. Wenn ich nun diesen Abstand jedes Mal von der aktuellen Trackerposition abziehe, dann erhalte ich ja die korrigierte Position der eigentlichen Hip-Position und kann somit die Position korrigieren. Das klappt auch, soweit keine Rotationen ins Spiel kommen Und genau da brauche ich eure Hilfe. Irgendwie blicke ich das jetzt nicht. Eigentlich war meine Idee jetzt folgendermaßen. 1. ich habe die Position des Trackers (Punkt T) --> absolute Position im Raum 2. der Tracker befindet sich ca. 2 cm vom physikalischen Hip-Sensor (H') entfernt 3. die "virtuelle" Hip-Position (H), die von Axis Neuron an Unity weitergereicht wird und die ich gerne überschreiben möchte Die "virtuelle" Hip-Position wird anfangs wie oben erwähnt auf einen Nullpunkt gesetzt. Dann drücke ich eine Taste. Die dahinterstehende Aktion, ermittelt den Abstand zwischen H und T und dann setze ich die Figur1 und die Figur2 deckungsgleich. Bewege ich mich nun vorwärts, rückwärts oder seitlich, ohne eine Drehung durchzuführen, dann sieht das für mich gut aus. Drehe ich mich nun auf der Stelle z.B. um 90 Grad, dann bewegt sich meine Figur2 um paar cm seitlich (also ca. 2cm) und auch um ca. 2cm nach vorne. So jetzt müsste ich ja die Rotation mit berücksichtigen. Wie gehe ich da jetzt genau vor? Kann hier jemand helfen? Bin selbst der Meinung, dass ich ja eigentlich die Rotation um den Punkt H' berechnen müsste (also Rotation des Trackers * 2cm Abstand (also Abstand H' zu T)) und dann den Abstand H' zu H von der "rotierten" Trackerposition abziehen müßte, damit ich dann wieder auf H komme. Bin ich da falsch, oder befinde ich mich noch auf dem richtigen Weg? Muss ich noch was anderes berücksichtigen? Gibt es evtl. einen einfacheren Weg eine Rotation zu berücksichtigen? Wie würdet ihr dass denn machen? Wäre für jede Idee dankbar. Da ich aber noch Anfänger bin und nicht alle Begrifflichkeiten so kenne, wären paar Beispielschnipsel für mein Verständnis sehr hilfreich. Hoffe ich habe das als Laie einigermaßen verständlich rübergebracht. Im Voraus besten Dank Stephan
  9. Hallo zusammen, habe mich heute im Forum angemeldet und möchte mich auch kurz vorstellen. Bin der Stephan, 46 Jahre jung und arbeite zur Zeit als Organisationsberater. Hoffe ihr könnt mir bei meinem geplanten Projekt mit Tipps und Tricks ein wenig weiterhelfen. An dieser Stelle nur mal soviel: Soll ein Programm / App werden, die dann von mir selbst erstellte Animationen abspielen können soll. Idealerweise auf den Plattformen wie Windows, Android, Apple. Hab da auch schon einiges gebastelt, aber komme an der ein oder anderen Stelle nicht so recht weiter. Mehr dazu dann im Rahmen einer Frage im Forum. Gruß Stephan
×
×
  • Create New...