Jump to content
Unity Insider Forum
Sign in to follow this  
minuschki

Materialfarbe einer Figur ändern

Recommended Posts

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
		}
	}
}

 

Figuren.jpg

DAZStudioSchnappschuss001.png

Share this post


Link to post
Share on other sites

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.

 

UnitySchnappschuss001.png.5dae34bc646ed88c266f05be2f086a7e.png

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Ich habe mir das mal angeschaut. Die Figur hat ganz viele Materialien und für jedes Material auch eine Polygonselektion. 
material.thumb.png.e785cd99c561fc6ca61aeddd07f5ace7.png

 

Und wie du siehst, ist das erste Material mit der ersten Selektion in der Hierachie genau das, was bei dir nur eingefärbt wird.
Ich habe das jetzt nicht in Unity getestet und ich weiß jetzt auch nicht aus dem Stehgreif, wie man per code die Selektionen bestimmen kann.
Aber ein Tipp: Versuch doch mal die Figur ohne Texturen zu exportieren. Da sollte dann auch die Selektionsinfo weg sein.
Es könnte auch an dem Haken Collapse UV Maps liegen. Der Exporter hat nämlich wirklich eine einzige UV Map raus, wo alle Selektionen übereinander liegen.
Also mach die Haken für die Textures und die UVMap mal raus.

Share this post


Link to post
Share on other sites

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.

 

DAZStudioSchnappschuss001.png

UnitySchnappschuss001.png

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...