【Unity特效】永恒战士3中的死亡特效
2015-11-13 15:31
471 查看
概述
玩过永恒战士3的玩家,应该对它的怪物死亡特效记忆犹新,没玩过也不要紧,先放一张效果图。原理
首先,我们需要2张控制图,如下所示。模型由它原本的贴图,逐渐过渡到storm贴图的,看上去类似尘埃的效果。timeline则用于显示效果的控制,随着uv的x方向的逐渐递增,会看到光环闪过,并且x坐标接近1时,alpha会快速递减。
我们看到,模型有一个顶点外扩的过程。这里加了一个控制,越上面的顶点,会越先往外扩。上面提到的timeline的uv坐标也有这个特性。
实现
接下来,看下具体的代码实现。v2f vert(appdata_base v) { v2f o = (v2f)0; o.pos = mul(_Object2World, v.vertex); float3 dir = o.pos.xyz - _WorldPos.xyz; float progress = _Control - (1.0 - dir.y / _MaxHeight); dir = normalize(dir) + float3(0,1,0); o.pos.xyz += dir * _Explore * max(0.0, progress - _Delay); o.pos = mul(UNITY_MATRIX_VP, o.pos); o.uv.xy = v.texcoord.xy; o.uv.z = clamp(progress, 0.0, 1.0); return o; }
在vertex shader中,将顶点变换到世界空间中,和应用程序中传入的_WorldPos得到外扩的方向,随后归一化,加上y轴单位坐标,得到一个方向修正的外扩方向。
float progress = _Control - (1.0 - dir.y / _MaxHeight);
progress变量控制整个动画进程,_MaxHeight是由应用程序传入的模型高度。越高的点,progress的值就越大。
o.pos.xyz += dir * _Explore * max(0.0, progress - _Delay);
这句代码,将顶点沿方向外扩。_Explore是定义的外扩程度,_Delay起到的效果是,等着timeline贴图的金边闪过后,再顶点外扩。
fixed4 frag(v2f i) : Color { fixed4 c = tex2D(_MainTex, i.uv.xy); fixed4 storm = tex2D(_Storm, i.uv.xy * 2.0); fixed4 time = tex2D(_TimeLine, i.uv.zw); fixed4 final; final.rgb = lerp(c.rgb, storm.rgb, float3(i.uv.z)) + time.rgb; final.a = lerp(1.0, storm.a, i.uv.z) * time.a; return final; }
代码和资源
图片和完整源代码,有需要可以自行去下载。
相关文章推荐
- 通过Unity实现手机本地模型(obj)的读取
- Unity中资源动态加载的几种方式比较
- Visual Studio 2015 Community - Full download (ISO)
- Unity获取GameObject单例
- [Unity热更新]unity5中的assetbundle
- 魅族SDK接入
- Unity3D--SDK接入一键打包APK
- 在Unity中添加代码,会自动调用代码中的Reset函数,当修改代码中的变量的时候,会调用OnValidate函数
- Adreno Profiler分析任意安卓游戏特效+抓取资源
- Unity3D研究院编辑器之脚本生成Preset Libraries
- unity 打开asset自定义处理
- #你好Unity3D#手机上的路径(来自我的长微博)
- #你好Unity3D#避免玩家作弊(来自我的长微博)
- Unity3D研究院之处理摄像机与角色之间被挡时的局部透明效果
- Unity研究院之提前获取粒子特效的播放时长
- Unity3D研究院之监听Project视图结构变化的事件
- Unity人工智能学习—躲避规则障碍一
- VS调试Unity3D脚本
- unity 菜单栏添加新菜单
- Unity3D脚本自动添加tag和Layer