Как получить значения enum из другого скрипта (Unity) - PullRequest
1 голос
/ 13 марта 2019

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

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)

но все тот же

Может кто-нибудь помочь мне с этим.

1 Ответ

0 голосов
/ 13 марта 2019

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

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

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

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

public GameObject otherScriptHolder;
var tlh = otherScriptHolder.GetComponent<TrafficLightHandler>();
...
tlh.Trafficlight
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...