Хорошо, я новичок в шейдерах, но я не могу найти способ анимировать или даже изменить значение цвета в моем пользовательском шейдере, прикрепленном к материалу.Невозможно изменить или изменить цвет в пользовательском шейдере в Unity?
Im используя материал для моей скайбоксе и градиент ж/3 свойства объявлен следующим образом:
Shader "Custom/Horizontal Skybox"
{
Properties
{
_Color1 ("Top Color", Color) = (1, 1, 1, 0)
_Color2 ("Horizon Color", Color) = (1, 1, 1, 0)
_Color3 ("Bottom Color", Color) = (1, 1, 1, 0)
_Exponent1 ("Exponent Factor for Top Half", Float) = 1.0
_Exponent2 ("Exponent Factor for Bottom Half", Float) = 1.0
_Intensity ("Intensity Amplifier", Float) = 1.0
}
Я смотрел на Unitys документы и и пытаюсь изменить нижний цвет (в конце концов lerping так это анимировано, хотя я не знаю, как это сделать):
skybox.SetColor ("_Color3", afterColor);
, где материал был публичным var. Я также попытался написать «Нижний цвет» в качестве параметра, но когда он ничего не запускает, это происходит. Я не понимаю, почему.
Как изменить цвет в моем пользовательском шейдере? Более того, как я могу изменить это изменение, как только я это сделаю?
EDIT: @Programmer Шейдер - это файл .shader, прикрепленный к материальному объекту. Shader код (я не пишу это как Im новой для шейдеров):
Shader "Custom/Horizontal Skybox"
{
Properties
{
_Color1 ("Top Color", Color) = (1, 1, 1, 0)
_Color2 ("Horizon Color", Color) = (1, 1, 1, 0)
_Color3 ("Bottom Color", Color) = (1, 1, 1, 0)
_Exponent1 ("Exponent Factor for Top Half", Float) = 1.0
_Exponent2 ("Exponent Factor for Bottom Half", Float) = 1.0
_Intensity ("Intensity Amplifier", Float) = 1.0
}
CGINCLUDE
#include "UnityCG.cginc"
struct appdata
{
float4 position : POSITION;
float3 texcoord : TEXCOORD0;
};
struct v2f
{
float4 position : SV_POSITION;
float3 texcoord : TEXCOORD0;
};
half4 _Color1;
half4 _Color2;
half4 _Color3;
half _Intensity;
half _Exponent1;
half _Exponent2;
v2f vert (appdata v)
{
v2f o;
o.position = mul (UNITY_MATRIX_MVP, v.position);
o.texcoord = v.texcoord;
return o;
}
half4 frag (v2f i) : COLOR
{
float p = normalize (i.texcoord).y;
float p1 = 1.0f - pow (min (1.0f, 1.0f - p), _Exponent1);
float p3 = 1.0f - pow (min (1.0f, 1.0f + p), _Exponent2);
float p2 = 1.0f - p1 - p3;
return (_Color1 * p1 + _Color2 * p2 + _Color3 * p3) * _Intensity;
}
ENDCG
SubShader
{
Tags { "RenderType"="Background" "Queue"="Background" }
Pass
{
ZWrite Off
Cull Off
Fog { Mode Off }
CGPROGRAM
#pragma fragmentoption ARB_precision_hint_fastest
#pragma vertex vert
#pragma fragment frag
ENDCG
}
}
}
Попытка изменить это с помощью публичных переменных, как это из сценария в пустой:
public Material skybox;
public Color afterColor;
void Start() {
chars = GameObject.FindGameObjectsWithTag("BeginChar");
balls = GameObject.FindGameObjectsWithTag ("Ball");
StartCoroutine (waitForTheRun());
skybox.SetColor ("_Color3", afterColor); //here
}
Вы не можете изменить этот цвет из редактора? Если да, то вы можете сделать это из кода. Если нет, вы также не можете сделать это из кода, и вы должны исправить свой шейдерный код. – Programmer
Да, я могу изменить его непосредственно в инспекторе, изменяя SHADER, однако я пытаюсь сделать это из другого скрипта и его не работает – skyguy
Хорошо. Какой цвет вы можете изменить? Цвет верхнего цвета? Цвет горизонта? Нижний цвет? – Programmer