Unity Shader 中的 _Time 的单位

名称类型说明
_Timefloat4t 是自该场景加载开始所经过的时间,4个分量分别是 (t/20, t, t*2, t*3)
_SinTimefloat4t 是时间的正弦值,4个分量分别是 (t/8, t/4, t/2, t)
_CosTimefloat4t 是时间的余弦值,4个分量分别是 (t/8, t/4, t/2, t)
unity_DeltaTimefloat4dt 是时间增量,4个分量的值分别是(dt, 1/dt, smoothDt, 1/smoothDt)

注意:这里的 t 得到的时间单位是——秒

Unity中,Time.timeTime.deltaTime等时间相关函数会受到Time.timeScale的影响。如果你希望在Shader中忽略Time.timeScale,可以通过以下几种方法实现: 1. 使用_Time变量: UnityShader内置了一个_Time变量,它不受Time.timeScale的影响。_Time是一个float4类型的变量,包含四个不同的时间尺度: _Time.y: 游戏开始以来的秒数 _Time.z: 游戏开始以来的秒数 / 20 _Time.w: 游戏开始以来的秒数 / 144 2. 使用自定义时间变量: 你可以在脚本中计算一个不受Time.timeScale影响的时间变量,然后将其传递给Shader。例如: 在C#脚本中: ```csharp public class TimeController : MonoBehaviour { public Material material; private float unscaledTime; void Update() { unscaledTime += Time.unscaledDeltaTime; material.SetFloat("_UnscaledTime", unscaledTime); } } ``` 在Shader中: ```c float _UnscaledTime; void surf (Input IN, inout SurfaceOutputStandard o) { float time = _UnscaledTime; // 使用time变量进行计算 } ``` 3. 使用全局时间变量: 你可以在脚本中设置一个全局Shader属性,然后在Shader中使用这个属性。例如: 在C#脚本中: ```csharp public class TimeController : MonoBehaviour { void Update() { Shader.SetGlobalFloat("_GlobalUnscaledTime", Time.timeSinceLevelLoad); } } ``` 在Shader中: ```c float _GlobalUnscaledTime; void surf (Input IN, inout SurfaceOutputStandard o) { float time = _GlobalUnscaledTime; // 使用time变量进行计算 } ``` 这些方法都可以帮助你在Shader中实现不受Time.timeScale影响的时间控制。选择哪种方法取决于你的具体需求和项目结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值