Pandur Geschrieben 19. April 2015 Melden Share Geschrieben 19. April 2015 Hallo alle zusammen seid 2 Tagen zerbrech ich mir den Kopf wie ich das umsetzen kann.Ich habe ein Script zwar hier allerdings ändert sich da das Material wenn ich die linke Maustaste drücke. #pragma strict var matArray : Material[]; private var index : int; function Update () { if (Input.GetButtonDown("Fire1")) { index++; index = index % matArray.Length; GetComponent.<Renderer>().material = matArray[index]; } } Ich möchte aber es so haben das ich einen collider mir selber aussuchen kann und dann wenn ich ihn betrete das Material sich vom Spieler ändert und wenn ich ihn verlasse es sich wieder verändert auf das ursprüngliche. Schön wäre es auch wenn das Material nach verlassen des Colliders erst 5 sec später umschaltet auf das erste Material. Bei den Skript oben funtzt das schon recht gut aber eben nur mit Tasteneingabe und nicht mit collider,ich hab schon ein paar sachen ausprobiert aber so langsam kann ich Mono nicht mehr sehen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 19. April 2015 Melden Share Geschrieben 19. April 2015 Zuerst brauchst du mal OnTriggerEnter: http://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html Dann brauchst du OnTriggerExit: http://docs.unity3d.com/ScriptReference/Collider.OnTriggerExit.html Und dann brauchst du noch ein yield WaitForSeconds: http://docs.unity3d.com/ScriptReference/WaitForSeconds.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Pandur Geschrieben 19. April 2015 Autor Melden Share Geschrieben 19. April 2015 Danke die Sachen hatte ich mir schon rausgesucht aber ich bekomme es nicht wirklich so zusammen das es passt,leider. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 20. April 2015 Melden Share Geschrieben 20. April 2015 Wo genau klemmt es denn? Zeig mal was du bisher hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Pandur Geschrieben 20. April 2015 Autor Melden Share Geschrieben 20. April 2015 #pragma strict var Mat1 : Material; var Mat2 : Material; var Coli : Collider; function OnTriggerEnter (other : Collider) { GetComponent.<Renderer>().material = Mat2; } function OnTriggerExit(other) { GetComponent.<Renderer>().material = Mat1; } function Update () { if (Input.GetButtonDown("Fire1")) { GetComponent.<Renderer>().material = Mat2; } } Soweit bis jetzt aber immer wenn ich den Trigger berühre passiert nichts auch beim verlassen nicht,wenn ich aber Fire 1 drücke schon bin noch sehr unbeleckt was java scripten angeht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 20. April 2015 Melden Share Geschrieben 20. April 2015 Der Code sieht eigentlich okay aus. Auch wenn du beim OnTriggerExit da was in den Klammern vergessen hast. Aber da du im Moment eh nichts abfrägst was mit dem Inhalt der Klammer zu tun haben könnte ist es egal. Ich tippe auf dein Setup am Objekt. Du brauchst einen Rigidbody. Und du brauchst einen Collider mit aktivierter IsTrigger Checkbox. Hast du einen Rigidbody drauf? Und steht dein Collider auf IsTrigger? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Pandur Geschrieben 20. April 2015 Autor Melden Share Geschrieben 20. April 2015 Also ich hatte das Script an der PlayerMesh angelegt ohne Rigidbody,das hat nicht funktioniert,ich hab es nun an die Prefab (controller) gelegt wo auch ein Rigidbody drine vorkommt.Wenn ich nun in das Wasser springe was als isTrigger gekennzeichnet ist,bekomme ich ein Error wo drine steht : MissingComponentException: There is no 'Renderer' attached to the "Warrior" game object, but a script is trying to access it. You probably need to add a Renderer to the game object "Warrior". Or your script needs to check if the component is attached before using it. ss.OnTriggerEnter (UnityEngine.Collider other) (at Assets/ss.js:9) ich habe darauf hin den Code geändert aber ohne Erfolg : #pragma strict var Mat1 : Material; var Mat2 : Material; var Coli : Collider; var Rend : Renderer; function OnTriggerEnter (other : Collider) { GetComponent.<Renderer>().material = Mat2; } function OnTriggerExit(other) { GetComponent.<Renderer>().material = Mat1; } function Update () { if (Input.GetButtonDown("Fire1")) { GetComponent.<Renderer>().material = Mat2; } } Aber es ist schon mal schön zu sehen das er den Trigger abfragt. Hab es nochmal geändert aber ohne erfolg #pragma strict var Mat1 : Material; var Mat2 : Material; var Coli : Collider; var Rend : SkinnedMeshRenderer; var Player : GameObject; function OnTriggerEnter (other : Collider) { gameObject.GetComponent.<SkinnedMeshRenderer>().material = Mat2; } function OnTriggerExit(other) { gameObject.GetComponent.<SkinnedMeshRenderer>().material = Mat1; } function Update () { if (Input.GetButtonDown("Fire1")) { GetComponent.<Renderer>().material = Mat2; } } Er beklagt sich immer noch das er kein SkinnedMeshRenderer oder Renderer findet obwohl ich es angegeben habe im Script. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 20. April 2015 Melden Share Geschrieben 20. April 2015 Fein fein, also war wie vermutet kein Rigidbody im Spiel. Und ohne Rigidbody keine Kollision Der Code war aller Wahrscheinlichkeit nach in Ordnung. Der Fehler mit dem fehlenden Meshrenderer sagt dir eigentlich genau wo das Problem liegt. Es ist kein Meshrenderer an dem Objekt vorhanden an dem das Script angehängt ist. Das könntest du jetzt so lösen dass du den Meshrenderer mittels einer Variablen referenzierst, und im Inspector das entsprechende Objekt mit dem Meshrenderer draufziehst. Das würde dir sowieso das GetComponent ersparen: var meinmeshrenderer: MeshRenderer; Tu twas ... meinmeshrenderer.material = Mat2; Oder du hängst das Script an die richtige Instanz an Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Pandur Geschrieben 20. April 2015 Autor Melden Share Geschrieben 20. April 2015 Super hab es jetzt hinbekommen und es funtz wirklich super mit deinen Code #pragma strict var Mat1 : Material; var Mat2 : Material; var Coli : Collider; var meinmeshrenderer: SkinnedMeshRenderer; function OnTriggerEnter (other : Collider) { meinmeshrenderer.material = Mat2; } function OnTriggerExit(other) { meinmeshrenderer.material = Mat1; } function Update () { if (Input.GetButtonDown("Fire1")) { GetComponent.<Renderer>().material = Mat2; } } jetzt hab ich nur noch die frage wo ich die zeit eingeben muss dazwischen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiles Geschrieben 20. April 2015 Melden Share Geschrieben 20. April 2015 Glückwunsch Du könntest im OnTriggerExit einen Timer starten. Üblicherweise macht man das mit einer weiteren Coroutine und yield WaitForSeconds. Siehe oben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Pandur Geschrieben 20. April 2015 Autor Melden Share Geschrieben 20. April 2015 so ich habe es geschafft,vielen Dank dir Tiles Für alle die so etwas suchen hier der Code #pragma strict var Mat1 : Material; // Material welches benutzt werden soll bei Kontakt mit Trigger. var Mat2 : Material; // Material welches benutzt werden soll bei verlassen mit Trigger. var meinmeshrenderer: SkinnedMeshRenderer; function OnTriggerEnter (col : Collider) { // Befehl für Collider if(col.gameObject.name == "Cube"){ // Bestimmt das Object welches den Trigger hat yield WaitForSeconds (1); // Bestimmt die Zeit bis zum auslösen meinmeshrenderer.material = Mat1; // bestimmt das Material was geladen wird } } //function OnTriggerStay (other : Collider) { //meinmeshrenderer.material = Mat1; // Wenn man sich in einen Trigger aufhällt der durch Planes ausgelöst wurde. //} function OnTriggerExit(col : Collider) { // Befehl für Collider if(col.gameObject.name == "Cube"){ // Bestimmt das Object welches den Trigger hat yield WaitForSeconds (4); // Bestimmt die Zeit bis zum auslösen meinmeshrenderer.material = Mat2; // bestimmt das Material was geladen wird } } 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.