zoukankan      html  css  js  c++  java
  • Unity3D手游开发日记(7)

    腾讯的天涯明月刀的天气很棒,以前我也在CE3的基础上做了一个效果差不多的,但是在手机上,还是斜下固定视角的游戏,是否还需要一个天气系统?

    而且没有G-Buffer的支持,很多牛逼效果实现不了,比如角色身上的湿润感,水面的波纹涟漪等

    考虑了一下,觉得可以做一个简单高效的.

    以下雨天为例子.一阵风吹来,天色逐渐变暗,突然下起了雨来,雨越来越大,夹杂着雷声和闪电,过几分钟,雨逐渐消失...

    1.风

    前面文章已经实现了风引起植被的摆动

    2.天色

    这个比较麻烦,由于移动平台的场景用的基本都是lightmap烘焙,不是实时光照,所以不好实现过渡,即使是切换光照图效果也不好.那么只好用雾来简单模拟下.

    3.雨

    为了效率和效果,不要用粒子特效,我尝试过后处理,效率也不是最好的,后来换成了面片.效率和效果都很满意.

    4.闪电

    和雨一样,用同一个shader处理

    5.雷声

    这个简单,播放声音

    最后,渐变的处理,用贝塞尔曲线.庆幸的是Unity用AnimationCurve帮我们实现:

    脚本代码:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class Rain : MonoBehaviour  
    5. {  
    6.     public AnimationCurve rainCurve;  
    7.     public AnimationCurve lightningCurve;  
    8.     public float thunderThreshold = 0.2f;  
    9.   
    10.     private Color lightingColor = Color.white;  
    11.     private bool isThunder = false;  
    12.     private bool isPlayingSound = false;  
    13.   
    14.     private Material material = null;  
    15.   
    16.     void Start()  
    17.     {  
    18.         MeshRenderer r = gameObject.GetComponent<MeshRenderer>();  
    19.         if (r != null)  
    20.         {  
    21.             material = r.material;  
    22.         }  
    23.     }  
    24.   
    25.     void Update()  
    26.     {  
    27.         if (material == null)  
    28.             return;  
    29.   
    30.         // 雨  
    31.         if (rainCurve != null)  
    32.         {  
    33.             float val = rainCurve.Evaluate(Time.time);  
    34.             material.SetFloat("_Intensity", val * 0.4f);  
    35.   
    36.             // 雾  
    37.             if (RenderSettings.fogMode == FogMode.ExponentialSquared  
    38.                 || RenderSettings.fogMode == FogMode.Exponential)  
    39.             {  
    40.                 float density = 0.01f + val * 0.02f;  
    41.                 RenderSettings.fogDensity = density;  
    42.             }  
    43.         }  
    44.   
    45.   
    46.         // 闪电  
    47.         if (lightningCurve != null)  
    48.         {  
    49.             float val = lightningCurve.Evaluate(Time.time);  
    50.             material.SetColor("_LightningColor", lightingColor * val);  
    51.   
    52.             // 雷  
    53.             isThunder = val > thunderThreshold ? true : false;  
    54.             if (isThunder)  
    55.             {  
    56.                 if (!isPlayingSound)  
    57.                 {  
    58.                     // TODO:播放  
    59.                     isPlayingSound = true;  
    60.                 }  
    61.             }  
    62.             else  
    63.             {  
    64.                 isPlayingSound = false;  
    65.             }  
    66.         }  
    67.     }  
    68. }  

    静态效果截图看不出啥:

     
     
  • 相关阅读:
    vim的modeline
    python的read() 、readline()、readlines()、xreadlines()
    hashset
    java泛型
    eclipse常用快捷键
    互联网计费模式
    cocos2d::CCFileUtils::sharedFileUtils()->getFileData(szFile, "r", &bufferSize) 不同平台返回值不一样
    CSS为英文和中文字体分别设置不同的字体
    fatal error C1010: 在查找预编译头时遇到意外的文件结尾
    JavaScript权威指南第03章 类型、值和变量(1)
  • 原文地址:https://www.cnblogs.com/czaoth/p/5785641.html
Copyright © 2011-2022 走看看