Скрытие игрового объекта клонирования с помощью тега - PullRequest
0 голосов
/ 09 июля 2020

У меня возникла ошибка при попытке скрыть и показать группу клонированных объектов с тегами. клон - это динамика c (позиция). Я должен переключаться на видимый и видимый некоторый информационный текст. Теперь я хочу скрыть и показать игровой объект с помощью тега. ("ветровка"). Также попробуйте скрыть этот игровой объект в методе стрелки.

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' и недоступен Метод расширения GetComponent, принимающий первый аргумент типа GameObject [], может быть найден (вам не хватает директивы using или ссылки на сборку?) Assembly-CSharp C: \ Users \ Skylarking \ Unity \ My First Game \ MyFirstGame \ Assets \ Scripts \ test.cs 391 Активно

1 Ответ

1 голос
/ 09 июля 2020

Я думаю, ваша текущая проблема в том, что существует более одного объекта с тегом "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>() в oop. Чтобы скрыть / показать все элементы с помощью ветровой метки. Если это то, что вы хотите.

public void invisible(bool log)
{
    test= GameObject.FindGameObjectsWithTag("windtag");

    foreach (GameObject gm in test){
        gm.GetComponent<Renderer>().enabled = log;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...