@Jrtq

Почему не получается управлять виньеткой из скрипта другого объекта?

Есть игрок. Он должен получать урон при входе в определённую область, вместе с уроном будет появляться виньетка.
Post Processing на камере, поэтому скрипт с переменными PostProcessVolume и Vignette тоже на камере:
private protected PostProcessVolume postProcessing;
    private protected Vignette vignette;
    private protected void Awake()
    {
        postProcessing = GetComponent<PostProcessVolume>();
        postProcessing.profile.TryGetSettings(out vignette);
    }


Дальше в скрипте игрока, который наследуется от скрипта камеры, использую переменную vignette:
if (inDamage)
        {
            health--;
            vignette.intensity.value += 10;
        }


Но юнити выдаёт NullReferenceException: Object reference not set to an instance of an object

Сделать public переменную в скрипте игрока, чтобы туда закинуть Post Processing с камеры я не могу, потому что игрок является префабом.
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@Jrtq Автор вопроса
Решил проблему тем, что добавил на префаб игрока камеру как дочерний объект, и через transform.GetChild получил компоненты
Получилось так (скрипт игрока):
private PostProcessVolume postProcess;
    private Vignette vignette;

    private void Awake()
    {
        postProcess = transform.GetChild(1).GetComponent<PostProcessVolume>();
        postProcess.profile.TryGetSettings(out vignette);
    }

    private void FixedUpdate 
    {
        if (inDamage)
        {
            health--;
            vignette.intensity.value += 0.02f;
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы