using UnityEngine;
[RequireComponent(typeof(Renderer))]
[RequireComponent(typeof(LaserSensor))]
public class ObjectColorChanger : MonoBehaviour
{
[Header("Цвета")]
[SerializeField] private Color purpleColor =
new Color(0.5f, 0f, 1f, 1f); // тут в юнити поставь цвет, который будет работать когда лазер светит на куб
[SerializeField] private Color defaultColor = Color.white; // тут в юнити поставь обычный цвет
private LaserSensor laserSensor;
private Material objectMaterial;
private void Awake()
{
laserSensor = GetComponent<LaserSensor>(); // тут берём компонент LaserSensor у куба, чтобы знать, когда лазер нас коснулся
Renderer objectRenderer = GetComponent<Renderer>(); // тут мы получаем компонент где лежит материал куба
objectMaterial = objectRenderer.material; // а здесь берём уже сам материал этого куба
}
private void OnEnable() // подписываемся на событие касания при появлении куба в игре
{
laserSensor.onLaserAdded += HandleLaserAdded;
laserSensor.onLaserRemoved += HandleLaserRemoved;
}
private void OnDisable() // отписываемся от событий касания при появлении куба в игре
{
laserSensor.onLaserAdded -= HandleLaserAdded;
laserSensor.onLaserRemoved -= HandleLaserRemoved;
}
// методы для изменения цвета
private void HandleLaserAdded(Laser laser)
{
SetPurpleColor();
}
private void HandleLaserRemoved(Laser laser)
{
SetDefaultColor();
}
public void SetPurpleColor()
{
objectMaterial.SetColor("_BaseColor", purpleColor);
}
public void SetDefaultColor()
{
objectMaterial.SetColor("_BaseColor", defaultColor);
}
}