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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пытаюсь сделать так, что бы объект плавно менял цвет. Нашёл такой код, поместил его в 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
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
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  [ТС]
Спасибо большое!
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
28.03.2016, 08:39
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
Cr0c, я только учусь
0
 Аватар для Cr0c
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
28.03.2016, 11:44
Quat1111, Color.Lerp
0
17 / 17 / 2
Регистрация: 16.06.2013
Сообщений: 94
15.06.2016, 03:33
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
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
AaronTower, Класс Gradient для этого есть
2
4 / 5 / 0
Регистрация: 31.08.2021
Сообщений: 198
25.09.2021, 12:43
Цитата Сообщение от 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
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
25.09.2021, 16:06
Цитата Сообщение от 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
Цитата Сообщение от 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
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
26.09.2021, 12:55
Cr0c, Почему-то постоянно забываю об этих встроенных возможностях.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2021, 12:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru