Хочешь, чтобы игрок видел, на что можно кликнуть? Базовый, но важный приём.
Через Outline (красиво и профессионально)
Либо берём готовый ассет Quick Outline из Asset Store (бесплатный).
Ставим на объект скрипт, который включает/выключает компонент Outline при Raycast-попадании.
Скрипт OutCube для объекта:
using UnityEngine;
// Этот класс отвечает за управление подсветкой (Outline) объекта
public class OutCube : MonoBehaviour
{
// Ссылка на компонент Outline, который создает подсветку вокруг объекта
public Outline _outline;
private void Start()
{
// Проверяем, есть ли у нас компонент Outline (не равен ли null)
if (_outline != null)
{
// Отключаем подсветку при старте игры, чтобы объект не светился сразу
_outline.enabled = false;
}
}
// Этот метод включает или выключает подсветку объекта
// state - параметр, который получает метод: true = включить, false = выключить
public void ToggleOutline(bool state)
{
if (_outline != null)
{
_outline.enabled = state;
}
}
}
Скрипт MouseOut для наведения мыши(необязательный, только для примера)
using UnityEngine;
public class MouseOut : MonoBehaviour
{
// Хранит информацию о последнем подсвеченном объекте
private OutCube _currentCube;
void Update()
{
// Создаем луч из камеры через позицию мыши на экране
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
// Рисуем желтый луч в сцене для визуализации (видно только в режиме Scene)
Debug.DrawRay(ray.origin, ray.direction * 100f, Color.yellow);
// Physics.Raycast - пускаем луч и проверяем, во что он попал
if (Physics.Raycast(ray, out RaycastHit hit))
{
// Рисуем зеленый луч до точки попадания
Debug.DrawRay(ray.origin, ray.direction * hit.distance, Color.green);
// Пытаемся получить компонент OutCube с объекта, в который попал луч
OutCube cube = hit.collider.GetComponent<OutCube>();
// Проверяем: если на объекте есть компонент OutCube И это не тот же куб, на который мы уже смотрели
if (cube != null && cube != _currentCube)
{
// ?. - это безопасный вызов: если _currentCube не null, то вызываем метод
_currentCube?.ToggleOutline(false);
_currentCube = cube;
// Включаем подсветку у нового куба
_currentCube.ToggleOutline(true);
}
// Если луч попал в объект без компонента OutCube, но у нас был запомнен предыдущий куб
else if (cube == null && _currentCube != null)
{
// Выключаем подсветку у предыдущего куба
_currentCube.ToggleOutline(false);
// Забываем про предыдущий куб (теперь ни на что не наведены)
_currentCube = null;
}
}
// Если луч вообще ни во что не попал, но у нас был запомнен подсвеченный куб
else if (_currentCube != null)
{
// Выключаем подсветку у последнего куба
_currentCube.ToggleOutline(false);
// Забываем про него
_currentCube = null;
}
}
}
Что важно:
- Outline эффект работает поверх всего и не ломает текстуры.
- Можно настроить цвет (красный для врагов, зелёный для союзников).
- Не требует замены материала — значит, работает с любыми шейдерами.
Результат: игра сразу становится отзывчивее. Игрок понимает, с чем можно взаимодействовать, а UI не нужен.
💬 А ты как делаешь подсветку? Юзаешь ассеты или костылишь вручную?
🔔 Подпишись, дальше будет много про шейдеры, эффекты и оптимизацию в инди-разработке.
👉 Akrus Games | Unity