Как я могу управлять цветом точечного источника света в Unity? - PullRequest
1 голос
/ 14 июля 2020

Мне удалось нанести материал на меня sh, постоянно меняющий цвет (выбранный из массива цветов), и я хотел бы сделать то же самое для точечного света. Как я могу этого добиться?

Цвета

Вот сценарий, который управляет цветом материала, и я хотел бы адаптировать его так, чтобы он также управлял цветом света.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColors : MonoBehaviour
{
    public Color[] colors;

    public int currentIndex = 0;
    private int nextIndex;

    public float changeColourTime = 2.0f;

    private float lastChange = 0.0f;
    private float timer = 0.0f;

    void Start()
    {
        if (colors == null || colors.Length < 2)
            Debug.Log("Need to setup colors array in inspector");

        nextIndex = (currentIndex + 1) % colors.Length;
    }

    void Update()
    {

        timer += Time.deltaTime;

        if (timer > changeColourTime)
        {
            currentIndex = (currentIndex + 1) % colors.Length;
            nextIndex = (currentIndex + 1) % colors.Length;
            timer = 0.0f;

        }
        GetComponent<Renderer>().material.color = Color.Lerp(colors[currentIndex], colors[nextIndex], timer / changeColourTime);
    }
}

1 Ответ

1 голос
/ 14 июля 2020

Вам просто нужно получить ссылку на точечный источник света в скрипте и изменить его цвет, как вы делаете для материала рендерера.

Ваш скрипт можно было бы значительно улучшить, но с минимальными изменениями он бы быть следующим образом:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColors : MonoBehaviour
{
    public Color[] colors;
    public Light pLight;

    public int currentIndex = 0;
    private int nextIndex;

    public float changeColourTime = 2.0f;

    private float lastChange = 0.0f;
    private float timer = 0.0f;

    void Start()
    {
        if (colors == null || colors.Length < 2)
            Debug.Log("Need to setup colors array in inspector");

        nextIndex = (currentIndex + 1) % colors.Length;
    }

    void Update()
    {

        timer += Time.deltaTime;

        if (timer > changeColourTime)
        {
            currentIndex = (currentIndex + 1) % colors.Length;
            nextIndex = (currentIndex + 1) % colors.Length;
            timer = 0.0f;

        }
        Color c = Color.Lerp(colors[currentIndex], colors[nextIndex], timer / changeColourTime);
        GetComponent<Renderer>().material.color = c; // MIND! you should store the Renderer reference in a variable rather than getting it once per frame!!!
        pLight.color = c;
    }
}

Цвет подсветки точки изменения Unity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...