用标签隐藏克隆游戏对象



我在尝试隐藏和显示一组带有标记的克隆对象时出错。克隆是动态的(位置(。我已经切换到可见和可见的一些信息文本。现在我想隐藏和取消隐藏带有标签的游戏对象。("windtag"(。同时尝试用箭头方法隐藏这些游戏对象。

public GameObject[] test;

public void invisible(bool log)
{

test= GameObject.FindGameObjectsWithTag("windtag");
test.GetComponent<Renderer>().enabled = log;
}

public void clone()
{
Canvas newcanvas = Instantiate(canvas);
//Use .SetParent(canvasName,false)    
Text cloneposition = Instantiate(shiposition, newpos);
Text clonewind = Instantiate(windspeedtext, newpos);
Text clonedlow = Instantiate(flowtext, newpos);
Text clonetemperature = Instantiate(temperaturetext, newpos);
newcanvas.transform.position = shipvalue.transform.position;
cloneposition.transform.SetParent(newcanvas.transform, false);
clonewind.transform.SetParent(newcanvas.transform, false);
clonedlow.transform.SetParent(newcanvas.transform, false);
clonetemperature.transform.SetParent(newcanvas.transform, false);
clonewind.gameObject.SetActive(false);
clonetemperature.gameObject.SetActive(false);

}
public void arrow(float[,] arrowdata)
{
for (int x = 0; x < arrowdata.GetLength(0); x++)
{
for (int y = 0; y < arrowdata.GetLength(1); y++)
{
if (grid[x,y] ==1)
{

if (arrowdata[x, y] == 5)
{
GameObject referenceArrow = Instantiate(Resources.Load("down")) as GameObject;
float posY = shipvalue.transform.position.y - 9f;
referenceArrow.transform.position = new Vector3(shipvalue.transform.position.x-0.5f, posY);
}
if (arrowdata[x, y] == 4)
{
GameObject referenceArrow = Instantiate(Resources.Load("top left")) as GameObject;
float posY = shipvalue.transform.position.y - 9f;
referenceArrow.transform.position = new Vector3(shipvalue.transform.position.x - 0.5f, posY);
}
if (arrowdata[x, y] == 3)
{
GameObject referenceArrow = Instantiate(Resources.Load("top right")) as GameObject;
float posY = shipvalue.transform.position.y - 9f;
referenceArrow.transform.position = new Vector3(shipvalue.transform.position.x - 0.5f, posY);
}
}
}
}
}

这是错误:严重性代码描述项目文件行禁止显示状态错误CS1061"GameObject[]"不包含"GetComponent"的定义,并且找不到接受类型为"GameObject[]"的第一个参数的可访问扩展方法"GetComponent"(是否缺少using指令或程序集引用?(assembly CSharp C:\Users\Skylarking\Unity\My first Game\MyFirstGame\Assets\Scripts\test.cs 391 Active

我认为您当前的问题是有多个Object带有标记"windtag";。因此,如果你搜索带有该标签的GameObject,会返回多个。导致一个GameObject数组而不是一个GameObject。

一个简单的解决方法是向所有GameObject添加不同的标签,然后将该字符串赋予函数。

invisible(false, "tagexample1");
public void invisible(bool log, string tag)
{
test= GameObject.FindGameObjectWithTag(tag);
test.GetComponent<Renderer>().enabled = log;
}

或者,您可以将GetComponent<Renderer>()放入for循环中。隐藏/显示带有windtag的所有元素。如果这是你想要的。

public void invisible(bool log)
{
test= GameObject.FindGameObjectsWithTag("windtag");
foreach (GameObject gm in test){
gm.GetComponent<Renderer>().enabled = log;
}
}

最新更新