《Unity开发实战》——3.10节通过循环加载一组材质实现动画纹理(例如模拟视频)

本节书摘来自华章社区《Unity开发实战》一书中的第3章,第3.10节通过循环加载一组材质实现动画纹理(例如模拟视频),作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.10 通过循环加载一组材质实现动画纹理(例如模拟视频)
还可以让对象的材质有动画效果,比如一个模拟的飞船控制间的计算机屏幕,或者绘制一个可点击的物体作为按钮引起玩家的注意。Unity专业版提供一个把视频作为纹理的解决方案(免费版没有这个功能),也可以用代码实时修改对象的纹理。

3.10.1 准备工作
需要一组图片作为播放序列,最好命名也是有序的,比如computerScreen1.png、computerScreen2.png等。

3.10.2 操作步骤
请按照以下步骤实现动画纹理:
1)创建一个新的场景。
2)创建一个 Plane,在坐标点 (0,0,0),把旋转设置成 (-90,0,0),这样刚好直接面对摄像机。
3)创建一个脚本文件夹,命名为ScriptClasses,创建一个C#脚本类命名为Animated-Texture (把下面的代码粘贴到类中):


《Unity开发实战》——3.10节通过循环加载一组材质实现动画纹理(例如模拟视频)


《Unity开发实战》——3.10节通过循环加载一组材质实现动画纹理(例如模拟视频)

3.10.3 实现原理
imageArray 数组存储了图片序列, Awake()方法检查数组中是否有内容,并调用PlayAnimation()方法。
PlayAnimation()方法中有一个无限循环,循环中调用显示下一张图片的方法,然后让PlayAnimation()方法等几秒(frameInterval变量)作为时间间隔。
ChangeImage()方法寻找序列中的下一张图片,让其父游戏对象的材质用这张图片。imageIndex 变量实例一直存储着数组中当前播放图片的索引。如果上一张图片已经显示过了,给索引值加1,然后做一个取模的运算,结果是数组的下一个最大索引,或是0。函数内的nextImage变量存储数组中下一张要显示的图片,方法的最后一行代码把父对象的材质的主纹理设置成图片。

3.10.4 更多内容
也可以用一个类似的技术实时修改材质。
使用材质取代2D纹理图片
如果想用材质取代纹理图片,可以像下面的代码用一个名为materialArray的材质数组,修改父对象的renderer的sharedMaterial,见代码中的最后一行:


《Unity开发实战》——3.10节通过循环加载一组材质实现动画纹理(例如模拟视频)
上一篇:虚拟偶像诞生记 - 数字人行业和技术探究


下一篇:10.Eclipse下Ndk开发(ffmpeg解码)