【问题标题】:How to get enum values from another script (Unity)如何从另一个脚本中获取枚举值(Unity)
【发布时间】:2019-03-13 10:08:20
【问题描述】:

我目前无法从另一个脚本中获取我的枚举值,这是我处理枚举的脚本

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
  • 他们是不同的
  • 那么你需要先检索那个脚本,比如otherGameObject.GetComponent&lt;TrafficLightHandler&gt;()
  • 如果您关心代码质量,也可以使用 switchelse if
  • @Johnny 谢谢。抱歉忘记这样做了

标签: c# unity3d


【解决方案1】:

为了能够使用其他脚本,您需要使用GetComponent&lt;TCompoenent&gt;() 将其作为任何其他组件检索。

如果两个脚本都附加到同一个gameObject,那么只需使用当前的gameObject

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

否则,如果脚本附加到不同的对象,那么您需要对该脚本持有者的引用才能进行实际检索。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多