Unity3d 有没有办法使用C#脚本在unity中更改主摄像头的饱和度?
我试图创造一种效果,相机在短时间内变为黑白,然后在2019年恢复正常。有人知道如何使用C脚本实现这一点吗?我会在您的项目中设置。之后,您可以直接设置,其中包含Unity3d 有没有办法使用C#脚本在unity中更改主摄像头的饱和度?,unity3d,camera,Unity3d,Camera,我试图创造一种效果,相机在短时间内变为黑白,然后在2019年恢复正常。有人知道如何使用C脚本实现这一点吗?我会在您的项目中设置。之后,您可以直接设置,其中包含饱和度字段 所附图像显示了如何创建后处理配置文件。创建对象后,按照Unity的文档中的步骤进行操作 设置后处理之后,我将继续介绍如何在运行时编辑这些值。要淡入淡出这些值,请使用 如果所有这些都太复杂,还可以使用创建一个简单的淡入淡出,以及使用淡入淡出颜色的图像对象。您可以使其从Color.Clear淡入Color.White和/或Color
饱和度
字段
所附图像显示了如何创建后处理配置文件
。创建对象后,按照Unity的文档中的步骤进行操作
设置后处理之后,我将继续介绍如何在运行时编辑这些值。要淡入淡出这些值,请使用
如果所有这些都太复杂,还可以使用创建一个简单的淡入淡出,以及使用淡入淡出颜色的图像对象。您可以使其从Color.Clear
淡入Color.White
和/或Color.Black
另一个选项是a,但此解决方案比其他两个方案复杂得多。您可以使用
OnRenderImage
方法将材质附加到相机,然后根据需要修改材质值。这将允许您添加任何类型的效果,只要您有必要的着色器
解决方案
将以下脚本附加到相机
,参考材料
,并根据需要修改值:
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class CameraEffect : MonoBehaviour
{
public Material material;
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (material == null)
{
Graphics.Blit(source, destination);
return;
}
Graphics.Blit(source, destination, material);
}
}
例子
下面是一个示例脚本和一个着色器,它允许您将摄影机
视图淡入黑色并返回。脚本需要使用下面提供的着色器的材质
脚本(.cs)
着色器(.Shader)
using System;
using System.Collections;
using UnityEngine;
public class FadeTest : MonoBehaviour
{
[SerializeField]
private CameraEffect effect = null;
[SerializeField]
private float speed = 1f;
private void Start()
{
StartCoroutine(FadeOutAndIn(() =>
Debug.Log("Screen is dark now, fading back in")));
}
public IEnumerator FadeOutAndIn(Action midpointAction)
{
yield return FadeTowards(0f);
midpointAction?.Invoke();
yield return FadeTowards(1f);
}
private IEnumerator FadeTowards(float target)
{
float value = effect.material.GetFloat("_Value");
while (value != target)
{
value = Mathf.MoveTowards(value, target, Time.deltaTime * speed);
effect.material.SetFloat("_Value", value);
yield return new WaitForEndOfFrame();
}
}
}
Shader "Custom/Dark"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Value ("Value", Range(0.0, 1.0)) = 0.0
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
float _Value;
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
col.rgb = col.rgb * _Value;
return col;
}
ENDCG
}
}
}