- Home /
Substance Material Color Change via Exposed Color Parameter in C#
I'm trying to set up a color change in the new UI system using an exposed Color parameter in a Substance material designed in Substance Designer 5. I'm new to coding, so I'm hoping I didn't just make a dummy mistake. I'm basically trying to make a color change via a button press, which will call one of the public void Color codes. I'm using the basic code from the Unity workflow tutorial video series, but since both Unity and Substance Designer have been updated since then, I don't know how accurate the sections of code I copied from it are.
My code is as below. If anyone can help me out, it would be much appreciated.
Thanks.
using UnityEngine;
using System.Collections;
public class Substance : MonoBehaviour {
public GameObject substanceObject;
private ProceduralMaterial substance;
void Awake(){
substance = substanceObject.GetComponent<Renderer>().sharedMaterial as ProceduralMaterial;
ProceduralMaterial.substanceProcessorUsage = ProceduralProcessorUsage.All;
}
void Start () {
substance.CacheProceduralProperty("color1", true);
substance.CacheProceduralProperty("color2", true);
substance.CacheProceduralProperty("color3", true);
}
public void WhiteColor1(){
substance.SetProceduralColor("color1", new Color (1.0f, 1.0f, 1.0f, 1.0f));
substance.RebuildTextures();
}
void Update() {
}
}
The error I'm getting is:
NullReferenceException: Object reference not set to an instance of an object Substance.WhiteColor1 () (at Assets/Scripts/Substance.cs:26) UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:137) UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:602) UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:744) UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:53) UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44) UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:52) UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269) UnityEngine.EventSystems.EventSystem:Update()
Your answer
Follow this Question
Related Questions
Renderer Materials not changing elements 1 Answer
Having a problem with the second material (on the same renderer) 0 Answers
Textures imported from Substance Painter have a completely different color in Unity 2 Answers
Blend 2 linerender colors at point of interception 0 Answers
Material sbar importing issues 1 Answer