• Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

Zer0Cool

Members
  • Content count

    342
  • Joined

  • Last visited

  • Days Won

    20

Zer0Cool last won the day on April 23

Zer0Cool had the most liked content!

Community Reputation

73 Excellent

1 Follower

About Zer0Cool

Contact Methods

  • Website URL
    http://https://www.facebook.com/huginmuninstudios
  • Skype
    zer0f0rce

Profile Information

  • Gender
    Male
  • Location
    Germany

Recent Profile Visitors

1,591 profile views
  1. Sind nach dem Build die Farben zwar da, aber du kannst sie nicht mehr ändern, oder sind die Farben komplett weg? OnMouseDown() funktioniert nur pro GameObjekt, d.h. du kannst diese Funktion nicht in der Klasse "Zustandsaenderung" verwenden. Du kannst aber an jedem deiner "Cubes" ein Skript verpassen und diesem Skript Werte über die Klasse "Zustandsaenderung" übergeben. Dieses Skript dient dann quasi als Datenschnittstelle. Da du ja bereits 3 Skripte erstellt hast und diese bereits an den "Cubes" hängen, so kannst du "einfach" auf diese Skripte zugreifen: if (aktuellesObjekt != null && aktuelleSpalte == 2) // Falls Objekt gefunden wurde und wenn wir uns in der 2. Spalte befinden (hier stehen die Farben) { aktuellesObjekt.GetComponent<Renderer>().materials[0].color = meineFarben[int.Parse(Spalte)]; meinSkript1 = aktuellesObjekt.GetComponent<meinSkript1>(); meinSkript1.rufeMethodeX(Zeile[2]); // Übergibt Wert in Spalte 3 meinSkript2= aktuellesObjekt.GetComponent<meinSkript2>(); meinSkript2.rufeMethodeY(Zeile[2]); // Übergibt Wert in Spalte 3 ... }
  2. Mhh, ich dachte die Routine wäre besser. Als Notlösung vorher alle leeren Plätze im Array mit einem vordefinierten String füllen. Zum Beispiel: int index = 0; foreach (string freund in freunde) { if (freund == null) freunde[index] = "leer"; index += 1; }
  3. Ok, ich hab mich mal rangesetzt, war nicht gerade einfach... Ist alles wenig getestet, also mit Vorsicht zu verwenden. Es gibt nun 3 neue Menüpunkte (Translation Equal X Y und Z). Hier wird die Breite der Objekte in der jeweiligen Richtung mit berücksichtigt. /* Author: Matthew J. Collins (Délé) Date: 12.21.09 http://www.DeleVinciStudios.com Co-Author: Zer0Cool aka Zer0f0rce (Skype) for Unity Insider Forum: Added distribution with constant spacing in case of different object sizes. */ // align in the x translation axis @MenuItem ("LineMup/Align/Translation X") static function AlignmentTransX () { // execute alignment for the x axis AlignOrDistribute(false, "transX"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Translation X", true) static function ValidateAlignmentTransX () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align in the y translation axis @MenuItem ("LineMup/Align/Translation Y") static function AlignmentTransY () { // execute alignment for the y axis AlignOrDistribute(false, "transY"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Translation Y", true) static function ValidateAlignmentTransY () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align in the z translation axis @MenuItem ("LineMup/Align/Translation Z") static function AlignmentTransZ () { // execute alignment for the z axis AlignOrDistribute(false, "transZ"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Translation Z", true) static function ValidateAlignmentTransZ () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align the rotation @MenuItem ("LineMup/Align/Rotation") static function AlignmentRotation () { // execute alignment in all axes AlignOrDistribute(false, "rotAll"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Rotation", true) static function ValidateAlignmentRotation () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align in the x scale axis @MenuItem ("LineMup/Align/Scale X") static function AlignmentScaleX () { // execute alignment for the x axis AlignOrDistribute(false, "scaleX"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Scale X", true) static function ValidateAlignmentScaleX () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align in the y scale axis @MenuItem ("LineMup/Align/Scale Y") static function AlignmentScaleY () { // execute alignment for the y axis AlignOrDistribute(false, "scaleY"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Scale Y", true) static function ValidateAlignmentScaleY () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // align in the z scale axis @MenuItem ("LineMup/Align/Scale Z") static function AlignmentScaleZ () { // execute alignment for the z axis AlignOrDistribute(false, "scaleZ"); } // determine if the function can be executed. @MenuItem ("LineMup/Align/Scale Z", true) static function ValidateAlignmentScaleZ () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the x translation axis @MenuItem ("LineMup/Distribute/Translation X") static function DistributeTransX () { // execute distribution for the x axis AlignOrDistribute(true, "transX"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Translation X", true) static function ValidateDistributeTransX () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the y translation axis @MenuItem ("LineMup/Distribute/Translation Y") static function DistributeTransY () { // execute distribution for the y axis AlignOrDistribute(true, "transY"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Translation Y", true) static function ValidateDistributeTransY () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the z translation axis @MenuItem ("LineMup/Distribute/Translation Z") static function DistributeTransZ () { // execute distribution for the z axis AlignOrDistribute(true, "transZ"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Translation Z", true) static function ValidateDistributeTransZ () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute equal in the x translation axis @MenuItem ("LineMup/Distribute/Translation Equal X") static function DistributeEqualTransX () { // execute distribution equal for the x axis AlignOrDistribute(true, "transEqualX"); } // distribute equal in the y translation axis @MenuItem ("LineMup/Distribute/Translation Equal Y") static function DistributeEqualTransY () { // execute distribution equal for the y axis AlignOrDistribute(true, "transEqualY"); } // distribute equal in the z translation axis @MenuItem ("LineMup/Distribute/Translation Equal Z") static function DistributeEqualTransZ () { // execute distribution equal for the x axis AlignOrDistribute(true, "transEqualZ"); } // distribute the rotation @MenuItem ("LineMup/Distribute/Rotation") static function DistributeRotation () { // execute distribution in all axes AlignOrDistribute(true, "rotAll"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Rotation", true) static function ValidateDistributeRotation () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the x scale axis @MenuItem ("LineMup/Distribute/Scale X") static function DistributeScaleX () { // execute distribution for the x axis AlignOrDistribute(true, "scaleX"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Scale X", true) static function ValidateDistributeScaleX () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the y scale axis @MenuItem ("LineMup/Distribute/Scale Y") static function DistributeScaleY () { // execute distribution for the y axis AlignOrDistribute(true, "scaleY"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Scale Y", true) static function ValidateDistributeScaleY () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } // distribute in the z scale axis @MenuItem ("LineMup/Distribute/Scale Z") static function DistributeScaleZ () { // execute distribution for the z axis AlignOrDistribute(true, "scaleZ"); } // determine if the function can be executed. @MenuItem ("LineMup/Distribute/Scale Z", true) static function ValidateDistributeScaleZ () { // only return true if there is a transform in the selection. return (Selection.activeTransform != null); } static function AlignOrDistribute(shouldDist, theAxis){ // create some variables to store values var firstObj = Selection.activeTransform; var furthestObj = firstObj; var firstVal = 0.0; var furthestVal = 0.0; var curDist = 0.0; var lastDist = 0.0; var selCount = 0; // collect the number of tranforms in the selection and find the object that is furthest away from the active selected object for (var transform in Selection.transforms) { // collect the current distance curDist = Vector3.Distance(firstObj.position, transform.position); // get the object with the greatest distance from the first selected object if (curDist > lastDist) { furthestObj = transform; lastDist = curDist; } // increment count selCount += 1; } // distribute or align? if (shouldDist) { // collect the first value and furthest value to distribute between switch (theAxis) { case "transX": case "transEqualX": firstVal = firstObj.position.x; furthestVal = furthestObj.position.x; break; case "transY": case "transEqualY": firstVal = firstObj.position.y; furthestVal = furthestObj.position.y; break; case "transZ": case "transEqualZ": firstVal = firstObj.position.z; furthestVal = furthestObj.position.z; break; case "scaleX": firstVal = firstObj.localScale.x; furthestVal = furthestObj.localScale.x; break; case "scaleY": firstVal = firstObj.localScale.y; furthestVal = furthestObj.localScale.y; break; case "scaleZ": firstVal = firstObj.localScale.z; furthestVal = furthestObj.localScale.z; break; default: break; } // calculate the spacing for the distribution var objSpacing = (firstVal - furthestVal) / (selCount - 1); var curSpacing = objSpacing; var rotSpacing = 1.0 / (selCount - 1); var curRotSpacing = rotSpacing; // Zer0f0rce: Calculate the spacing for the equal distribution var widthObjectsX = 0f; var widthObjectsY = 0f; var widthObjectsZ = 0f; var startObject; if (first < furthestObj) startObject = firstObj; else startObject = furthestObj; for (var transform in Selection.transforms) { if ((transform != firstObj) && (transform != furthestObj)) { widthObjectsX = widthObjectsX + transform.lossyScale.x; widthObjectsY = widthObjectsY + transform.lossyScale.y; widthObjectsZ = widthObjectsZ + transform.lossyScale.z; } } widthObjectsX = widthObjectsX + (firstObj.lossyScale.x / 2.0f) + (furthestObj.lossyScale.x / 2.0f); widthObjectsY = widthObjectsY + (firstObj.lossyScale.y / 2.0f) + (furthestObj.lossyScale.y / 2.0f); widthObjectsZ = widthObjectsZ + (firstObj.lossyScale.z / 2.0f) + (furthestObj.lossyScale.z / 2.0f); widthLeftX = (firstVal - furthestVal) - (widthObjectsX*Mathf.Sign(firstVal - furthestVal)); widthLeftY = (firstVal - furthestVal) - (widthObjectsY*Mathf.Sign(firstVal - furthestVal)); widthLeftZ = (firstVal - furthestVal) - (widthObjectsZ*Mathf.Sign(firstVal - furthestVal)); objSpacingX = widthLeftX / (selCount - 1); objSpacingY = widthLeftY / (selCount - 1); objSpacingZ = widthLeftZ / (selCount - 1); // update every object in the selection to distribute evenly var predecessor=null; for (var transform in Selection.transforms) { switch (theAxis) { case "transX": if ((transform != firstObj) && (transform != furthestObj)) { transform.position.x = firstVal - curSpacing; curSpacing += objSpacing; } break; case "transY": if ((transform != firstObj) && (transform != furthestObj)) { transform.position.y = firstVal - curSpacing; curSpacing += objSpacing; } break; case "transZ": if ((transform != firstObj) && (transform != furthestObj)) { transform.position.z = firstVal - curSpacing; curSpacing += objSpacing; } break; case "transEqualX": if ((transform != firstObj) && (transform != furthestObj)) { if (predecessor==null) { transform.position.x = startObject.position.x - Mathf.Sign(firstVal - furthestVal)*startObject.lossyScale.x/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.x/2.0f - objSpacingX; } else { transform.position.x = predecessor.position.x - Mathf.Sign(firstVal - furthestVal)*predecessor.lossyScale.x/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.x/2.0f - objSpacingX; } } break; case "transEqualY": if ((transform != firstObj) && (transform != furthestObj)) { if (predecessor==null) { transform.position.y = startObject.position.y - Mathf.Sign(firstVal - furthestVal)*startObject.lossyScale.y/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.y/2.0f - objSpacingY; } else { transform.position.y = predecessor.position.y - Mathf.Sign(firstVal - furthestVal)*predecessor.lossyScale.y/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.y/2.0f - objSpacingY; } } break; case "transEqualZ": if ((transform != firstObj) && (transform != furthestObj)) { if (predecessor==null) { transform.position.z = startObject.position.z - Mathf.Sign(firstVal - furthestVal)*startObject.lossyScale.z/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.z/2.0f - objSpacingZ; } else { transform.position.z = predecessor.position.z - Mathf.Sign(firstVal - furthestVal)*predecessor.lossyScale.z/2.0f - Mathf.Sign(firstVal - furthestVal)*transform.lossyScale.z/2.0f - objSpacingZ; } } break; case "rotAll": if ((transform != firstObj) && (transform != furthestObj)) { transform.rotation = Quaternion.Slerp (firstObj.rotation, furthestObj.rotation, curRotSpacing); curRotSpacing += rotSpacing; } break; case "scaleX": if ((transform != firstObj) && (transform != furthestObj)) { transform.localScale.x = firstVal - curSpacing; curSpacing += objSpacing; } break; case "scaleY": if ((transform != firstObj) && (transform != furthestObj)) { transform.localScale.y = firstVal - curSpacing; curSpacing += objSpacing; } break; case "scaleZ": if ((transform != firstObj) && (transform != furthestObj)) { transform.localScale.z = firstVal - curSpacing; curSpacing += objSpacing; } break; default: break; } predecessor = transform; } } else { // snap every object in the selection to the first objects value for (var transform in Selection.transforms) { switch (theAxis) { case "transX": transform.position.x = firstObj.position.x; break; case "transY": transform.position.y = firstObj.position.y; break; case "transZ": transform.position.z = firstObj.position.z; break; case "rotAll": transform.rotation = firstObj.rotation; break; case "scaleX": transform.localScale.x = firstObj.localScale.x; break; case "scaleY": transform.localScale.y = firstObj.localScale.y; break; case "scaleZ": transform.localScale.z = firstObj.localScale.z; break; default: break; } } } }
  4. Hab die CSV-Datei nochmal geändert...
  5. Mein CSV-Datei war: Sphere (1),1 Sphere (2),0 Sphere (3),1 Die CSV-Datei muss zu den Namen in Unity passen! Also: Cube,1 Cube (1),0 Cube (2),1
  6. Hast du dem Skript Farben zugewiesen? Genau wie du die Würfel im Inspektor zugeordnet hast musst du dort Farben definieren im Inspektor!
  7. Nein, ist noch die Variante mit dem "Zuweisen". Zusätzlich kannst du auch noch die Farben dem Skript zuweisen! Ansonsten sollte eigentlich gehen, nimmt vielleich mal Int.Parse, aber Float.Parse sollte auch gehen. Tue doch mal ein Debug an die entsprechende Stelle: Debug.Log(Spalten[1]); if (int.Parse(Spalten[1]) == 1) { meineObjekte[0].GetComponent<Renderer>().materials[0].color = Color.green; }
  8. Ist ja alles gut kommentiert nun und daher kannst du ja nun auch sehen, wie es gemacht werden könnte, um deinen eigenen Code damit weiter entwickeln... Jede "foreach"-Schleife geht jeweils entweder über alle Zeilen oder über alle Spalten der Zeile. Einfach damit herumspielen, bis du es verstehst. Ansonsten ist es korrekt "Spalten [1]" steht für die 2. Spalte, wenn du dich in der "foreach (string Zeile in Zeilen)" befindest. Hier noch einmal Pseudocode zur Veranschaulichung: foreach (string Zeile in Zeilen) Zeile: "Sphere (1),1" foreach (string Spalte in Spalten) Spalte: "Sphere (1)" Spalte: "1" Zeile: "Sphere (2),0" foreach (string Spalte in Spalten) Spalte: "Sphere (2)" Spalte: "0" Zeile: "Sphere (3),2" foreach (string Spalte in Spalten) Spalte: "Sphere (3)" Spalte: "2"
  9. Oben ist der fertige Code .. einfach anschauen und durchdenken
  10. So, daß wir hier mal vorankommen, hier der fertige Code. Du kannst nun alle Farben ebenfalls dem Skript zuordnen. "0" in der CSV-Datei bedeutet nun 1. Farbe im Slot. Alles ist beschrieben, so daß du es gut nachvollziehen kannst: /* CSVReader by zer0f0rce. (27/4/2017) */ using UnityEngine; public class SimpleCSVReader : MonoBehaviour { public TextAsset csvFile; public GameObject[] meineObjekte; public Color[] meineFarben; public void Start() { GameObject aktuellesObjekt; // Speichert das aktuell zu bearbeitende Objekt string[] Zeilen = csvFile.text.Split('\n'); int aktuelleZeile = 0; foreach (string Zeile in Zeilen) // Gehe alle Zeilen in der CSV-Datei durch { int aktuelleSpalte = 0; aktuelleZeile += 1; string[] Spalten = Zeile.Split(','); // Wenn du hier wieder Zeile.Split(';') nimmst liest er wieder eine Datei mit Semikolons! aktuellesObjekt = null; // Noch kein zu bearbeitendes Objekt gefunden foreach (string Spalte in Spalten) // Gehe alle Spalten der jeweiligen Zeile durch { aktuelleSpalte += 1; Debug.Log("Zeile " + aktuelleZeile + " Spalte " + aktuelleSpalte + " = " + Spalte); if (aktuelleSpalte == 1) // wenn wir uns in der 1. Spalte befinden (hier stehen die Objektnamen) { aktuellesObjekt = SuchePassendesObjekt(Spalte); // Sucht das passende Objekt zum Namen der in der Spalte enthalten ist } if (aktuellesObjekt != null && aktuelleSpalte == 2) // Falls Objekt gefunden wurde und wenn wir uns in der 2. Spalte befinden (hier stehen die Farben) { aktuellesObjekt.GetComponent<Renderer>().materials[0].color = meineFarben[int.Parse(Spalte)]; // Farbe zuweisen nach Wert der Spalte } } } } private GameObject SuchePassendesObjekt(string objektName) { GameObject gefundenesObjekt = null; foreach (GameObject objekt in meineObjekte) // Durchsuche alle meine Objekte { if (objekt.name == objektName) // Suche das Objekt mit dem Namen { // Entsprechende Objekt gefunden! gefundenesObjekt = objekt; } } return gefundenesObjekt; } }
  11. Nimm mal oben das "<>" Zeichen um Code zu posten. Dann kann man deinen Code besser lesen. "Zeilen [1]" beinhaltet: "Sphere (1),1" Und deswegen wird "grün" niemals gesetzt. Du muss in die untere Schleife "foreach (string Spalte in Spalten)" um die einzelnen Spaltenwerte zu bekommen.
  12. Sehr gut
  13. Ja, genau. Du kannst deinen "Spheren" allerdings auch in der Szene "suchen" und dann der Variablen "mySpheres" zuordnen (dann allerdings private, da du die Kugeln nicht mehr über den Inspektor zuweisst), nur dann hast du erst einmal eine beliebige Reihenfolge. Wenn du allerdings den "Spheren" eindeutige Namen verpasst, dann kannst du die jeweiligen "Spheren" später wieder identifizieren. Hier der Code, wie du alle Objekte findest, an denen ein "SphereCollider" hängt (also deine Kugeln): private GameObject[] mySpheres; ... GameObject[] mySpheres = FindObjectsOfType(typeof(SphereCollider)) as GameObject[]; ... ... // Für Sphere 1 mySpheres[0].GetComponent<Renderer> ().materials [0].color = Color.red; ... Und hier noch der Code, um die gesuchte Kugel zu indentifizieren: foreach (GameObject sphere in mySpheres) { if (sphere.name == "Sphere (1)") { // Entsprechende Kugel gefunden! sphere.GetComponent<Renderer>().materials[0].color = Color.red; } } Ich glaube nun hast du alles was du brauchst, nun einfach alle Puzzleteile zusammensetzen
  14. Ja, das ist soweit alles richtig, aber GetComponent<Renderer> gibt dir den Renderer des "aktuellen" Gameobjektes zurück und das ist in deinem Fall das Gameobjekt, an welchem das Skript "Zustandsaenderung" dranhängt! Ich kenne deine Szene nicht, aber wenn dein GameObjekt "Sphere" nicht das Objekt ist, wo das Skript "Zustandsaenderung" dranhängt, dann kann es nicht funktionieren. Du musst deinem Skript "Zustandsaenderung" nun auch noch die GameObjekt-Referenzen deiner "Kugeln" übergeben, damit du die Farben setzen kannst. Hier ein Codebeispiel. Damit musst du dann noch deine Kugeln einzeln in den Slot "mySpheres" ziehen. public GameObject[] mySpheres; ... // Für Sphere 1 mySpheres[0].GetComponent<Renderer> ().materials [0].color = Color.red; ...
  15. Ja, und lass dir immer die aktuelle Zeile und Spalte und den Inhalt (=Spalte) mit ausgeben, wie ich es dort gemacht habe.