Загрузка данных


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);
    }
}