Jump to content
Unity Insider Forum

Player Material durch Collider ändern


Pandur

Recommended Posts

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Link zu diesem Kommentar
Auf anderen Seiten teilen

#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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Super hab es jetzt hinbekommen und es funtz wirklich super mit deinen Code :D

 

#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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

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

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

Lädt...
×
×
  • Neu erstellen...