Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Join us on Thursday, June 8, for a Q&A with Unity's Content Pipeline group here on the forum, and on the Unity Discord, and discuss topics around Content Build, Import Workflows, Asset Database, and Addressables!
    Dismiss Notice

[Solved]Can't update color in GradientSky on post process volume by script

Discussion in 'High Definition Render Pipeline' started by wenzy, Oct 19, 2020.

  1. wenzy

    wenzy

    Joined:
    Nov 17, 2015
    Posts:
    44
    Hello community,

    In HDRP's Volume component, I want to lerp the color in gradient sky by script.

    I have set the UpdateMode to "realtime" and the Update Period to "0",

    and here is my script:


    Code (CSharp):
    1.   public GradientSky daySky;
    2.     public Volume vol;
    3.  
    4.     void Start(){
    5.         vol.profile.TryGet(out daySky);
    6.     }
    7.  
    8.     void Update(){
    9.    
    10.          daySky.top.value = Color.Lerp(Color.white, Color.black, (Mathf.Sin(Time.time * 0.4f) + 1f) / 2f);
    11.  
    12.      }
    I can see the "top color" is update in the inspector, but in the game scene nothing happen

    (PS: Update. The issue has solved when I update the HDRP version to 7.51)
     
    Last edited: Oct 21, 2020
  2. Olmi

    Olmi

    Joined:
    Nov 29, 2012
    Posts:
    1,553
    Hi,

    This is from my snippets I've written when I was testing HDRP, should work:
    (Attach it to an object with your Gradient Sky, it should then change the colors of the Gradient Sky when your enter the play mode.)

    Code (CSharp):
    1. using UnityEngine;
    2. using UnityEngine.Rendering;
    3. using UnityEngine.Rendering.HighDefinition;
    4.  
    5. public class AccessVolumeOverrideSky : MonoBehaviour
    6. {
    7.     VisualEnvironment visualEnvironment;
    8.     GradientSky gradientSky;
    9.  
    10.     void Awake()
    11.     {
    12.         Volume volume = gameObject.GetComponent<Volume>();
    13.         VisualEnvironment tempVis;
    14.  
    15.         if (volume.profile.TryGet<VisualEnvironment>(out tempVis)) {
    16.             visualEnvironment = tempVis;
    17.         }
    18.  
    19.         GradientSky tempGradSky;
    20.         if (volume.profile.TryGet<GradientSky>(out tempGradSky)) {
    21.             gradientSky = tempGradSky;
    22.         }
    23.  
    24.         // Set the sky type
    25.         visualEnvironment.skyType.value = (int)SkyType.Gradient;
    26.  
    27.         // Set the sky parameters
    28.         gradientSky.top.value = Color.red;
    29.         gradientSky.middle.value = Color.green;
    30.         gradientSky.bottom.value = Color.blue;
    31.         gradientSky.gradientDiffusion.value = 2.0f;
    32.     }
    33. }
    EDIT: Misread your message a bit, but it should be possible to update the gradient values in Update too, just try this, should work too:

    Code (CSharp):
    1. void Update()
    2.     {
    3.         gradientSky.middle.value = new Color(
    4.             Mathf.Sin(Time.time),
    5.             Mathf.Sin(Time.time),
    6.             Mathf.Sin(Time.time)
    7.         );
    8.     }
    My sky had Update Mode set to On Demand.
     
    Last edited: Oct 20, 2020
  3. wenzy

    wenzy

    Joined:
    Nov 17, 2015
    Posts:
    44
    Thanks for your reply ! I think it's a bug on the older hdrp version. The issue has solved when I update the HDRP version from 3.31 to 7.51)

     
    Olmi likes this.