【问题标题】:Accessing instantiated resources from another script C#从另一个脚本 C# 访问实例化的资源
【发布时间】:2016-03-31 21:30:01
【问题描述】:

就上下文而言,我已经随着时间的推移实例化了多个 GameObjects,它们代表了我的游戏中的得分。我知道如何改变它们被实例化的位置。

string scoreText = score.ToString ();

for (int i = 0; i < scoreText.Length; i++)
    {
var go = (GameObject)Instantiate(Resources.Load(scoreText[i].ToString()));

go.transform.localPosition = new Vector3(0.02F + i * 0.01F, 0.13F, 0);
}

我不知道该怎么做是在另一个脚本中更改位置。同样,对于上下文,在另一个脚本中的 Game Over 中,我想更改我实例化的这些对象的位置。

我尝试了多种不同的 GetComponent 和 GameObject。我无法确定我想要访问的一个游戏对象,因为它是多个不断变化的游戏对象。我觉得我看的不对。有人知道怎么做吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    一种方法是将您的 GameObject 变量 go 设为类变量,以便您可以在其他方法中访问它。但是,如果您生成许多对象,您可以创建一个 GameObjects 数组,然后遍历它们以找到您需要的对象。您可以将数组设为公共变量,以便其他脚本可以查看它。

    【讨论】:

      【解决方案2】:

      其他脚本可以访问您的脚本中的数据publicstatic,因此第一步是创建一个变量来保存主脚本中的分数:

      public static GameObject[] Score;
      

      在初始化过程中,使用这个变量来保存分数:

      string scoreText = score.ToString ();
      
      Score = new GameObject[scoreText.Length];
      
      for (int i = 0; i < scoreText.Length; i++)
      {
          Score[i] = (GameObject)Instantiate(Resources.Load(scoreText[i].ToString()));
          Score[i].transform.localPosition = new Vector3(0.02F + i * 0.01F, 0.13F, 0);
      }
      

      此时,在游戏结束脚本中,您应该能够使用主脚本中的分数数据(如果这不起作用,请确保您使用了正确的命名空间和引用,但如果这两个脚本在同一个项目中应该没有任何问题):

      MainScript.Score //MainScript is the name of your main script
      

      如果你想在游戏结束脚本中迭代得分:

      for (int i = 0; i < MainScript.Score.Length; i++)
      {
          MainScript.Score[i] = do something here...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        • 2016-01-04
        • 1970-01-01
        • 2013-12-07
        • 2017-04-30
        • 2020-01-01
        相关资源
        最近更新 更多