Как получить значения enum из другого скрипта (Unity)

В настоящее время у меня возникают проблемы с получением значения моего перечисления из другого скрипта, вот мой скрипт, который обрабатывает перечисление

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)

но все равно

Может кто-нибудь, пожалуйста, помогите мне с этим.

Эти скрипты привязаны к одному и тому же gameObject?

Johnny 13.03.2019 11:17

Они разные

user9804443 13.03.2019 11:17

Затем вам нужно сначала получить этот скрипт, что-то вроде otherGameObject.GetComponent<TrafficLightHandler>()

Johnny 13.03.2019 11:18

также используйте switch или else if, если вам небезразлично качество кода

Menyus 13.03.2019 11:21

@Джонни Спасибо. Извините, забудьте это сделать

user9804443 13.03.2019 11:27

@BoonMingProg рад, что это полезно, я опубликую краткий ответ;)

Johnny 13.03.2019 11:28

Хорошо. Спасибо отмечу как ответ

user9804443 13.03.2019 11:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
1 299
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы иметь возможность использовать другой скрипт, вам нужно получить его как любой другой компонент, используя GetComponent<TCompoenent>().

Если оба скрипта привязаны к одному и тому же gameObject, то просто используйте текущий gameObject

var tlh = gameObject.GetComponent<TrafficLightHandler>();
...
tlh.Trafficlight

В противном случае, если сценарии прикреплены к другому объекту, вам потребуется ссылка на владельца этого сценария для фактического поиска.

public GameObject otherScriptHolder;
var tlh = otherScriptHolder.GetComponent<TrafficLightHandler>();
...
tlh.Trafficlight

Другие вопросы по теме