2017-04-08 2 views
0

Um einen Zusammenhang zu geben: In der Einheit habe ich 2 Boxen, die beide markiert sind "Box" Eine Box ist in einem Flugzeug und die andere in der Luft, wenn das Spiel auf der Box auf der anderen gespielt wird. Hier ist die Konsole für den Motor:Ich habe eine for-Schleife in C#, die in Verbindung mit Unity-Engine funktioniert. Aber wie mache ich es so, dass es die Schleife nur einmal aufruft?

Material 1 (UnityEngine.Material) 
UnityEngine.Debug:Log(Object) 
colourChangeArray:OnCollisionEnter(Collision) (at Assets/colourChangeArray.cs:28) 

mit Material 1 zu ändernden Material 2, 3, 4 bis 5 und dann tut den 1-5-Zyklus 10-20 mal

Unten ist der Code i verwende

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class colourChangeArray : MonoBehaviour 
{ 
    public int trigger = 1; 
    public Material[] material; 
    Renderer rend; 

    // Use this for initialization 
    void Start() 
    { 
     rend = GetComponent <Renderer>(); 
     rend.enabled = true; 
     rend.sharedMaterial = material[0]; 

    } 


    // Update is called on collision 
    void OnCollisionEnter(Collision col) 
    { 
     if (col.gameObject.tag == "box") 
     { 

      for(int i = 0; i <material.Length; i++){ 
       rend.sharedMaterial = material[i]; 
       Debug.Log(rend.sharedMaterial); 
        } 
     } 
     else 
     { 
      rend.sharedMaterial = material[0]; 
      Debug.Log(rend.sharedMaterial); 
     } 

    } 
} 

Antwort

0

Der Zyklus zwischen Materialien geschehen einige Male wegen der internen bounciness der Gegenstände in der Einheit. Sie können es irgendwie verringern (woran ich mich nicht erinnere), aber ich hatte einmal einen ähnlichen Fall und egal wie sehr Sie abnehmen, dass es passiert. So wäre der beste Ansatz sein, um einen Wert zu speichern, angibt, dass es vor wie dies getan wurde:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class colourChangeArray : MonoBehaviour 
{ 
    public int trigger = 1; 
    public Material[] material; 
    Renderer rend; 
    private bool changeMaterialDone; 

    // Use this for initialization 
    void Start() 
    { 
     rend = GetComponent <Renderer>(); 
     rend.enabled = true; 
     rend.sharedMaterial = material[0]; 
     changeMaterialDone = false; 
    } 


    // Update is called on collision 
    void OnCollisionEnter(Collision col) 
    { 
     if (!changeMaterialDone && col.gameObject.tag == "box") 
     { 
      changeMaterialDone = true; 
      for(int i = 0; i <material.Length; i++) 
      { 
       rend.sharedMaterial = material[i]; 
       Debug.Log(rend.sharedMaterial); 
      } 
     } 
     else 
     { 
      rend.sharedMaterial = material[0]; 
      Debug.Log(rend.sharedMaterial); 
     } 
    } 
} 

Ich hoffe, es hilft Ihnen :)

+0

Dank Emad wird auf jeden Fall diese Lösung testen! –

+0

Bitte tun. Und wenn Sie es nützlich fanden, vergessen Sie nicht, upvote :) – Emad

Verwandte Themen