Проблема с кодом unity
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?)
нужно ,чтобы все объекты с этим тэгом становились прозрачными
Чтобы исправить ошибку и сделать все объекты с тегом "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" станут полупрозрачными, а при выходе - снова полностью непрозрачными.
У тебя FindGameobjectS который возвращает массив а нужен FindGameObject. Либо указывай индекс в массиве. Либо перебирай массив и применяй ко всем.