Jump to content
Unity Insider Forum

minuschki

Members
  • Posts

    101
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by minuschki

  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!
  16. Hallo chrische5 Das ist das Resultat, welches der derzeitige Shader produziert. Sascha hat das aber wieder einmal völlig einleuchtend erklärt, dass der Shader die Steigung der Flächen berücksichtigt. Somit ist das für mich auch ok. Schön wäre aber für mich eine Lösung, welche alle Objekte in der Welt in eine Winterlandschaft umwandelt, also so quasi ein globaler Shader ohne dass man bei jedem einzelnen Objekt das Material ändern muss! Ist das machbar?
  17. Hallo zusammen Ich habe einen Schnee-Shader gefunden, der auf meine Mesh-Berge Schnee legt. Man kann in einem Regler auch die Höhe des Schnees einstellen, allerdings beginnt der Schnee in den tieferen Flächen und steigt dann je nach eingestelltem Level in die Höhe. Ich fände es aber logischer, wenn der Shader zuerst die Gipfel mit Schnee bedeckt und je nach Level dann die tieferen Flächen berücksichtigt. Was muss man am Shader ändern, damit er die Schneefallgrenze von oben nach unten anwendet? Shader "Custom/SnowShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 _MainNormal ("MainNormal", 2D) = "bump" {} [Header(Snow info)] _SnowTexture("Snow texture", 2D) = "white" {} _SnowNormal("Snow normal", 2D) = "bump" {} _SnowColor("Snow color", color) = (1,1,1,1) _SnowDirection ("Snow direction", Vector) = (0, 1, 0) _SnowLevel ("Snow level", Range(-1, 1)) = 0 _SnowGlossiness("Snow glossiness", Range(0, 1)) = 0.5 _SnowMetallic ("Snow Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; float2 uv_MainNormal; float2 uv_SnowNormal; float2 uv_SnowTexture; float3 worldNormal; INTERNAL_DATA }; half _Glossiness; half _Metallic; fixed4 _Color; sampler2D _MainNormal; sampler2D _SnowTexture; sampler2D _SnowNormal; fixed4 _SnowColor; float4 _SnowDirection; float _SnowLevel; float _SnowGlossiness; float _SnowMetallic; // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. // #pragma instancing_options assumeuniformscaling UNITY_INSTANCING_BUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_BUFFER_END(Props) void surf (Input IN, inout SurfaceOutputStandard o) { //Color and normals of the main textures fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; float3 normals = UnpackNormal (tex2D(_MainNormal, IN.uv_MainNormal)); //Color and normals of the snow textures fixed4 snowColor = tex2D(_SnowTexture, IN.uv_SnowTexture) * _SnowColor; float3 snowNormals = UnpackNormal(tex2D(_SnowNormal, IN.uv_SnowNormal)); //Snow direction calculation half snowDot = step(_SnowLevel, dot(WorldNormalVector(IN, normals), normalize(_SnowDirection))); o.Normal = lerp(normals, snowNormals, snowDot); o.Albedo = lerp(c.rgb, snowColor.rgb, snowDot); o.Metallic = lerp(_Metallic, _SnowMetallic, snowDot); o.Smoothness = lerp(_Glossiness, _SnowGlossiness, snowDot); o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
  18. Hallo Sascha Danke für deine Erklärung! Wenn ich deinen Input richtig interpretiere, sollten also: mesh.RecalculateNormals (); mesh.RecalculateBounds(); ausreichen.
  19. Hallo zusammen Ich habe eine Frage zu "mesh.Recalculate". Sollte man, nachdem ich ein Mesh per Skript von Grund auf kreiert habe oder bei einem bestehenden Mesh die Vertices in der y-Achse verschoben habe, ein "mesh.Recalculate" durchführen? Wenn ja: mesh.RecalculateNormals(); oder mesh.RecalculateTangents(); oder mesh.RecalculateBounds(); oder alle drei? ps. Dem Mesh wurde auch ein MeshCollider hinzugefügt, der nach der Manipulation geupdatet werden soll. Zudem hat das verwendete Material neben dem Albedo auch eine Normal Map. Ich erwähne das nur, falls das einen Einfluss auf die Verwendung der "mesh.Recalculate"-Varianten haben könnte. Eigentlich sind mir die Funktionen der einzelnen Varianten nicht ganz klar und die Erklärungen der Unity-Hilfe sind auch eher dürftig. Danke für eure belehrenden Inputs!
  20. Und schon wieder ein Volltreffer! Danke, dein Tipp ist ist bereits umgesetzt und funktioniert perfekt!
  21. Ich hätte da noch ein kleines Problem! Das erstellte Mesh hat den Pivot-Punkt bei der Ecke links unten, was wiederum zu Folge hat, dass sich das Objekt bei einer Rotation um die Y-Achse um diese Ecke dreht. Es sollte sich aber um das Zentrum drehen. Ich habe mir vorgestellt, man könne den Pivot per Skript ins Zentrum setzen, was aber offenbar nicht möglich ist. Bei meiner Suche nach einer Lösung des Problems, finde ich nur so Basteleien mit Parent-Gameobject, offset und so weiter, was ich aber sehr umständlich finde. Mir schwebt eigentlich eine Lösung vor, die folgendermassen aussieht: Man erstellt in der Hierarchie ein Empty GameObject (Drehpunkt ist bereits im Zentrum) und fügt ihm die Komponenten <Transform> und <Meshfilter> hinzu. Danach möchte ich das mittels Script ertellte Mesh dem Empty GameObject übergeben, aber so, dass der Drehpunkt im Zentrum verbleibt! Ist das möglich? Mein Versuch ist insofern fehlgeschlagen, dass ich zwar das Mesh auf das Empty GameObject übertragen konnte, aber der Pivot dummerweise wiederum in die untere linke Ecke verschoben wird.
  22. Danke für deine Erklärung! Ich habe deinen Rat befolgt und siehe da, es klappt wie gewünscht. Wieder was dazugelernt! Besten Dank und noch einen schönen Tag! uvs[i] = new Vector2(verts[i].x / 250, verts[i].z / 250);
  23. Hallo zusammen Ich erstelle mit dem angehängten Script ein Mesh, welches ein Graustufenbild als hightmap benutzt. Das funktioniert tadellos. Das Problem ist aber beim Hinzufügen eines Bildes als Textur. In der letzten Zeile füge ich ein Material hinzu. Die Textur soll aber nicht gekachelt, sondern als ganzes Bild über dem gesamten Mesh angezeigt werden (siehe Bild 2). Wie kann ich das hinkriegen? Besten Dank im Voraus! using System.Collections; using System.Collections.Generic; using UnityEngine; public class BergMaker : MonoBehaviour { public Material myMaterial; public void BergGenerieren() { Texture2D hMap = Resources.Load("Berg1") as Texture2D; List<Vector3> verts = new List<Vector3>(); List<int> tris = new List<int>(); //Bottom left section of the map, other sections are similar for(int i = 0; i < 250; i++) { for(int j = 0; j < 250; j++) { //Add each new vertex in the plane verts.Add(new Vector3(i, hMap.GetPixel(i,j).grayscale * 50, j)); //Skip if a new square on the plane hasn't been formed if (i == 0 || j == 0) continue; //Adds the index of the three vertices in order to make up each of the two tris tris.Add(250 * i + j); //Top right tris.Add(250 * i + j - 1); //Bottom right tris.Add(250 * (i - 1) + j - 1); //Bottom left - First triangle tris.Add(250 * (i - 1) + j - 1); //Bottom left tris.Add(250 * (i - 1) + j); //Top left tris.Add(250 * i + j); //Top right - Second triangle } } Vector2[] uvs = new Vector2[verts.Count]; for (var i = 0; i < uvs.Length; i++) //Give UV coords X,Z world coords uvs[i] = new Vector2(verts[i].x, verts[i].z); GameObject plane = new GameObject("ProcPlane"); //Create GO and add necessary components plane.transform.position = new Vector3(-125, -20, 50); plane.AddComponent<MeshFilter>(); plane.AddComponent<MeshRenderer>(); Mesh procMesh = new Mesh(); procMesh.vertices = verts.ToArray(); //Assign verts, uvs, and tris to the mesh procMesh.uv = uvs; procMesh.triangles = tris.ToArray(); procMesh.RecalculateNormals(); //Determines which way the triangles are facing plane.GetComponent<MeshFilter>().mesh = procMesh; //Assign Mesh object to MeshFilter plane.GetComponent<MeshRenderer>().material = myMaterial; } }
  24. Hallo Sascha Ich frage mich, ob man die unten gezeigte for-Schleife nicht erheblich optimieren könnte. Immerhin werden da jedesmal alle 40401 Meshpunkte kontrolliert, obwohl schlussendlich nur etwa 300 innerhalb des Radius liegen und manipuliert werden müssen. Im Moment ruckelt es recht stark. Ich denke aber, die Berechnung könnte doch viel flüssiger ablaufen, wenn man nur das quadratische Feld der möglichen Kandidaten (localHitPoint +- Radius in x und z Richtung) kontrollieren würde. Stehe ich da völlig im Schilf oder gäbe es diese Möglichkeit? Eventuell mit einer Doppelschleife, die weiss nicht wie aussehen würde? for (int v = 0; v < modVerts.Length; v++) { Vector3 distance = modVerts [v] - localHitPoint; float force = deformPower / (1f + localHitPoint.sqrMagnitude); if (distance.sqrMagnitude < radius * radius) { modVerts [v] = modVerts [v] + (Vector3.up * force) / smoothingFactor; } }
  25. Hallo Sascha Hans Rosenthal würde sagen: "Das war Spitze!" Ich habe deine beiden Korrekturen übernommen und siehe da, es funktioniert tadellos. Besten Dank für die rasche und wie immer kompetente Hilfe!
×
×
  • Create New...