如何从一个脚本到另一个脚本获取gameobject数组的值?

时间:2018-12-22 06:23:59

标签: c# arrays unity3d

我是C#和Arcore的新手。我有一个名为GUIController.cs的示例控制器脚本,以及另一个名为ItemScrollList.cs的项目列表。我在GUIController中用2个预制元素0和1制作了一个带有数组的游戏对象。我想要实现的是,每次单击itemscrollList的内容(在这种情况下,都是2个项目,分别是item1和item2),我需要更改GUIController上的预制件。

我从下面的代码中得到的错误是,每当我单击内容项1或2时,它们都会返回nullpointerexceptions。

GUIController.cs上的行“ AndyPrefab = nowPrefabs.GetComponent()。currentPrefabs;”我需要它来正确显示预制件。请帮助我

GUIController.cs

if (hit.Trackable is FeaturePoint)
                     {
                         AndyPrefab = AndyPlanePrefab[0];
                     }
                     else
                     {
                         //this is manual input value AndyPlanePrefab as array 1
                         //AndyPrefab = AndyPlanePrefab[1]; 

                         //this is where i need it to properly show the correct prefab
                         AndyPrefab = nowPrefabs.GetComponent<ItemScrollList>().currentPrefabs;
                     }

ItemScrollList.cs

//this is where i create the button for itemlist
private void AddButtons()
  {
      for (int i = 0; i < itemList.Count; i++)
      {
          Item item = itemList[i];
          GameObject newButton = buttonObjectPool.GetObject();
          newButton.transform.SetParent(contentPanel);
          ItemButton itemButton = newButton.GetComponent();
          itemButton.Setup(item, this);
      }
  }

//this is where im trying to change the prefabs and connect it to 
GUIController, if i click on item 1 it should change the gameobject[] value 
to AndyPrefab.
  public void TryToChangePrefabs(Item item)
  {
      if (item == itemList[0]) {
          currentPrefabs = changePrefabs.GetComponent().AndyPlanePrefab[0];
          Debug.Log("Condition number 1 done");
      }
      else if (item == itemList[1])
      {
          currentPrefabs = changePrefabs.GetComponent().AndyPlanePrefab[1];
          Debug.Log("Condition number 2 done");
      }
  }

2 个答案:

答案 0 :(得分:0)

您需要在要访问其他脚本的脚本中创建一个gameobject变量,然后将要访问的脚本与要访问的脚本拖放到gameobject变量中以进行访问,

mygameobjectvariable.getComponent<myscriptname>().myarray[1]

答案 1 :(得分:0)

在创建按钮的方法中,可以链接整个过程:

private void AddButtons()
  {
      for (int i = 0; i < itemList.Count; i++)
      {
          int temp = i;
          Item item = itemList[i]; 
          GameObject newButton = buttonObjectPool.GetObject();
          newButton.transform.SetParent(contentPanel);
          newButton.GetComponent<Button>().onClick.AddListener(()=>{
                currentPrefabs = item;
          });
      }
  }

我不完全确定该方法中将要发生的事情,但是,正如您所知道的,您可以传递项目和临时项目,以便您可以访问循环和索引中的当前项目。