Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/146: Рейтинг темы: голосов - 146, средняя оценка - 5.00
2 / 2 / 4
Регистрация: 28.09.2013
Сообщений: 407
1

Плавная смена цвета

27.03.2016, 21:55. Показов 30120. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Пытаюсь сделать так, что бы объект плавно менял цвет. Нашёл такой код, поместил его в Update, но объект всё равно резко меняет цвет.
C#
1
 transform.GetComponent<Renderer> ().material.color = Color.Lerp (Color.white, Color.green, Time.time);
Помогите, пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2016, 21:55
Ответы с готовыми решениями:

Плавная смена цвета по прохождению заданного расстояния
Есть заданное расстояние,во время прохождению которого цвет фона камеры,а так-же цвет fog должен...

Эффект свечения и смена цвета
Доброго времени суток, ниже приведено видео, вопрос, как можно сделать яркий цвет (в данном случае...

Плавное изменение цвета фона по времени в рандомные цвета
В общем, есть изображение (фон), мне необходимо, чтобы оно плавно окрашивалось в различные цвета...

Плавная смена цвета
Уважаемые пользователи, возможно кто-то сможет помочь? Нужно плавно сменить цвет любого...

13
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
27.03.2016, 22:11 2
avatar1870, добавь переменную float changeSpeed = 5.0f, в коде напиши так
C#
1
transform.GetComponent<Renderer> ().material.color = Color.Lerp (Color.white, Color.green, changeSpeed * Time.deltaTime);
Поменяй changeSpeed и посмотри как меняется скорость.
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
27.03.2016, 22:20 3
avatar1870, Time.time
Description
The time at the beginning of this frame (Read Only). This is the time in seconds since the start of the game.
И чего же Вы добивались тогда? Референсы за Вас кто читать должен?
C#
1
2
3
4
5
6
7
8
9
Ienumerator SmoothColor( Renderer rend; Color startColor, endColor; float time ) {
 float currTime = 0f;
 rend.material.color = startColor;
 do {
 rend.material.color = Color.Lerp (rend.material.color, endColor, currTime/time);
 currTime += Time.deltaTime;
 yield return null;
 } while (currTime<=time);
}
И запускайте через
C#
1
StartCoroutine( SmoothColor( my_go.GetComponent<Renderer>(), Color.white, Color.green, timeOfChangeInSeconds ) );
3
2 / 2 / 4
Регистрация: 28.09.2013
Сообщений: 407
27.03.2016, 22:34  [ТС] 4
Спасибо большое!
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
28.03.2016, 08:39 5
Quat1111, но так не будет работать же
C#
1
changeSpeed * Time.deltaTime
время кадра не будет постоянно расти, тогда уже надо
C#
1
transform.GetComponent<Renderer> ().material.color = Color.Lerp (transform.GetComponent<Renderer> ().material.color, Color.green, changeSpeed * Time.deltaTime);
0
103 / 104 / 54
Регистрация: 23.03.2016
Сообщений: 462
28.03.2016, 11:38 6
Cr0c, я только учусь
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
28.03.2016, 11:44 7
Quat1111, Color.Lerp
0
17 / 17 / 2
Регистрация: 16.06.2013
Сообщений: 94
15.06.2016, 03:33 8
C#
1
 "Название объекта".GetComponent<Renderer>().material.color = Color.Lerp(Color.white, Color.green, Mathf.PingPong(Time.time, 1));
0
4 / 5 / 0
Регистрация: 31.08.2021
Сообщений: 198
24.09.2021, 19:07 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
 
public class AnimaColor : MonoBehaviour
{
    private Color myColor, nowColor, color3 = Color.red, color1 = Color.blue, color2 = Color.green;
    private Image myImage;
    private int stage = 1;
    private float 
        dt = 5f, //Время цикла
        nt = 0.0f, //счётчик до времени цикла
        kf = 0.67f; //коэффициент изменения цвета
 
    private void Awake()
    {
        myImage = gameObject.GetComponent<Image>();
        myColor = myImage.color;
        nowColor = myColor;
    }
 
    void LateUpdate()
    {
        nt += Time.deltaTime;
        if (dt <= nt)
        {
            stage++;
            if (stage == 5)
                stage = 1;
            nt = 0.0f;
            nowColor = myImage.color;
        }
 
        if (stage == 1)
        {
            myImage.color = Color.Lerp(nowColor, color1, kf  * nt / dt);
        }
        else if (stage == 2)
        {
            myImage.color = Color.Lerp(nowColor, color2, kf * nt / dt);
        }
        else if (stage == 3)
        {
            myImage.color = Color.Lerp(nowColor, color3, kf * nt / dt);
        }
        else
        {
            myImage.color = Color.Lerp(nowColor, myColor, kf * nt / dt);
        }
 
    }
}
Очень плавно по нескольким цветам, можно развить дальше, и лучше подобрать kf
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
25.09.2021, 01:32 10
AaronTower, Класс Gradient для этого есть
2
4 / 5 / 0
Регистрация: 31.08.2021
Сообщений: 198
25.09.2021, 12:43 11
Цитата Сообщение от Cr0c Посмотреть сообщение
Класс Gradient для этого есть
Как его по циклу пускать не понятно)

Поправил класс, если кому то понравится больше чем Gradient)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using UnityEngine;
using UnityEngine.UI;
 
public class AnimaColor : MonoBehaviour
{
    public Color[] colors;
    private Color nowColor;
    private Image myImage;
    private int stage = 0;
    private float
        dt = 0.67f, //Время цикла
        nt = 0.0f, //счётчик до времени цикла
        kf = 0.67f; //коэффициент изменения цвета
 
    private void Awake()
    {
        myImage = gameObject.GetComponent<Image>();
        nowColor = colors[stage];
    }
 
    void LateUpdate()
    {
        nt += Time.deltaTime;
        if (dt <= nt)
        {
            stage++;
            if (stage == colors.Length)
                stage = 0;
            nt = 0.0f;
            nowColor = myImage.color;
        }
 
        for (int i = 0; i < colors.Length; i++)
        {
            if (i == stage)
            {
                if (i == colors.Length - 1)
                {
                    myImage.color = Color.Lerp(nowColor, colors[0], kf * nt / dt);
                }
                else
                {
                    myImage.color = Color.Lerp(nowColor, colors[i + 1], kf * nt / dt);
                }
                
            }
        }
    }
}
0
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
25.09.2021, 16:06 12
Цитата Сообщение от AaronTower Посмотреть сообщение
Как его по циклу пускать не понятно)
У градиента есть метод Evaluate, принимающий значение от 0 (начало) до 1 (конец). Поэтому можно составить сложный градиент в инспекторе и "пробежаться" по градиенту всего лишь одним методом.
Например следующий код циклически устанавливает свет из градиента за указанное время в секундах. То-есть за пять секунд пробежимся от начала градиента до его конца и так бесконечно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using UnityEngine;
 
public class GradientTest : MonoBehaviour
{
    public Gradient Colors;
    public float CycleTime;
 
    public Color c;
 
    void Update()
    {
        c = Colors.Evaluate(1f / CycleTime * (Time.time % CycleTime));
    }
}
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
26.09.2021, 12:20 13
Цитата Сообщение от samana Посмотреть сообщение
1f / CycleTime * (Time.time % CycleTime)
C#
1
2
3
4
// Туда и обратно
Mathf.PingPong(Time.time, CycleTime)/CycleTime
// Только туда
Mathf.Repeat(Time.time, CycleTime)/CycleTime
1
 Аватар для samana
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
26.09.2021, 12:55 14
Cr0c, Почему-то постоянно забываю об этих встроенных возможностях.
0
26.09.2021, 12:55
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2021, 12:55
Помогаю со студенческими работами здесь

Плавная смена цвета окна
Привет форумчане! у меня появился вопрос: У меня при запуске программы появляется заставка(на ней...

Плавная смена цвета RGB
Хочу сделать плавную смену цвета, допустим для фона формы. Желательно как в радуге, от красного до...

Плавная смена цвета listbox
Дорогие программисты, нужна помощь. Смысл заключается в том, что нужно постепенно, а точнее плавно...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru