Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить ошибку. Unity Engine 3D project c# script

Дамир Сунгатуллин Ученик (144), на голосовании 4 месяца назад
UnassignedReferenceException: The variable dirLight of Rain has not been assigned. You probably need to assign the dirLight variable of the Rain script in the inspector.
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Rain : MonoBehaviour
{

public Light dirLight;
private ParticleSystem _ps;
private bool _isRain = false;

private void Start()
{
_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;
}
}
}
Голосование за лучший ответ
Arie Benz Просветленный (36774) 5 месяцев назад
Переменная dirLight не присвоена никакому объекту в инспекторе unity. Нужно перетащить объект типа light из иерархии сцены в поле dirLight в инспекторе для скрипта rain.
Дамир СунгатуллинУченик (144) 5 месяцев назад
уже всё перетащил как раз после того как добавил начало писать про 22 строку кода и что там в void Update()
ошибка
Arie Benz Просветленный (36774) Значит другие скрипты или функции конфликтуют с кодом, либо настройки освещения в сцене неправильные.
Татьяна Просветленный (36374) 5 месяцев назад
Ошибка 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;
}
}
}
Дамир СунгатуллинУченик (144) 5 месяцев назад
спасибо, товарищ
Похожие вопросы