using UnityEngine;
public class TransparencyController : MonoBehaviour
{
public Transform playerTransform; // Ссылка на трансформ игрока
public Transform objectTransform; // Ссылка на трансформ объекта, прозрачность которого мы хотим контролировать
public float maxDistance = 10f; // Максимальное расстояние, при котором объект полностью прозрачен
public float minDistance = 2f; // Минимальное расстояние, при котором объект полностью непрозрачен
private SpriteRenderer objectRenderer; // Ссылка на компонент SpriteRenderer объекта
void Start()
{
// Получаем компонент SpriteRenderer объекта
objectRenderer = objectTransform.GetComponent<SpriteRenderer>();
}
void Update()
{
// Рассчитываем вектор от игрока к объекту и нормализуем его
Vector3 playerToObject = objectTransform.position - playerTransform.position;
float distance = playerToObject.magnitude;
float normalizedDistance = Mathf.Clamp01((distance - minDistance) / (maxDistance - minDistance));
// Изменяем прозрачность объекта в зависимости от нормализованного расстояния
Color objectColor = objectRenderer.color;
objectColor.a = 1f - normalizedDistance; // Инвертируем значение прозрачности
objectRenderer.color = objectColor;
}
}
Можно создать пустой объект, к нему прикрепить скрипт и задать в полях ссылки на объекты.
Что нужно поучить - базу игрового движка (здесь в частности использование трансформа игровых объектов), почитать про векторы в юнити. Почитать про нормализованные векторы и векторную математику - крайне удобная практика. Ну и практика, практика и еще раз практика.
П.С. - при ответе использовал чатГПТ. Проблема в том что не зная основ юнити невозможно даже четко сделать запрос к ИИ. Так что удачи в обучении.
Скрипт проверен и рабочий.