Ошибка UnassignedReferenceException указывает на то, что переменная dirLight не была назначена в инспекторе Unity. Чтобы исправить эту ошибку, необходимо убедиться, что вы назначили переменную dirLight в инспекторе для вашего объекта, содержащего скрипт Rain.
Вот шаги, которые необходимо выполнить для решения проблемы:
Назначьте переменную dirLight в инспекторе:
Перейдите к вашему объекту в иерархии Unity, который содержит скрипт Rain.
В инспекторе найдите компонент Rain.
В компоненте Rain вы увидите поле для переменной dirLight.
Перетащите объект света (Directional Light) из иерархии Unity в это поле.
Проверьте скрипт на наличие других потенциальных ошибок:
Убедитесь, что объект с вашим скриптом действительно имеет компонент ParticleSystem, иначе _ps = GetComponent<ParticleSystem>(); вернет null, что также может вызвать проблемы.
Для ясности, вот ваш скрипт с добавленными комментариями о том, что нужно сделать в инспекторе:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rain : MonoBehaviour
{
// Перетащите ваш Directional Light в это поле в инспекторе
public Light dirLight;
private ParticleSystem _ps;
private bool _isRain = false;
private void Start()
{
// Убедитесь, что объект имеет компонент ParticleSystem
_ps = GetComponent();
StartCoroutine(Weather());
}
private void Update()
{
if (_isRain && dirLight.intensity > 0.25f)
LightIntensity(-1);
else if (!_isRain && dirLight.intensity < 0.5f)
LightIntensity(1);
}
private void LightIntensity(int mult)
{
dirLight.intensity += 0.1f * Time.deltaTime * mult;
}
IEnumerator Weather()
{
while (true)
{
yield return new WaitForSeconds(UnityEngine.Random.Range(30f, 60f));
if (_isRain)
_ps.Stop();
else
_ps.Play();
_isRain = !_isRain;
}
}
}