В настоящее время у меня возникают проблемы с получением значения моего перечисления из другого скрипта, вот мой скрипт, который обрабатывает перечисление
TrafficLightHandler.cs
public enum TRAFFIC_LIGHT
{
GREEN,
YELLOW,
RED
};
public class TrafficLightHandler : MonoBehaviour {
public TRAFFIC_LIGHT Trafficlight;
public IEnumerator TrafficLight(){
while (true) {
#region Traffic light is green
//traffic light 1 = green
Trafficlight = TRAFFIC_LIGHT.GREEN;
if (Trafficlight == TRAFFIC_LIGHT.GREEN){
TrafficLightGreenToRed ();
traffic_light_signal[0].GetComponent<Renderer>().material = materials [0];
traffic_light_signal[1].GetComponent<Renderer>().material = materials[2];
//Debug.Log(Trafficlight.ToString());
}
#endregion
yield return new WaitForSeconds (10);
#region Traffic light is yellow
Trafficlight = TRAFFIC_LIGHT.YELLOW;
if (Trafficlight == TRAFFIC_LIGHT.YELLOW){
TrafficLightYellowTrafficLight1 ();
traffic_light_signal[0].GetComponent<Renderer>().material = materials[1];
//Debug.Log(Trafficlight.ToString());
}
#endregion
yield return new WaitForSeconds(3);
#region Traffic light is red
Trafficlight = TRAFFIC_LIGHT.RED;
if (Trafficlight == TRAFFIC_LIGHT.RED){
TrafficLightRedToGreen ();
traffic_light_signal[0].GetComponent<Renderer>().material = materials [2];
traffic_light_signal[1].GetComponent<Renderer>().material = materials[0];
//Debug.Log(Trafficlight.ToString());
}
#endregion
yield return new WaitForSeconds (10);
//SWITCH TO SECOND TRAFFIC LIGHT
#region Traffic light is yellow
Trafficlight = TRAFFIC_LIGHT.YELLOW;
if (Trafficlight == TRAFFIC_LIGHT.YELLOW){
TrafficLightYellowTrafficLight2();
traffic_light_signal [1].GetComponent<Renderer> ().material = materials [1];
//Debug.Log(Trafficlight.ToString());
}
#endregion
yield return new WaitForSeconds (3);
}
}
}
В приведенном выше скрипте он изменяет значение перечисления после new waitforsecond. Теперь вот мой второй сценарий.
StopAndGoHandler.cs
TRAFFIC_LIGHT tlh;
private void TrafficLightSignal(){
Debug.Log (tlh.ToString());
if (tlh == TRAFFIC_LIGHT.GREEN){
Debug.Log ("You can go");
}
if (tlh == TRAFFIC_LIGHT.RED){
Debug.Log ("You need to stop");
}
if (tlh == TRAFFIC_LIGHT.YELLOW){
Debug.Log ("Preparation to stop");
}
}
Проблема с этим скриптом заключается в том, что он получает только ЗЕЛЕНОЕ значение, и если значение перечисления изменяется, например, с GREEN на YELLOW, он не может получить значение YELLOW, а вместо этого остается зеленым.
я пытался сделать это
public TrafficLightHandler tlc = new TrafficLightHandler();
и вызовите мое перечисление, сделав это
if (tlc.Trafficlight = TRAFFIC_LIGHT.GREEN)
но все равно
Может кто-нибудь, пожалуйста, помогите мне с этим.
Они разные
Затем вам нужно сначала получить этот скрипт, что-то вроде otherGameObject.GetComponent<TrafficLightHandler>()
также используйте switch или else if, если вам небезразлично качество кода
@Джонни Спасибо. Извините, забудьте это сделать
@BoonMingProg рад, что это полезно, я опубликую краткий ответ;)
Хорошо. Спасибо отмечу как ответ





Чтобы иметь возможность использовать другой скрипт, вам нужно получить его как любой другой компонент, используя GetComponent<TCompoenent>().
Если оба скрипта привязаны к одному и тому же gameObject, то просто используйте текущий gameObject
var tlh = gameObject.GetComponent<TrafficLightHandler>();
...
tlh.Trafficlight
В противном случае, если сценарии прикреплены к другому объекту, вам потребуется ссылка на владельца этого сценария для фактического поиска.
public GameObject otherScriptHolder;
var tlh = otherScriptHolder.GetComponent<TrafficLightHandler>();
...
tlh.Trafficlight
Эти скрипты привязаны к одному и тому же
gameObject?