SpriteShapeRenderer.SetShaderUserValue
Declaration
public void SetShaderUserValue(uint v);Параметры
| Параметр | Описание |
|---|---|
| v | Целое число, которое будет назначено рендеру в качестве пользовательского значения для использования в шейдерах. |
Описание
Назначить пользовательское значение для этого рендерера.
Метод SetShaderUserValue присваивает пользовательское целое значение для рендерера. Затем вы можете получить доступ к этому значению в своих шейдерах в качестве переменной unity_RendererUserValue. Вы можете использовать этот метод для изменения того, как шейдер рисует каждый рендерер, без использования различных материалов или дополнительного CPU времени.
Примечание: Значение переменной unity_RendererUserValue всегда будет равняться 0 в следующих ситуациях:
* Шейдер написан для встроенного Render Pipeline. * При изготовлении lightmaps или light probes.
Примечание: Значение не сериализовано, поэтому оно не сохраняется в ассете и сбросилось при перезагрузке объекта.
Дополнительные ресурсы: SpriteShapeRenderer.GetShaderUserValue.
В следующем примере кода создается MonoBehaviour для присвоения определенного цветового значения на рендерере путем кодирования его в uint.
using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Tilemaps; using UnityEngine.U2D;
[ExecuteAlways] public class PerRendererColor : MonoBehaviour { public Color color = Color.white;
private SpriteShapeRenderer m_Renderer;
void Start() { m_Renderer = GetComponent<SpriteShapeRenderer>(); }
void Update() { if (m_Renderer) { Color32 colorb = color; uint packedColor = (uint)colorb.r | ((uint)colorb.g << 8) | ((uint)colorb.b << 16); m_Renderer.SetShaderUserValue(packedColor); } } }
Соответствующий код шейдера распаковывает беззнаковое целое число в триплет с плавающей запятой RGB в шейдере фрагмента.
// This shader fills the mesh shape with the color packed in the renderer's user value. Shader "Example/URPUnlitUserValue" { Properties { }
SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
Pass { HLSLPROGRAM #pragma vertex vert #pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes { float4 positionOS : POSITION; };
struct Varyings { float4 positionHCS : SV_POSITION; };
Varyings vert(Attributes IN) { Varyings OUT; OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz); return OUT; }
half4 frag() : SV_Target { // Decoding the user value color and returning it. uint3 c = uint3(unity_RendererUserValue & 0xFF, (unity_RendererUserValue >> 8) & 0xFF, (unity_RendererUserValue >> 16) & 0xFF); return half4(half3(c) / 255.0f, 1.0f); } ENDHLSL } } }