Ich möchte diesen Tunneleffekt erzeugen, bei dem kleine Kreise mit unterschiedlichem Radius innerhalb eines anderen Kreises dargestellt werden und i möchten, dass sich die Farben zwischen ihnen von einem inneren Kreis zu einem anderen äußeren Kreis verschieben.Einen Kreis (sprite/image oder mesh) kreisförmig von der Mitte bis zum gewünschten Radius einfärben
Ich habe versucht, 4 Kreise unter einem gemeinsamen Objekt zu platzieren und dort Materialfarbe (4kreise als Bilder in Leinwand, Sprite und Modell aus Mixer auch. Ich brauche eine gute Richtung. Ich habe eine Textur erstellt, um wie in SetPixel verwenden() Ich habe es gemacht, um es mit vollem Radius zu arbeiten, da SetPixel ganzzahlig ist. In meinen Gedanken liegt die Lösung in der Tatsache, entweder brauche ich circluar Linien, die das Ding allmählich füllen können oder kleine Flächen füllen für Kreise. m bereit, mit Shadern oder einem anderen Ansatz zu arbeiten, wie notwendig Codebeispiel:. Hier enthält circlesContainer viele solche Kreise und jeder Kreis enthalten vier Kreise mit 0-Index als kleinster Kreis innerhalb der größeren
public IEnumerator TunnelingColors(float delayTime,Transform circlesContainer)
{
currentColor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
for (int j = 0; j < circlesContainer.GetChild (i).transform.childCount; j++) {
circlesContainer.GetChild (i).transform.GetChild (j).GetComponent<MeshRenderer>().material.color = currentColor;
}
}
while (true)
{
[UnityEngine.Random.Range (0, CircleColors.Length)];
smallestCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
smallerCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
smallCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
Circlecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
for( t = 0 ; t <= delayTime ; t += 1f)
{
yield return new WaitForSeconds (1f);
if (t > 1f && t <= 3f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallestCirclecolor;
}
} else if (t >= 3f && t <= 5f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallerCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<MeshRenderer>().material.color = smallestCirclecolor;
}
} else if (t > 5f && t <=6f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<MeshRenderer>().material.color = smallerCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<MeshRenderer>().material.color = smallestCirclecolor;
}
} else if (t > 6f&&t<=7f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<MeshRenderer>().material.color = smallerCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<MeshRenderer>().material.color = smallestCirclecolor;
}
}else if (t > 7f && t<= 8f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<MeshRenderer>().material.color = smallerCirclecolor;
}
}else if (t > 8f) {
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
}
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
}
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<MeshRenderer>().material.color = smallCirclecolor;
}
currentColor = smallCirclecolor;
}
}
}
yield return null ;
}
}
. in ersten Fall
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<MeshRenderer>().material.color = smallestCirclecolor;
Color.Lerp(currentcolor,smallestCircleColor,t/delaytime);
Ergebnisse mit lerping
und ich habe versucht, wie die Farben lerping. kleines Video: https://drive.google.com/file/d/0B7LoX90Lc4O2OTJRNGhGLWpfY0k/view?usp=sharing
EDIT: @mgear Hier ist der aktualisierte Code und das dazugehörige Video, das ich hier einige Zweifel habe.
public IEnumerator TunnelingColorsMaterial (float delayTime,Transform circlesContainer)
{
currentColor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = currentColor;
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = currentColor;
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = currentColor;
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<SpriteRenderer>().color = currentColor;
circlesContainer.GetChild (i).transform.GetChild (4).GetComponent<SpriteRenderer>().color = currentColor;
}
while (true) {
smallestCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
smallerCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
smallCirclecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
Circlecolor = (Color)CircleColorsList [UnityEngine.Random.Range (0, CircleColors.Length)];
for (t = 0; t <= delayTime; t += 0.01f) {
yield return new WaitForSeconds (0.01f);
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (0).localScale, new Vector3 (circleDiameterRequiredInInchesforSmallestCircle, circleDiameterRequiredInInchesforSmallestCircle, circleDiameterRequiredInInchesforSmallestCircle), t/0.5f);
circlesContainer.GetChild (i).transform.GetChild (1).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (1).localScale, new Vector3 (circleDiameterRequiredInInchesforSmallCircle, circleDiameterRequiredInInchesforSmallCircle, circleDiameterRequiredInInchesforSmallCircle), t/1f);
circlesContainer.GetChild (i).transform.GetChild (2).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (2).localScale, new Vector3 (circleDiameterRequiredInInchesforLargeCircle, circleDiameterRequiredInInchesforLargeCircle, circleDiameterRequiredInInchesforLargeCircle), t/1.5f);
circlesContainer.GetChild (i).transform.GetChild (3).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (3).localScale, new Vector3 (circleDiameterRequiredInInchesforLargestCircle, circleDiameterRequiredInInchesforLargestCircle, circleDiameterRequiredInInchesforLargestCircle), t/2f);
if (circlesContainer.GetChild (i).transform.GetChild (0).localScale.x == circleDiameterRequiredInInchesforSmallestCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(currentColor,smallestCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = currentColor;
}
if (circlesContainer.GetChild (i).transform.GetChild (1).localScale.x == circleDiameterRequiredInInchesforSmallCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(smallestCirclecolor,smallerCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = Color.Lerp(currentColor,smallestCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = currentColor;
}
if (circlesContainer.GetChild (i).transform.GetChild (2).localScale.x == circleDiameterRequiredInInchesforLargeCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = Color.Lerp(smallestCirclecolor,smallerCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = Color.Lerp(currentColor,smallestCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<SpriteRenderer>().color = currentColor;
}
if (circlesContainer.GetChild (i).transform.GetChild (3).localScale.x == circleDiameterRequiredInInchesforLargestCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = Color.Lerp(smallestCirclecolor,smallerCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<SpriteRenderer>().color = Color.Lerp(currentColor,smallestCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (0).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (0).localScale, new Vector3 (circleDiameterRequiredInInchesforSmallCircle, circleDiameterRequiredInInchesforSmallCircle, circleDiameterRequiredInInchesforSmallCircle), t/0.5f);
}
if (circlesContainer.GetChild (i).transform.GetChild (0).localScale.x == circleDiameterRequiredInInchesforSmallCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<SpriteRenderer>().color = Color.Lerp(smallestCirclecolor,smallerCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (0).localScale = Vector3.Lerp (circlesContainer.GetChild (0).transform.GetChild (0).localScale, new Vector3 (circleDiameterRequiredInInchesforLargeCircle, circleDiameterRequiredInInchesforLargeCircle, circleDiameterRequiredInInchesforLargeCircle), t/0.5f);
}
if (circlesContainer.GetChild (i).transform.GetChild (0).localScale.x == circleDiameterRequiredInInchesforLargeCircle) {
circlesContainer.GetChild (i).transform.GetChild (0).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (1).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (2).GetComponent<SpriteRenderer>().color = Color.Lerp(smallerCirclecolor,smallCirclecolor,t);
circlesContainer.GetChild (i).transform.GetChild (3).GetComponent<SpriteRenderer>().color = Color.Lerp (smallerCirclecolor, smallCirclecolor, t);
// circlesContainer.GetChild (i).transform.GetChild (4).GetComponent<SpriteRenderer>().color = Color.Lerp (currentColor, smallCirclecolor, t);
}
}
}
for (int i = 0; i < circlesContainer.transform.childCount; i++) {
circlesContainer.GetChild (i).transform.GetChild (0).localScale = new Vector3 (0, 0, 0);
circlesContainer.GetChild (i).transform.GetChild (1).localScale = new Vector3 (0, 0, 0);
circlesContainer.GetChild (i).transform.GetChild (2).localScale = new Vector3 (0, 0, 0);
circlesContainer.GetChild (i).transform.GetChild (3).localScale = new Vector3 (0, 0, 0);
}
yield return null;
}
}
Wenn ich die einzige kommentierte Zeile im Code, was ich habe, ist die Farbe so lange bleibt, und wenn ich es nicht, dass die Linie haben plötzliche Veränderung aller Farben. Was ich haben möchte, ist eine gleiche Farbe zu haben und die Färbung wieder auf ähnliche Weise zu beginnen, ich bin nicht gut mit Lerping und bekomme das Gefühl, dass der letzte Parameter derjenige ist, der die Farbe verursacht.
Hier ist das Video, in dem die letzte Farbe bleibt.
https://drive.google.com/open?id=0B7LoX90Lc4O2czlWMldCMUpFYTg
Nette Idee, aber was haben Sie versucht? Wo ist deine Frage? – ppeterka
Ich habe versucht, 4 Kreise unter einem gemeinsamen Objekt zu platzieren und dort Materialfarbe (4kreise als Bilder in Leinwand, Sprite und Modell aus Mixer auch. Ich brauche eine gute Richtung. Ich habe eine Textur erstellt, um wie in setPixel() verwenden i haben es gemacht, um es mit vollem Radius zu arbeiten, da SetPixel int. nimmt –
Bitte fügen Sie dieses Detail zu Ihrer Frage hinzu, zeigen Sie Ihren Code, zeigen Sie das Ergebnis an und beschreiben Sie auch, was Ihr Ziel ist und wie das Ergebnis das nicht erfüllt.Lesen Sie bitte [welche Fragen auf dieser Site geeignet sind und wie Sie danach fragen können] (http://stackoverflow.com/help/asking). – ppeterka