Why am I getting error when using postprocessing v2 on profile.TryGetSettings ?
In the editor on my Camera I added two components : Post Process Layer and Post Process Volume On the first component the layer I changed the Layer to a layer I added PostProcessing On the second component I set the Is Global to true and added one effect for now Depth Of Field
Now I want to change and set values to the Depth Of Field Focal Length via a script. So I created a new script :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
public class PostprocessingEffects : MonoBehaviour
{
private PostProcessVolume postProcessVolume;
private PostprocessingEffects depthOfField;
void Start()
{
postProcessVolume = GetComponent<PostProcessVolume>();
postProcessVolume.profile.TryGetSettings(out depthOfField);
}
// Update is called once per frame
void Update()
{
}
/*public GameObject player;
public bool dephOfFieldFinished = false;
private PostProcessVolume postProcessVolume;
private DepthOfField depthOffield;
private Animator playerAnimator;
private float clipLength;
private Coroutine depthOfFieldRoutineRef;
// Start is called before the first frame update
void Start()
{
postProcessVolume = GetComponent<PostProcessVolume>();
}
private void OnEnable()
{
if (depthOfFieldRoutineRef != null)
{
StopCoroutine(depthOfFieldRoutineRef);
}
playerAnimator = player.GetComponent<Animator>();
clipLength = playerAnimator.GetCurrentAnimatorStateInfo(0).length;
var depthOfField = postProcessingProfile.depthOfField.settings;
depthOfField.focalLength = 300;
StartCoroutine(changeValueOverTime(depthOfField.focalLength, 1, clipLength));
postProcessingProfile.depthOfField.settings = depthOfField;
// Don't forget to set depthOfFieldRoutineRef to null again at the end of routine!
}
IEnumerator changeValueOverTime(float fromVal, float toVal, float duration)
{
//playerLockManager.PlayerLockState(true, true);
float counter = 0f;
while (counter < duration)
{
var dof = postProcessingProfile.depthOfField.settings;
if (Time.timeScale == 0)
counter += Time.unscaledDeltaTime;
else
counter += Time.deltaTime;
float val = Mathf.Lerp(fromVal, toVal, counter / duration);
dof.focalLength = val;
postProcessingProfile.depthOfField.settings = dof;
yield return null;
}
playerAnimator.enabled = false;
dephOfFieldFinished = true;
depthOfFieldRoutineRef = null;
}*/
}
The bottom code is my old script when using postprocessing v1 now I want to do the same with my old code but with postprocessing v2
I'm getting error on the line :
postProcessVolume.profile.TryGetSettings(out depthOfField);
On the TryGetSettings and the error is :
The type 'PostprocessingEffects' cannot be used as type parameter 'T' in the generic type or method 'PostProcessProfile.TryGetSettings(out T)'. There is no implicit reference conversion from 'PostprocessingEffects' to 'UnityEngine.Rendering.PostProcessing.PostProcessEffectSettings'.
How can I fix this error and how can I use it with my old code ?
Your answer
Follow this Question
Related Questions
why the effects of the Post Processing stack do not activate through an if-statement 0 Answers
How to properly declare a TextureParameter in a Custom PostProcessing Effect? 4 Answers
SignInWith Apple Capability is not available in Unity3d 2017 LTS version 0 Answers
Post Processing bloom and vignette are pixelated and squared 2 Answers
built in render pipeline custom post-processing profile? 0 Answers