Unity3D手游开发日记(7) - 适合移动平台的天气效果
来源:互联网 发布:淘宝口碑网 编辑:程序博客网 时间:2024/05/01 01:41
腾讯的天涯明月刀的天气很棒,以前我也在CE3的基础上做了一个效果差不多的,但是在手机上,还是斜下固定视角的游戏,是否还需要一个天气系统?
而且没有G-Buffer的支持,很多牛逼效果实现不了,比如角色身上的湿润感,水面的波纹涟漪等
考虑了一下,觉得可以做一个简单高效的.
以下雨天为例子.一阵风吹来,天色逐渐变暗,突然下起了雨来,雨越来越大,夹杂着雷声和闪电,过几分钟,雨逐渐消失...
1.风
前面文章已经实现了风引起植被的摆动
2.天色
这个比较麻烦,由于移动平台的场景用的基本都是lightmap烘焙,不是实时光照,所以不好实现过渡,即使是切换光照图效果也不好.那么只好用雾来简单模拟下.
3.雨
为了效率和效果,不要用粒子特效,我尝试过后处理,效率也不是最好的,后来换成了面片.效率和效果都很满意.
4.闪电
和雨一样,用同一个shader处理
5.雷声
这个简单,播放声音
最后,渐变的处理,用贝塞尔曲线.庆幸的是Unity用AnimationCurve帮我们实现:
脚本代码:
using UnityEngine;using System.Collections;public class Rain : MonoBehaviour{ public AnimationCurve rainCurve; public AnimationCurve lightningCurve; public float thunderThreshold = 0.2f; private Color lightingColor = Color.white; private bool isThunder = false; private bool isPlayingSound = false; private Material material = null; void Start() { MeshRenderer r = gameObject.GetComponent<MeshRenderer>(); if (r != null) { material = r.material; } } void Update() { if (material == null) return; // 雨 if (rainCurve != null) { float val = rainCurve.Evaluate(Time.time); material.SetFloat("_Intensity", val * 0.4f); // 雾 if (RenderSettings.fogMode == FogMode.ExponentialSquared || RenderSettings.fogMode == FogMode.Exponential) { float density = 0.01f + val * 0.02f; RenderSettings.fogDensity = density; } } // 闪电 if (lightningCurve != null) { float val = lightningCurve.Evaluate(Time.time); material.SetColor("_LightningColor", lightingColor * val); // 雷 isThunder = val > thunderThreshold ? true : false; if (isThunder) { if (!isPlayingSound) { // TODO:播放 isPlayingSound = true; } } else { isPlayingSound = false; } } }}
静态效果截图看不出啥:
2 0
- Unity3D手游开发日记(7) - 适合移动平台的天气效果
- Unity3D手游开发日记(4) - 适合移动平台的热浪扭曲
- Unity3D手游开发日记(5) - 适合移动平台的植被随风摆动
- Unity3D手游开发日记(6) - 适合移动平台的水深处理
- Unity3D手游开发日记(9) - 互动草的效果
- Unity3D手游开发日记(1) - 移动平台实时阴影方案
- Unity3D手游开发日记(1) - 移动平台实时阴影方案
- Unity3D手游开发日记(7)
- Unity3D手游开发日记(8) - 运动残影效果
- Unity3D手游开发日记(1)
- Unity3D手游开发日记(5)
- Unity3D手游开发日记(8)
- Unity3D手游开发日记(11)
- Unity3D手游开发日记(10)
- Unity3D手游开发日记(2) - 技能系统架构设计
- Unity3D手游开发日记(3) - 场景加载进度条的完美方案
- Unity3D手游开发日记(10) - 资源打包的一些思考
- Unity3D手游开发日记(11) - 基于共享骨骼简单高效的换装方案
- Glide加载自定义圆形ImageView
- 测试
- sizeof和strlen的区别
- Eclipse Tomcat OutOfMemoryError: PermGen space解决方案
- Windows Server 错误" We couldn't complete the updates Undoing changes. Don't turn off your computer"的解
- Unity3D手游开发日记(7) - 适合移动平台的天气效果
- 关于office 2013 word 中使用微软IME首字母无法输入的问题
- HDU 2227 Find the nondecreasing subsequences(线段树+离散化+DP)
- 两种AIDL用法分析(原)
- 辅助存储管理-组织数据
- 创建一个popwindow 并动态设置pop的高度 限定pop高度
- 冒泡、归并、快速、桶、堆排序
- 时钟的制作
- vim的c语言环境简单配置