OpEx KoTa
Ученик
(134)
5 дней назад
Чтобы исправить ошибку и сделать все объекты с тегом "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" станут полупрозрачными, а при выходе - снова полностью непрозрачными.
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?)
нужно ,чтобы все объекты с этим тэгом становились прозрачными