Top.Mail.Ru
Ответы

Проблема с кодом unity

1234567891011121314151617181920212223242526272829
 using UnityEditor.Rendering;
using UnityEngine;

public class SpriteAlphaChanger : MonoBehaviour
{
    public GameObject[] obj = null;
    

    
    void OnTriggerEnter2D(Collider2D collision)
    {

        obj = GameObject.FindGameObjectsWithTag("wall_z");


            obj.GetComponent<SpriteRenderer>().color = new Color(1f, 1f, 1f, 0.5f);
    }

    void OnTriggerExit2D(Collider2D collision)
    {
        obj.GetComponents<SpriteRenderer>().color = new Color(1f, 1f, 1f, 1f);
        
    }





} 


Assets\SpriteAlphaChanger.cs(16,17): error CS1061: 'GameObject[]' does not contain a definition for 'GetComponent' and no accessible extension method 'GetComponent' accepting a first argument of type 'GameObject[]' could be found (are you missing a using directive or an assembly reference?)

нужно ,чтобы все объекты с этим тэгом становились прозрачными

По дате
По рейтингу
Аватар пользователя
Новичок
3мес

Чтобы исправить ошибку и сделать все объекты с тегом "wall_z" прозрачными, нужно работать с каждым элементом массива отдельно. Вот исправленный код:

csharp
Copy
using UnityEngine;

public class SpriteAlphaChanger : MonoBehaviour
{
private GameObject[] walls; // Переименовал для ясности

void OnTriggerEnter2D(Collider2D collision)
{
walls = GameObject.FindGameObjectsWithTag("wall_z");

foreach(GameObject wall in walls)
{
SpriteRenderer renderer = wall.GetComponent<SpriteRenderer>();
if(renderer != null)
{
renderer.color = new Color(1f, 1f, 1f, 0.5f);
}
}
}

void OnTriggerExit2D(Collider2D collision)
{
foreach(GameObject wall in walls)
{
SpriteRenderer renderer = wall.GetComponent<SpriteRenderer>();
if(renderer != null)
{
renderer.color = new Color(1f, 1f, 1f, 1f);
}
}
}
}
Основные изменения:

Заменил обращение ко всему массиву на цикл foreach

Добавил проверку if(renderer != null) для безопасности

Использовал отдельную переменную для хранения SpriteRenderer

Переименовал массив для лучшей читаемости

Теперь при входе в триггер все объекты с тегом "wall_z" станут полупрозрачными, а при выходе - снова полностью непрозрачными.

Аватар пользователя
Мастер
3мес

У тебя FindGameobjectS который возвращает массив а нужен FindGameObject. Либо указывай индекс в массиве. Либо перебирай массив и применяй ко всем.