45.动态效果-如何制作动态效果
45.1 知识点
游戏画面中的动态效果
游戏画面能够产生动态效果的核心原因在于 游戏循环机制。
通过游戏循环,画面每隔固定时间(每一帧)就会重新渲染,从而实现动态效果。
- 游戏运行时,每一帧都会更新屏幕,这种更新频率被称为 帧率(Frames Per Second,FPS)。常见的帧率包括 30 FPS(每秒更新30次)和 60 FPS(每秒更新60次)。
- 动态效果的实现依赖于每一帧对游戏对象的 位置、角度、缩放、颜色 等信息的修改后进行重新渲染。
- 当帧率超过 24 FPS 时,人眼会认为画面切换是流畅和连贯的。
利用 Shader 制作动态效果
动态画面的本质是 每隔一定时间更新对象数据,随后重新渲染画面。同样,在 Shader 中实现动态效果的原理类似:
- 通过每隔一定时间改变 Shader 中的相关数据,使渲染结果发生变化,从而实现动态画面。
- 核心思路是 利用时间变化修改数据,从而带来画面的变化。
Shader 中的内置时间变量
在 Shader 中制作动态效果的关键在于时间的使用,而 Unity 提供了一些内置时间变量来帮助实现这一点。常用内置时间变量如下:
float4 _Time
- 由四个分量组成,分别表示
(t/20, t, 2t, 3t)
。 t
是从场景加载开始到当前的总时间。
- 由四个分量组成,分别表示
float4 _SinTime
- 分量值为
(sin(t/8), sin(t/4), sin(t/2), sin(t))
。 - 用于表示游戏运行时间的正弦值。
- 分量值为
float4 _CosTime
- 分量值为
(cos(t/8), cos(t/4), cos(t/2), cos(t))
。 - 用于表示游戏运行时间的余弦值。
- 分量值为
float4 unity_DeltaTime
- 分量值为
(dt, 1/dt, smoothDt, 1/smoothDt)
。 dt
是帧间隔时间,即上一帧到当前帧的时间差。smoothDt
是经过平滑处理的帧间隔时间,对帧间隔时间进行某种平滑算法处理后的结果。
- 分量值为
Shader 中常用的动态数据
利用Shader制作动态效果的关键就是 —— 利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化。通过结合时间变化,以下数据常用于 Shader 中实现动态效果:
颜色
- 时间控制颜色变化,例如 渐变 或 闪烁 效果。
位置
- 时间驱动顶点移动,例如 波动 效果。
纹理坐标
- 动态改变纹理坐标,例如 水流、云彩 或 序列帧动画。
法线
- 动态修改法线方向,例如 风吹草动。
缩放
- 随时间调整缩放比例,例如 脉动 或 跳动 效果。
透明度
- 时间控制透明度,例如 淡入淡出 或 闪烁 效果。
总结
利用 Shader 制作动态效果的关键是 时间变化:
- 时间的变化带动数据的变化,从而影响渲染结果。
- 常用的时间变量:
_Time
:(t/20, t, 2t, 3t)
表示总时间。_SinTime
:正弦值时间变化。_CosTime
:余弦值时间变化。unity_DeltaTime
:帧间隔时间与平滑间隔时间。
通过灵活应用时间变量和动态数据,可以实现丰富多样的动态效果。
45.2 知识点代码
Lesson45_动态效果_如何制作动态效果.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson45_动态效果_如何制作动态效果 : MonoBehaviour
{
void Start()
{
#region 知识回顾 游戏画面中为什么能看到动态效果
//游戏画面中之所以能产生动态效果
//主要的原因是因为 游戏循环 机制
//即游戏画面每隔一个固定时间(每一帧)就会重新渲染
//游戏运行时,每一帧都会更新屏幕,这种更新频率通常称为 帧率(Frames Per Second,FPS)
//比如 30 FPS、60 FPS 代表的就是 1秒钟更新30次,1秒钟更新60次
//而之所以看起来画面是变化的,
//是因为我们在每一帧可能都会改变游戏中对象的位置、角度、缩放、颜色等等信息后重新渲染
//一般情况下,只要帧率大于24FPS,人眼就认为一帧帧切换着的画面是流畅且连贯的了
#endregion
#region 知识点一 如何利用Shader制作动态效果
//通过知识回顾可以知道
//让画面动起来是因为每一帧对象的位置、角度、缩放、颜色等等信息的改变后重新渲染带来的
//相当于就是间隔一定时间更新一些数据,从而带来了画面变化
//那么想要利用Shader制作出动态效果,其实原理也是一样的
//我们只需要间隔一定时间改变Shader中的数据,从而改变渲染的结果,最终达到画面变化的目的
//这样就能够带来动态感了
//总结:
//利用Shader制作动态效果的关键就是 —— 利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
#endregion
#region 知识点二 Shader中的内置时间变量
//利用Shader制作动态效果的关键就是 —— 利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
//时间是关键数据,Shader中提供了对应的内置时间变量
//1.float4 _Time
// 4个分量的值分别是(t/20, t, 2t, 3t)
// 其中t代表该游戏场景从加载开始缩经过的时间
//2.float4 _SinTime
// 4个分量的值分别是(t/8, t/4, t/2, t)
// 其中t代表 游戏运行的时间的正弦值
//3.float4 _CosTime
// 4个分量的值分别是(t/8, t/4, t/2, t)
// 其中t代表 游戏运行的时间的余弦值
//4.float4 unity_DeltaTime
// 4个分量的值分别是(dt, 1/dt, smoothDt, 1/smoothDt)
// dt代表帧间隔时间(上一帧到当前帧间隔时间)
// smoothDt是平滑处理过的时间间隔,对帧间隔时间进行某种平滑算法处理后的结果
#endregion
#region 知识点三 Shader中经常会改变的数据
//利用Shader制作动态效果的关键就是 —— 利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
//我们已经知道,在Shader中如何获取时间变量
//那么我们一般会利用时间和什么数据一起计算,来达到动态效果呢?
//1.颜色
// 通过时间控制颜色的变化,比如 渐变、闪烁 等效果
//2.位置
// 利用时间使顶点在某个方向上移动,比如 波动 等效果
//3.纹理坐标
// 利用时间变化来动态改变纹理坐标,比如 水流、云彩、序列帧动画 等效果
//4.法线
// 利用时间动态修改法线方向,比如 风吹草动 等效果
//5.缩放
// 利用时间改变物体缩放比例,比如 脉动、跳动等效果
//6.透明度
// 利用时间控制物体透明度,比如 淡入淡出、闪烁等效果
#endregion
#region 总结
//利用Shader制作动态效果的关键就是
//利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
//Unity Shader中常用的时间变量有
//_Time(t/20, t, 2t, 3t) —— t代表该游戏场景从加载开始缩经过的时间
//_SinTime(t/8, t/4, t/2, t) —— t代表 游戏运行的时间的正弦值
//_CosTime(t/8, t/4, t/2, t) —— t代表 游戏运行的时间的余弦值
//unity_DeltaTime(dt, 1/dt, smoothDt, 1/smoothDt) —— dt代表帧间隔时间,smoothDt是平滑处理过的间隔时间
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com