Jump to content
Unity Insider Forum

minuschki

Members
  • Content Count

    13
  • Joined

  • Last visited

Community Reputation

0 Neutral

About minuschki

  • Rank
    Member
  1. Hallo zusammen Ich habe inzwischen herausgefunden, wie man einzelne Materialien in einem Skinned Mesh Renderer ansprechen bzw. umfärben kann! Man erstellt eine public Materialliste und kann dann innerhalb der rechteckigen Klammer angeben, welches Material aus der Liste eingefärbt werden soll. Danke an alle, die versucht haben zu helfen! public Material[] materials; m_Renderer.materials[8].color = new Color32(0, 0, 0,255);// Torso schwarz einfärben
  2. Ich habe nun deinen Rat befolgt und alle möglichen Haken rausgemacht. In Unity werden 9 Materialien importiert aber keine UV Maps. Ich weiss leider nicht, wie man diese 9 Materialien einzeln per code anspricht! Die Einfärbung klappt demzufolge wie gehabt wiederum nur teilweise. Sobald ich dann mein Material "grau" in den Inspector ziehe, verschwinden die 9 Materialien und es verbleibt mein Material "grau" und die Figur wird wie gewünscht eingefärbt. Anscheinend ist der Mesh Renderer in mehrere Teile unterteilt, wobei mir lieber wäre, wenn der in einem Stück wäre.
  3. Um die Frage zu beantworten, kenne ich mich leider zu wenig mit DAZ Studio aus. Alles was ich dazu sagen kann ist, dass ich die Figur in DAZ Studio geladen habe und ohne etwas daran zu ändern als fbx exportiert habe. Nach dem Importieren in Unity werden allerdings mehrere Texturen (für Körper, Arme ...) auch mit importiert, obwohl die Figur einfach nur weiss dargestellt wird. Da ich diese Texturen aber nicht brauche, habe ich diese wieder gelöscht, denn meine Figur soll einfach nur grau oder schwarz sein. Ich habe mal die Datei Figur als fbx angehängt, so wie sie original aus DAZ Studio exportiert wurde. Vielleicht hilft das ja! Frau DAZ.fbx
  4. Die exportierte Datei hat die Endung .fbx und lässt sich auch ohne Probleme in Unity importieren. Die Bones lassen sich ebenfalls normal bewegen. Wie bereits erwähnt, kann ich im Inspector ein Material "grau" auf die Mesh-Datei ziehen und die komplete Figur färbt sich korrekt in der Farbe grau ein. Auch mit dem Material "schwarz" funktioniert das im Inspector ebenso. Wenn ich aber das gleiche versuche mittels Script (siehe oben), wird bei der Figur eben nur ein Teil der Beine schwarz eingefärbt. Der Rest bleibt grau.
  5. Hallo zusammen Ich möchte gerne mit einem Script die Farbe von meinen Figuren von "grau" auf "schwarz" und umgekehrt umfärben. Als Startfarbe habe ich beiden Figuren ein Material "grau" angehängt und beide Figuren sind korrekt grau eingefärbt. Das Skript funktioniert bei der männlichen Figur (exportiert aus MakeHuman) wunderbar. Das Skript ist dem Objekt "base.objMesh" angefügt. Bei der weiblichen Figur (exportiert aus DAZ Studio) wird leider nur ein Teil der Beine schwarz gefärbt (siehe Bild). Das Skript ist dem Objekt "Genesis2Female.Shape" angefügt. Anstatt nur die Farbe des Materials zu ändern, habe ich ebenfalls die Variante mit dem Austauschen von 2 Materialien ausprobiert. Leider ist das Resultat unverändert. Ausser man ersetzt das graue Material durch das schwarze Material durch manuelles Hineinziehen im Inspector, dann klappt es - aber eben nicht mittels Script. Meine Vermutung ist nun, dass man beim (beziehungsweise vor dem) Exportieren als im fbx-Format aus DAZ Studio etwas speziell beachten muss. Mich wundert auch, dass das eine Objekt ".objMesh" heisst und das andere ".Shape". Hat aber vielleicht nichts zu bedeuten. Kann da jemand weiterhelfen? using System.Collections; using System.Collections.Generic; using UnityEngine; public class Farbe : MonoBehaviour { Renderer m_Renderer; public float farb = 0f; void Start() { m_Renderer = GetComponent<Renderer>(); } public void schatten() { if (farb == 0f) { farb = 1; m_Renderer.material.color = new Color32(0, 0, 0,255);//schwarz } else { farb = 0; m_Renderer.material.color = new Color32(96,96,96,255);//grau } } }
  6. Hallo zusammen Mit einem Drag and drop Script kann man ein Bildmotiv aufnehmen und auf die richtige Silhouette ablegen (siehe Bild unten). Im Script wird bei mouseUp überprüft, ob sich das Motivbild in unmittelbarer Nähe der richtigen Silhouette befindet. Wenn dies der Fall ist, übernimmt das Bild die Position der Silhouette, wenn nicht, springt es zum Startplatz zurück. Soweit alles gut! Nun möchte ich gerne, dass beim korrekten Ablegen eines Bildmotivs ein Partikeleffekt für einmal startet. Einen solchen habe ich bereits als Komponente jeder Silhouette hinzugefügt. 1. Die Frage ist nun, wie kann ich aus dem drag and drop script (ist den Motivbildern angehängt) das Particlesystem ansprechen, damit es für einen Durchgang startet? 2. Ist das Vorgehen grundsätzlich richtig, wenn der Partikeleffekt als Komponente den Silhouetten angefügt wird oder sollte das einem "empty Gameobject" angehängt werden? 3. Wie erreicht man, dass der Effekt nur einmal abgespielt wird und nicht ewig weiterläuft? Besten Dank für eure Hilfe! if (Mathf.Abs(transform.position.x - sss.x) < 1 && Mathf.Abs(transform.position.y - sss.y) < 1) { //Auf das Ziel ablegen (x und y Werte des Zieles übernehmen tempPos = transform.position; tempPos.x = sss.x; tempPos.y = sss.y; transform.position = tempPos; //Hier sollte jetzt der Partikeleffekt für einen Durchgang starten !!! //Ich habe leider keinen Schimmer, wie man das Partikelsystem jetzt ansteuern kann! } else { //Zurück zum Startpunkt transform.position = startPosition; } }
  7. Hallo devandart Besten Dank für deine Hilfe! Und es hat auch endlich geklappt. Im untenstehenden Code musste ich lediglich "byte[] bytes" durch "var bytes" ersetzen. Das Gute ist auch, dass auf dem Screenshot die UI Menuelemente gar nicht sichtbar sind. using System.Collections; using System.Collections.Generic; using UnityEngine; public class screenshot : MonoBehaviour { string a_Path; public void shot () { Debug.Log ("Bild wurde gesichert!"); a_Path = System.IO.Directory.GetCurrentDirectory() + "/Screenshots/"; RenderTexture tex = new RenderTexture(1600, 1600, 24); Camera.main.targetTexture = tex; Texture2D screenShot = new Texture2D(1600, 1600, TextureFormat.RGB24, false); Camera.main.Render(); RenderTexture.active = tex; screenShot.ReadPixels(new Rect(0, 0, 1600, 1600), 0, 0); Camera.main.targetTexture = null; RenderTexture.active = null; Destroy(tex); var bytes = screenShot.EncodeToJPG(100); var nameScreenshot = "Screenshot " + System.DateTime.Now.ToString("dd-MM-yyyy HH-mm-ss") + ".jpg"; System.IO.File.WriteAllBytes(a_Path + nameScreenshot, bytes); } }
  8. Hallo devandart Danke für deine Hilfe! Ich habe dein vorgeschlagenes Script durch meines ersetzt, erhalte aber Fehlermeldungen (camera.targetTexture und camera.Render werden nicht akzeptiert). Da ich Anfänger bin und gerade erst C# erlerne, habe ich leider keine Ahnung, wie man das beheben kann! Ich wäre dir sehr dankbar, wenn du entweder den oben geposteten Code funktionstüchtig ändern könntest oder die Fehlemeldungen im unteren Script beheben könntest! Sorry für die Umstände!
  9. Hallo zusammen Ich habe das folgende Script mit einem Button verknüpft. Sobald dieser gedrückt wird, soll ein Screenshot von einem rechteckigen Bereich (280, 0, 400, 400) meiner MainCamera gemacht werden und im angegebenen Ordner gespeichert werden. Problem: Es wird zwar ein PNG-Bild in der Grösse 400 x 400 im gewünschten Ordner abgelegt, aber dieses ist einfach nur komplett schwarz. Mit dem Befehl ScreenCapture hat das noch ganz gut geklappt, aber ich möchte eben nur einen bestimmten Bereich als Bild speichern und nicht den ganzen Screen. Vielleicht kann jemand von euch Profis den Code so ändern, dass er funktioniert. Danke für eure Hilfe! using System.Collections; using System.Collections.Generic; using UnityEngine; public class screenshot : MonoBehaviour { string a_Path; public void shot () { var tex = new Texture2D(400, 400, TextureFormat.RGB24, false); tex.ReadPixels(new Rect(280, 0, 400, 400), 0, 0); tex.Apply(); var bytes = tex.EncodeToPNG(); Destroy(tex); a_Path = System.IO.Directory.GetCurrentDirectory() + "/Screenshots/"; var nameScreenshot = "Screenshot " + System.DateTime.Now.ToString("dd-MM-yyyy HH-mm-ss") + ".png"; System.IO.File.WriteAllBytes(a_Path + nameScreenshot, bytes); } }
  10. Hallo zusammen Das folgende Script ist mit einem Button verknüpft. Wenn dieser Button gedrückt wird, wird ein Screenshot in den Projektordner gesichert. Im Editor funktioniert das einwandfrei (sowohl die Variante mit dem Datum wie auch die Variante mit fixem Filenamen). Problem: Nachdem ich Build und Run gedrückt habe, startet das Programm, aber das mit dem Screenshot funktioniert nicht mehr. Es wird kein Bild mehr gespeichert, zumindest kann ich es nirgends entdecken! Ich vermute, dass es sich um ein Pfadproblem handelt. Ich arbeite mit einem Mac OSX System, weiss aber nicht, wie man den Pfad zum Ordner, in den die Screenshots gespeichert werden können, korrekt setzen kann! Vielleicht fehlt irgend etwas im Stile von "Application.path" oder System.path". Eigentlich möchte ich, dass die Bilder in einen Ordner "Screenshots", welcher sich im Ordner "Dokumente" befindet, hineingespeichert werden! In meinem Fall: Harddisk > Benutzer > Benutzername > Dokumente > Screenshots Wie kann ich das beheben? Danke für eure Hilfe! using System.Collections; using System.Collections.Generic; using UnityEngine; public class screenshot : MonoBehaviour { public void shot () { Debug.Log ("Bild wurde gesichert!"); //var nameScreenshot = "Screenshot " + System.DateTime.Now.ToString("dd-MM-yyyy HH-mm-ss") + ".png"; //ScreenCapture.CaptureScreenshot(nameScreenshot); ScreenCapture.CaptureScreenshot("ScreenshotNEW.png");// , 1); für grössere Auflösung 1,2,3 oder 4 } }
  11. Hallo zusammen Ich bin blutiger Anfänger und komme bei einem Script-Problem nicht weiter. Ich habe eine menschliche Figur in die Szene importiert. Mit Hilfe von mehreren Slidern kann man die einzelnen Körperteile bewegen (z.B. den Arm seitlich anheben oder ein Knie beugen). Dazu habe ich das unten stehende "Rotationsscript" jeweils an einen Körperteil angehängt und mit einem Slider verbunden. Die Bewegung aller Körperteile funktioniert so sehr gut, aber ohne Winkelbegrenzung. Das heisst, ein Knie kann beispielsweise übel überstreckt werden. Um die Bewegung einzuschränken habe ich einen Startwinkel definiert (xxx). Mit einer "If else" Abfrage wird geprüft, ob eine Rotation ausgeführt werden darf oder ob die Grenzwerte (min 20° und max 140°) bereits erreicht sind. Das hat auch wunderbar funktioniert, aber eben nur für einen bestimmten Körperteil. Da jeder Körperteil aber seinen eigenen Startwinkel, Minimum und Maximum hat, müsste ich diese auch einzeln definieren können. Also sinngemäss: Wenn Slider 1 betätigt wird ist der Startwinkel=45, min=20, max=140 wenn Slider 2 betätigt wird ist der Startwinkel=80, min=35, max=80 u.s.w..... Wie kann ich das scriptmässig bewerkstelligen? Oder wie kann ich die individuellen Winkelwerte dem Rotationsscript übergeben? Besten Dank für eure Hilfe! using System.Collections; using UnityEngine; public class RotateCube : MonoBehaviour { public float speed1 = 0f; public float speed2 = 0f; public float speed3 = 0f; public float xxx = 45f;//Startwinkel public float yyy = 0f; public float zzz = 0f; void Update () { xxx = xxx + speed2 * Time.deltaTime; if(xxx < 140 && xxx > 20) { transform.Rotate (speed2 * Time.deltaTime, speed3 * Time.deltaTime, speed1 * Time.deltaTime); } else { xxx = Mathf.Clamp (xxx, 20, 140); } } public void AdjustSpeed1(float newSpeed1) { speed1 = newSpeed1; } public void AdjustSpeed2(float newSpeed2) { speed2 = newSpeed2; } public void AdjustSpeed3(float newSpeed3) { speed3 = newSpeed3; } }
×
×
  • Create New...