首页 > 解决方案 > 无法将公共变量的值获取到 Unity3D c# 中的另一个脚本中

问题描述

我的脚本中有一个public Color winColorvar 。gameController.cs我在Start(). 现在我想在另一个脚本中获取它的值check.cs

现在我因为它是公开的,所以我使用GameObject.Find("gameController").GetComponent<gamePlay>().winColor; 了这里的问题是它显示了不同的值。这是我的代码tile.cs

private Color winingColor;

    void Start () 
    {
        winingColor = GameObject.Find("gameController").GetComponent<gamePlay>().winColor;
        Debug.Log(winingColor);
    }

    void Update () 
    {
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        bool overSprite = this.GetComponent<SpriteRenderer>().bounds.Contains(mousePosition);

        if (overSprite)
        {
            if (Input.GetButton("Fire1"))
            {

                if (this.GetComponent<SpriteRenderer>().color == winingColor)
                {
                    float x = this.gameObject.transform.position.x;
                    this.gameObject.transform.position = new Vector3(x, 3.5f, 0.0f);
                }
            }
        }
    }

gameController.cs代码

public GameObject ball;
    public List<GameObject> tiles;

    private Color [] colors = { new Color(0,1,0,1), new Color(1,0,0,1), new Color(1,1,1,1), new Color(0,0,1,1),  new Color(1,1,0,1), new Color(0, 0, 0, 1)};

    public Color winColor;

    // Use this for initialization
    void Start () 
    {
        winColor = colors[1];
        Debug.Log("con wincolor:" + winColor);
        ball.GetComponent<SpriteRenderer>().color = colors[1];
        tiles[0].GetComponent<SpriteRenderer>().color = colors[0];
        tiles[1].GetComponent<SpriteRenderer>().color = colors[1];
        tiles[2].GetComponent<SpriteRenderer>().color = colors[3];
        tiles[3].GetComponent<SpriteRenderer>().color = colors[4];

    }

winColorin的值gameController.csRGBA(1.000, 0.000, 0.000, 1.000) But in tile.csI am gettingRGBA(0.000, 0.000, 0.000, 0.000)

有什么想法吗?

标签: c#unity3d

解决方案


不同游戏对象的 Start() 以您意想不到的顺序发生。
如果 Tile.cs Start() 首先发生,则不会设置 winColor。

将此行移至 Awake()

winColor = colors[1];

解决此问题的另一种方法是,如果 winColor 不应该更改,您可以将 winColor 更改为 Property getter,然后删除该winColor = colors[1];行。

public Color winColor { get { return colors[1];}}

推荐阅读