我是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");
}
}
答案 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;
});
}
}
我不完全确定该方法中将要发生的事情,但是,正如您所知道的,您可以传递项目和临时项目,以便您可以访问循环和索引中的当前项目。