Jump to content
Unity Insider Forum

minuschki

Members
  • Posts

    101
  • Joined

  • Last visited

  • Days Won

    2

minuschki last won the day on September 15 2021

minuschki had the most liked content!

1 Follower

Recent Profile Visitors

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

minuschki's Achievements

Advanced Member

Advanced Member (3/3)

3

Reputation

  1. Hallo malzbie Das ist ja wieder mal ein Ratschlag vom Profi und er leuchtet ein! Ich werde deinen Vorschlag mit dem Animationstool bestimmt ausprobieren. Besten Dank für deine ausführliche Antwort und Mühe!
  2. Ich habe es jetzt nach langem Ausprobieren selber herausgefunden! Ich denke, so ist es richtig. Falls das nicht stimmt, könnt ihr mich gerne korrigieren! p1 = new List<Quaternion> {new Quaternion(0.0f, 1.0f, 0.0f, 0.0f), new Quaternion(0.0f, 1.0f, 0.0f, 0.0f), new Quaternion(0.0f, 1.0f, 0.0f, 0.0f)};
  3. Hallo zusammen Ich habe in meinem Projekt eine menschliche Figur mit Bones. Nun möchte ich verschiedene Körperhaltungen jeweils in einer List<Quaternion> direct im Code vordefinieren und diese dann gezielt auslesen, wenn die Figur in eine andere Körperhaltung gebracht werden soll. Um an die Quaternion-Rotationsdaten zu kommen, bewege ich die Figur über den Inspector in die gewünschte Körperposition. Dann löse ich einen Debug.Log aus, der mir z.B. (0.0, 1.0, 0.2, 0.0), (0.1, 1.0, 0.0, 0.0), (0.0, 1.0, 0.4, 0.0) als transform.rotation für die ersten drei Gelenke ausgibt. Nun das Problem: Wenn ich nun die Debug.Log-Ausgabe kopiere und manuell in den Code einfüge, erhalte ich Fehlermeldungen und bereits bei der ersten 0.0 wird ein Fehler angezeigt: Assets/DrehenLerp.cs(90,33): error CS1026: Unexpected symbol `,', expecting `)' Assets/DrehenLerp.cs(90,95): error CS1519: Unexpected symbol `;' in class, struct, or interface member declaration Assets/DrehenLerp.cs(92,0): error CS1026: Unexpected symbol `}', expecting `)' Was stimmt denn da in der Zeile "p1 = new List<Quaternion> {(0.0 ....)};" nicht oder wie muss das korrekt dort stehen? Für eine Integerliste wärs ja: t = new List<Int> {1, 6, 14}; Für eine Stringliste wärs ja: s = new List<String> {"Haus", "Baum", "Katze"}; Eine Quaternionliste müsste wie aussehen: q = new List<Quaternion> { ? }; Danke für eure Hilfe! Debug.Log (startQuad[0] + ", " + startQuad[1] + ", " + startQuad[2]); // die gesammelten Daten in eine Zeile ausgeben // Das ist die Debug.Lob Ausgabe, die ich kopiere: (0.0, 1.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0) p1 = new List<Quaternion> {(0.0, 1.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0)}; // bereits bei der ersten 0.0 gibts ein Problem
  4. Danke für die Antwort! Also lasse ich das mit den Joints und das mit der inversen Kinematic wird mir wahrscheinlich auch zu kompliziert. Im angehängten Bild habe ich so eine Art Planetensystem angewendet. Dabei kreisen die weissen Punkte jeweils wie Monde um die blauen Planeten und ziehen je eine gosse Kreisscheibe mit sich. Nun berechne ich den Schnittpunkt dieser grossen Kreisscheiben (hellblauer Punkt in der Mitte des Bildes = Zeichenstift). Die blauen Planeten sind Childs eines Empty Gameobjects, welches ebenfall rotiert. Im Moment muss ich mich mit solchen Spielerein begnügen.
  5. Hallo zusammen Ich möchte in Unity gerne eine mechnische Zeichenmaschine (Harmonograph) bauen. Drei grüne Räder rotieren und bewegen dabei mechanische Arme, die jeweils durch Gelenke verbunden sind. Der Gelenkpunkt mit dem schwarzen Kreis stellt den virtuellen Zeichenstift dar. Je nach Rotationstempo und Drehrichtung der grünen Räder ergeben sich dann unterschiedliche "Pendelmuster". Ich habe mit vorgestellt, das als 2D Projekt mit Sprites umzusetzen. Ich habe ein wenig mit balkenähnlichen Sprite-Armen und Hinge Joints herumprobiert, komme aber nicht recht vorwärts, zumal ich nicht weiss: 1. ob das mit Joints überhaupt funktioniert 2. welchen Typ Joint man dafür nehmen sollte 3. welche Einstellungen ich verwenden muss 4. wie ich erreichen kann, dass die Gelenke verbunden bleiben Im Moment zerreisst es mit dauernd die Gelenkverbingung, wenn der Antriebsarm sich nach links oder rechts bewegt. Der angehängte Arm entfernt sich dann um eine gewisse Distanz vom anderen Arm weg, bleibt aber in einer "losen" Verbindung am Hauptarm hängen. Ist es prinzipiell aber korrekt, die ganze Geschichte mit Hinge Joints zu machen? Irgendwelche hilfreiche Vorschläge?
  6. Ich habs jetzt rausgekriegt! Danke für deine Hilfe!
  7. Ich komme da leider nicht weiter! Zwar habe ich inzwischen in meinem 3D Projekt den "Rigidbody.SweepTest" durch die "Physics.SphereCast"-Methode erfolgreich ersetzen können (betrifft den Code nach der Sternenzeile). Bei der Umsetzung im 2D Projekt (Carromspiel) funktioniert der Code aber leider nicht mehr. Ich habe versucht, ihn auf 2D anzupassen (statt RaycastHit > RaycastHit2D und anstatt Physics.SphereCast > Physics2D.CircleCast). Es erscheint nur eine Fehlermeldung "Use of unassigned local variable `hit'. Keine Ahnung, woran das liegt. Ich bräuchte eigentlich nur die Position des Strikers bei einer voraussichtlichen Kollision und die Position des Spielsteines, welcher mit dem Striker angespielt würde! Kann mal bitte jemand einen Blick auf den fehlerhaften Code werfen? Hier die 2D Variante, welche leider nicht funktioniert if (Input.GetMouseButton(0)) { RaycastHit2D hit; if (Physics2D.CircleCast(transform.position, 0.5f, transform.forward, 10f)) // Striker Position, Radius, Richtung, Distanz { hitObject = hit.transform.gameObject; hitDistance = hit.distance; Debug.Log(hitObject); Treffpunkt.transform.position = hitObject.transform.position;//hitDistance; // Position des Strikers bei Kollision } else { hitObject = null; hitDistance = 10f; } } ****************************************************************************************************************************************** Hier die 3D Variante, welche problemlos funktioniert ****************************************************************************************************************************************** public class EinfacherTest : MonoBehaviour { public GameObject hitObject; public float sphereRadius; public float maxDistance; Vector3 origin; Vector3 direction; float hitDistance; void Update () { origin = transform.position; direction = transform.forward; RaycastHit hit; if(Physics.SphereCast(origin, sphereRadius, direction, out hit, maxDistance)) { hitObject = hit.transform.gameObject; hitDistance = hit.distance; } else { hitObject = null; hitDistance = maxDistance; } } void OnDrawGizmosSelected() { Gizmos.color = Color.red; Debug.DrawLine (origin, origin + direction * hitDistance); Gizmos.DrawWireSphere (origin + direction * hitDistance, sphereRadius); } }
  8. Aha! Wie immer sehr kompetent und hilfreich eure Tipps! So weiss ich wenigstens, in welche Richtung ich recherchieren muss. Besten Dank!
  9. Hallo zusammen Für ein 2D Carromspiel möchte ich dem Spieler eine Hilfslinie anzeigen lassen, die anzeigt, in welche Richtung sich sein Spielstein nach einem Treffer bewegen wird. Bei 3D-Objekten gibt es da die Möglichkeit einen Rigidbody.SweepTest anzuwenden, der (wie das linke Beispiel im Bild zeigt) auch wunderbar funktioniert. Für 2D-Objekte steht meines Wissens aber kein solcher Rigidbody2D.SweepTest zur Verfügung. Oder vielleicht doch? Wie kann man nun den Vector2 von A und B vorausberechnen, welcher dann für die Richtungsanzeige genutzt werden könnte?
  10. Hallo zusammen Ich habe über Youtube die Adobe-Seite Mixamo entdeckt, wo man kostenlos diverse Charaktere und eine recht grosse Anzahl an Animationen herunterladen und in Unity importieren kann. Das wäre alles wunderbar, wenn die Animationen dann auch fehlerfrei ablaufen würden - tun sie aber nicht! Zum Beispiel ist das linke Bein ungewöhnlich verbogen und macht aussergewöhnliche Bewegungen. Ebenfalls der linke Arm und die Finger der linken Hand verhalten sich komisch und zucken. Soweit ich das beurteilen kann, funktioniert die rechte Körperhälfte korrekt und die Fehler treten nur auf der linken Körperhälfte auf. Anscheinend haben auch andere ähnliche Probleme, wie man z.B. hier sehen kann: Ich habe mehrere Videos durchgesehen, aber keines hat bei mir funktioniert. In der Vorschau von Mixamo sieht alles normal aus. Auch in Blender werden die Animationen "Walking" und "Run" absolut korrekt abgespielt. In Unity ist der Rig des Charakters bereits auf humanoid umgestellt. Grundsätzlich laufen die Animationen, aber eben fehlerhaft. Weiss jemand von euch, warum die Fehler entstehen und wie man genau vorgehen muss, um diese zu beheben? So eine Step-by-step Anleitung wäre natürlich toll!
  11. Ok, danke für den Tipp! Ich denke mit Mathf.RoundToInt(obj.transform.position.y) sollte das klappen. Das mit den Ungenauigkeiten ist natürlich doof und funktioniert auch in einer Schleife nicht korrekt, so dass man am Ende einer Transformation immer noch extra nachkorrigiert werden muss. Warum sich der Wert in einer 10er-Schleife, bei der in jedem Schritt 0.1f subtrahiert wird, im Total nicht -1 ergibt ist mir schleierhaft! IEnumerator SchiebenUnten(GameObject ttt) { for (int i = 0; i < 10; i++) { ttt.transform.position = ttt.transform.position - new Vector3 (0, 0.1f, 0); yield return new WaitForSeconds(0.01f); } ttt.transform.position = zielPosition; // Teil auf die genaue Position setzen }
  12. Hallo zusammen In meinem 2D Game sollen Kisten herunterfallen und einen Turm bzw. eine Mauer bilden. Also habe ich ihnen einen Rigidbody und einen 2D Boxcollider angehängt und siehe da, die Kisten stapeln sich auf. Sie haben jeweils eine Seitenlänge von 2 und auch der Colider hat die Grösse 2 x 2. Das Problem: Nach dem Fall sollten alle Kisten wieder eine Ganzzahl als Y-Wert haben, aber genau das funktioniert nicht! Beispielsweise hat der mittlere Würfel nach dem Fall anstelle des erwarteten Wertes -1 nun plötzlich -0.9944119 und die obere Kiste anstatt 1 den Wert 1.02. Ich habe versucht, den Boxcollider in der Höhe anzupassen, hat aber nicht funktioniert, da sich je nach Anzahl der herunterfallenden Kisten die jeweiligen Y-Werte andauernd verändern. Auch das manuelle nachkorrigieren auf eine Ganzzahl bringt nichts, da der Wert nicht bleibend übernommen wird und durch die Kollisionsfunktion gleich wieder durch einen Fliesskommawert ersetzt wird. Vielleicht muss man in den Einstellungen etwas schrauben. Langer Rede kurzer Sinn: Wie erreiche ich, dass alle Kisten nach dem Fall immer eine Ganzzahl als Y-Wert haben?
  13. Ich habe noch nicht aufgegeben und mal versucht, die Anleitung unter https://gamedev.stackexchange.com/questions/148082/how-can-i-fix-zig-zagging-uv-mapping-artifacts-on-a-generated-mesh-that-tapers/176352#176352 zu befolgen. Der abgänderte Shader gibt zwar keine Fehlermeldung aus, bringt aber auch nicht den gewünschten Effekt (siehe Bild). Der Knick entlang der Triangles ist nach wie vor vorhanden. Könnte mal jemand einen Blick draufwerfen, wo da der Wurm drin ist? Zur Erinnerung: Der Shader sollte im 2D Modus die Textur auf einem Quad durch das Verschieben der Eckpunkte korrekt verzerren. Shader "Unlit/Projektion" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; // float2 uv : TEXCOORD0; // diese Zeile wurde deaktiviert float3 uv : TEXCOORD0; // und durch diese Zeile ersetzt }; struct v2f { // float2 uv : TEXCOORD0; // diese Zeile wurde deaktiviert float3 uv : TEXCOORD0; // und durch diese Zeile ersetzt float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); // o.uv = TRANSFORM_TEX(v.uv, _MainTex); // diese Zeile wurde deaktiviert o.uv = v.uv; // und durch diese Zeile ersetzt // o.uv.xy = o.uv.xy * _MainTex_ST.xy + _MainTex_ST.zw; // momentan deaktiviert. braucht es die? return o; } fixed4 frag (v2f i) : SV_Target { float2 uv = i.uv.xy / i.uv.z; // diese Zeile wurde eingefügt // sample the texture fixed4 col = tex2D(_MainTex, i.uv); return col; } ENDCG } } }
  14. Ich danke SkipToPlay für die Antwort! Höchstwahrscheinlich überfordern deine gutgemeinten Links meine Programmierfähigkeiten, da ich mich in der Shader-Welt überhaupt nicht auskenne. Immerhin habe ich teilweise verstanden, wie das Problem gelöst werden könnte. Und der Aufwand, die handvoll Codezeilen in einen bestehenden Shader einzufügen, ist für einen versierten Kenner der Materie bestimmt ein Klacks. Ich hingegen verstehe nur Bahnhof. Also werde ich mal in den unendlichen Weiten des Internets nach so einem Shader suchen. Toll und nett wäre natürlich auch, wenn jemand von euch einen solchen herumliegen hat und ihn hier posten könnte!
  15. Hallo zusammen Ich möchte gerne im 2D Modus ein Bild mit der Maus verzerren! Dazu habe ich bei den 4 Ecken Anfasser positioniert, welche sich mit der Maus verschieben lassen. Das Bild ist als Material einem Quad zugewiesen, welches ja bekanntlich aus 2 Triangles besteht. Und hier ergibt sich auch schon das Problem! Zieht man an der linken, oberen Ecke, wird das Bild zwar verzerrt, aber eben nur die linke, obere Hälfte. Das Dreieck unten, rechts bleibt unverändern und es entstehen Knicke im Muster. Im hochgeladenen Bild könnt ihr den Effekt sehen. Frage: Gibt es eine Möglichkeit im 2D Modus, ein 2D-Sprite korrekt zu verzerren, so wie das z.B. in Photoshop der Fall ist? Mit Quad klappt das ja offensichtlich nicht. Danke für eure Hilfestellung!
×
×
  • Create New...