开发者专栏

关注:2175

当前位置:足球投注 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1852|回复: 36
发新帖

[士郎] Unity手游开发札记——移动平台的天气系统实现

[复制链接]  [移动端链接]
排名
3
昨日变化

足球投注 www.zjrxh.com 6248

主题

6762

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
1929
威望
30
注册时间
2013-7-29
在线时间
3187 小时
最后登录
2018-4-20

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

跳转到指定楼层
楼主
发表于 2018-4-10 10:13:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
1. 综述
整体来说,移动平台的性能还不足以支撑端游上完整的一套天气系统,Unity的Asset Store上有一些不错的天气效果实现,也只能看着流流口水,并不敢用,比如这个Weather Maker - Sky, Weather, Fog, Volumetric Light and Dynamic Environment,还有UniStorm。(UniStorm有一个Mobile版本,效果也还不错,有兴趣的同学可以去搜索看下。)

那么,在移动端,天气系统效果简答来说也就成了美术做做特效,程序按照需求写写挂特效的脚本罢了。的确,在制作各个天气的效果的时候,并没有用到什么特别的技术点,但整个实现天气系统的过程中,我没有依赖于美术,而是自己寻找所有需要的资源,编写逻辑进行整合简化,过程还比较有趣,体会到非常直接的成就感,一些小的细节也自己去处理,非???。目前实现的天气效果包括晴天、多云、阴天、雨天和雪天这几种比较常见的效果,逐一来进行说明。


2. 晴天效果
我们项目中美术制作的所有场景都是按照晴天的效果来制作的,所以对于程序来说,晴天效果就是没效果,实现最简单,性能最优,哈哈~(就是注意把其他效果清空不要残留……)


3. 多云效果
先看一下最终实现的多云效果截图,动态图比较容易看出效果,静态图感觉比较怪,可以注意主城的模型有一半是被云遮住了。为了凸显效果云阴影的浓度被我故意调整得比较高。


多云效果截图


这个效果是之前美术想要的一个内容。如果使用真正移动一个半透的云模型在空中移动并且产生投影,移动设备上所能支持的shadowmap尺寸无法提供足够的阴影精度,而直接进行投影的方法又比较难做到在高低不平的山、建筑等物体表面计算投影效果。经过调研之后,使用了一个购买的插件Screen Space Cloud Shadow。插件页面有动态效果视频,想看动态效果的可以去看下。当时同样调研了另外一个插件Cloud Shadows,都试玩了下。后者是基于light的cookie的,在当时的unity版本中有些小问题没有解决掉,而且我自己试验的cookie在移动设备上有点小问题,所以就没有选用。Screen Space Cloud Shadow这个插件使用起来比较方便,只需要把prefab丢场景里就好,开关也很简单,代价就是需要深度图,场景内所有物件都要绘制两遍,draw call和面数都会翻倍。这也是整个天气系统中消耗最大的一块,因此多云天气在最终版本里也只有高配下才会开启。


由于是购买的插件,因此贴代码不太合适,简单说一下实现的原理:shader使用Transparent渲染队列,在OnWillRenderObject中将一个平面放到相机的远平面,并且把尺寸缩放成和相机的远平面一样,这样就保证它的绘制过程是在最后,用FrameDebugger抓帧看绘制顺序和参数如下图:


云阴影的绘制过场截图

在Shader的frag过程中,根据深度图和世界空间的摄像机方向射线来计算出阴影应该绘制的浓度。这里包含了一些magic value,我也有些细节没有看得特别懂……再加上本身并不是我自己设计的算法,因此不在这里详述了,有兴趣想了解的朋友可以自己去购买一份插件,source code include。

这里只说明三个遇到并解决的小坑:
  • 由于云的阴影是飘动的,因此涉及到uv的流动,这个是根据时间来计算的,最初的时候这个时间直接取了Time.time的值,当游戏运行一段时间之后,这个值就会变得很大,在移动设备上会导致云的移动出现顿卡的感觉。这也是在很多使用uv流动的过程中很容易出现的一个问题,通过取余的方式可以保证精度,但是可能会在取余的那一帧出现采样不连续的问题。由于我们不会非常长时间开启这个效果,因此这个问题可以通过在开关的时候把时间参数重置来规避。
  • fixed类型在移动设备上精度问题导致马赛克。原来Shader中使用了fixed的值,在PC上并没有问题,安卓设备上发现了马赛克的现象,修改几个关键值为float类型可以解决马赛克问题。
  • 由于使用了深度图,因此深度图的精度对于云的效果影响比较大。我们最初相机的远平摄设置得非常远,近平面又非常近,0.1-1000这样的值域范围。在PC上没有问题,手机上就有非常明显的马赛克,将近平面和远平面都调整一下,变为1-300,效果好了很多。(顺便再推荐一下在UWA群里推荐过的调试插件,Hdg Remote Debug - Live Update Tool,可以在电脑上连接移动设备进行实时调试,用于排查和调试这种问题比频繁打包要方便很多,节省太多时间,已经被我默认打包进了dev版本的工程里。)





4. 阴天

阴天的效果其实就是天色变暗的感觉,如果是实时光照的话可以通过调暗方向光的亮度或者颜色来处理,但是由于手游上目前大都还是烘焙的,因此比较方便的方案就是通过后处理来实现。


考虑过Color Grading方案,但是感觉稍微有点耗,而且和昼夜系统实现会有些小冲突,最后实现的时候选择了直接在颜色上乘以一个Tint Color的方案来做,由于我们整合了整个后处理效果栈,因此在开启别的后处理的情况下,这个tint color的过程消耗非常小,每个像素多一个乘法而已。


5. 雨天

雨天的效果实现了两个版本,最初的版本是基于前文提到的博客里的思路来实现的,就是挂一个uv流动的面片在镜头前,闪电的效果就是把这个面片调整为白色再调整回来。实现非常简单,这里只贴一下Shader代码好了,因为没有真正在项目中使用,所以只算私货。

[AppleScript] 纯文本查看 复制代码
Shader "Shader/Scene/Rain" {[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]    Properties{[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]        _RainTex("Main Texture:", 2D) = "white" {}[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]        _RainIntensity("Intensity of Rain:",Float) = 0.0[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]        _FallSpeed("Fall Speed of Rain:",Float) = 1[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]        _ThunderLighting("Thunder Lighting", Color) = (0, 0, 0, 0.5)[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=rgb(26, 26, 26)]    }[/color][/size][/font][/align][font=微软雅黑][size=3]
[/size][/font][align=left][font=微软雅黑][size=3][color=#1a1a1a]
[/color][/size][/font][/align][font=微软雅黑][size=3]
[color=#1a1a1a][align=left]    SubShader{[/align]
[/color][color=#1a1a1a][align=left]        Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }[/align]
[/color]
[color=#1a1a1a][align=left]        Blend SrcAlpha One[/align]
[/color]
[color=#1a1a1a][align=left]        LOD 100[/align]
[/color][color=#1a1a1a][align=left]        Cull Off[/align]
[/color][color=#1a1a1a][align=left]        ZWRITE Off[/align]
[/color][color=#1a1a1a][align=left]        Lighting Off[/align]
[/color]
[color=#1a1a1a][align=left]        Pass{[/align]
[/color][color=#1a1a1a][align=left]            CGPROGRAM[/align]
[/color][color=#1a1a1a][align=left]            #pragma vertex vert[/align]
[/color][color=#1a1a1a][align=left]            #pragma fragment frag[/align]
[/color][color=#1a1a1a][align=left]            #pragma target 2.0[/align]
[/color]
[color=#1a1a1a][align=left]            #include "UnityCG.cginc"[/align]
[/color]
[color=#1a1a1a][align=left]            sampler2D _RainTex;[/align]
[/color][color=#1a1a1a][align=left]            float4 _RainTex_ST;[/align]
[/color][color=#1a1a1a][align=left]            fixed _FallSpeed;[/align]
[/color][color=#1a1a1a][align=left]            fixed _RainIntensity;[/align]
[/color][color=#1a1a1a][align=left]            float4 _ThunderLighting;[/align]
[/color]
[color=#1a1a1a][align=left]            struct appdata_t {[/align]
[/color][color=#1a1a1a][align=left]                float4 vertex : POSITION;[/align]
[/color][color=#1a1a1a][align=left]                float2 texcoord : TEXCOORD0;[/align]
[/color][color=#1a1a1a][align=left]            };[/align]
[/color]
[color=#1a1a1a][align=left]            struct v2f {[/align]
[/color][color=#1a1a1a][align=left]                float4 vertex : SV_POSITION;[/align]
[/color][color=#1a1a1a][align=left]                float2 texcoord : TEXCOORD0;[/align]
[/color][color=#1a1a1a][align=left]            };[/align]
[/color]
[color=#1a1a1a][align=left]            v2f vert(appdata_t v)[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                v2f o;[/align]
[/color][color=#1a1a1a][align=left]                o.vertex = UnityObjectToClipPos(v.vertex);[/align]
[/color][color=#1a1a1a][align=left]                o.texcoord = TRANSFORM_TEX(v.texcoord, _RainTex);[/align]
[/color][color=#1a1a1a][align=left]                return o;[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color]
[color=#1a1a1a][align=left]            fixed4 frag(v2f i) : SV_Target[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                fixed2 UV = i.texcoord;[/align]
[/color][color=#1a1a1a][align=left]                float Time = _Time.y;[/align]
[/color][color=#1a1a1a][align=left]                fixed vValue = _FallSpeed * Time;[/align]
[/color]
[color=#1a1a1a][align=left]                UV = fixed2(UV.x, UV.y + _FallSpeed * Time);[/align]
[/color][color=#1a1a1a][align=left]                fixed4 col = tex2D(_RainTex, UV);[/align]
[/color][color=#1a1a1a][align=left]                col.rgb = col.rgb * col.a * _RainIntensity + _ThunderLighting.rgb;[/align]
[/color][color=#1a1a1a][align=left]                col.a = 1.0f;[/align]
[/color][color=#1a1a1a][align=left]                return col;[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color][color=#1a1a1a][align=left]            ENDCG[/align]
[/color][color=#1a1a1a][align=left]        }[/align]
[/color][color=#1a1a1a][align=left]    }[/align]
[/color][color=#1a1a1a][align=left]}

实现的效果截图如下图所示。镜头前的面片使用的贴图也是我从网上找的雨滴噪声贴图自己修改的,因此有不连续的问题,截图中可以看出来,这个也是自己P图的基本功不够的原因……
初版的下雨效果截图
这里学习到一个小的技巧是可以使用Unity的Curve来做一些曲线供游戏逻辑使用,从而做出来一些变化的效果,这里就用曲线控制了雨的浓度和与雷声配合的闪电效果,C#代码也贴一下。

[AppleScript] 纯文本查看 复制代码
using UnityEngine;[/size][/font][/color][/align]
[font=微软雅黑][size=3][align=left][color=#006000]
[/color][/align]
[color=#1a1a1a][align=left]namespace ThorFramework.Weather[/align]
[/color][color=#1a1a1a][align=left]{[/align]
[/color][color=#1a1a1a][align=left]    [DisallowMultipleComponent][/align]
[/color][color=#1a1a1a][align=left]    public class RainController : MonoBehaviour[/align]
[/color][color=#1a1a1a][align=left]    {[/align]
[/color][color=#1a1a1a][align=left]        public AnimationCurve rainCurve;[/align]
[/color][color=#1a1a1a][align=left]        public AnimationCurve thunderCurve;[/align]
[/color]
[color=#1a1a1a][align=left]        private Color lightingColor = Color.white;[/align]
[/color][color=#1a1a1a][align=left]        private Material weatherMaterial;[/align]
[/color][color=#1a1a1a][align=left]        private float startTime = 0.0f;[/align]
[/color][color=#1a1a1a][align=left]        private AudioSource thunderAudio;[/align]
[/color]
[color=#1a1a1a][align=left]        // Use this for initialization[/align]
[/color][color=#1a1a1a][align=left]        void Start()[/align]
[/color][color=#1a1a1a][align=left]        {[/align]
[/color][color=#1a1a1a][align=left]            MeshRenderer r = gameObject.GetComponent<MeshRenderer>();[/align]
[/color][color=#1a1a1a][align=left]            if (r != null)[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                weatherMaterial = r.material;[/align]
[/color][color=#1a1a1a][align=left]                startTime = Time.time;[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color][color=#1a1a1a][align=left]            thunderAudio = gameObject.GetComponent<AudioSource>();[/align]
[/color][color=#1a1a1a][align=left]        }[/align]
[/color]
[color=#1a1a1a][align=left]        void OnEnable()[/align]
[/color][color=#1a1a1a][align=left]        {[/align]
[/color][color=#1a1a1a][align=left]            startTime = Time.time;[/align]
[/color][color=#1a1a1a][align=left]        }[/align]
[/color]
[color=#1a1a1a][align=left]        // Update is called once per frame[/align]
[/color][color=#1a1a1a][align=left]        void Update()[/align]
[/color][color=#1a1a1a][align=left]        {[/align]
[/color][color=#1a1a1a][align=left]            float curveTime = Time.time - startTime;[/align]
[/color][color=#1a1a1a][align=left]            if (weatherMaterial == null)[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                return;[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color][color=#1a1a1a][align=left]            if (rainCurve != null)[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                float val = rainCurve.Evaluate(curveTime);[/align]
[/color][color=#1a1a1a][align=left]                weatherMaterial.SetFloat("_RainIntensity", val);[/align]
[/color][color=#1a1a1a][align=left]                thunderAudio.volume = 2.0f * val;[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color]
[color=#1a1a1a][align=left]            if (thunderCurve != null)[/align]
[/color][color=#1a1a1a][align=left]            {[/align]
[/color][color=#1a1a1a][align=left]                float val = thunderCurve.Evaluate(curveTime);[/align]
[/color][color=#1a1a1a][align=left]                weatherMaterial.SetColor("_ThunderLighting", lightingColor*val);[/align]
[/color][color=#1a1a1a][align=left]            }[/align]
[/color][color=#1a1a1a][align=left]        }[/align]
[/color][color=#1a1a1a][align=left]    }[/align]
[/color][color=#1a1a1a][align=left]}



这种实现OverDraw会直接翻倍,但是没有其他的太多额外消耗,因此性能上还比较节省,大致测试了下对于性能几乎感受不出来影响,特别是被降低了分辨率的情况下。但是最终我们还是没有采用这种方案,主要原因是这种效果很难做出深度感,就是雨滴真的在空间中有分布的感觉。最终还是用了粒子特效,一个一直挂在相机前的特效,在区域范围内一直产生垂直坠落的雨滴。





在这之前我没怎么玩过粒子系统,这里从头学习制作一个粒子特效,还是挺有趣的。粒子系统可以用比较简单的方法制作出非??犰诺男Ч?。最终实现效果的截图如下:

雨天效果截图
这里雨的效果包括三个部分:

  • 跟随相机移动的一个产生雨滴的特效,截图中雨滴不是很密集,但是动起来的效果还是不错的。这里为了追求效果粒子数量上限给到了500左右,但是仍然不是非常密集,做不到暴风雨的感觉,还需要添加一些面片来做更加密集的雨滴效果。
  • 跟随角色移动的地面涟漪。在通常的做法中,雨滴涟漪的制作是用粒子系统的碰撞来做的。当粒子产生了碰撞之后就会产生一个新的粒子效果,这样可以做到很精准的感觉,包括落在树叶上、建筑房顶上等,但是消耗也比较大。我们采用的是比较讨巧的方法,角色脚底挂一个不断随机产生涟漪的粒子特效,在斜坡、桥上等地方会有穿帮的小问题,但是也基本满足的策划的需求。
  • 与阴天一样,下雨的时候会阴暗一些,所以同样挂了一个tint color调色的后处理。

总结:雨的效果花费了挺多精力来制作,最终的效果基本满意。使用特效的方案整体的overdraw没有那么高,但是为了出效果粒子数量用得还算比较多,因此在粒子系统上的性能消耗还挺大的。对比之前面片的方案各有优劣,只是出了追求高品质效果的考虑选择了效果上限较高的粒子系统来实现。

6. 雪天

在实现雨天的效果之后,雪天的效果制作就非常简单了,雾效果加上一个和雨滴相似的粒子特效挂在镜头前就可以啦。由于雪花生命周期比较长,飘落速度比较慢,粒子数最多在300左右就可以达到不错的效果。实现的效果截图如下(这里有一些序列帧动画之类的小技巧可以优化雪片的效果,不过不属于程序的技术了,特效同学应该都会的):


雪天效果截图


也同样研究了一下《镇魔曲》中雪花效果的实现,发现比较讨巧的是他们没有让一个雪花是一个粒子,而是用一张图来表现几片雪花的效果,然后大约只需要同时存在十几个粒子就可以做到比较密集的下雪效果。当然代价是仔细观察的话会发现一些重复感,overdraw也会稍微有些提高,但是粒子数量降低得会比较多,值得借鉴。(我们美术同学尝试了一个版本之后告诉我不太满意,当然在看了完全随机的效果之后,对于略有重复的效果自然能感觉出来瑕疵,没有对比才没有伤害……)

7. 风

风不属于任何一个天气,而是用于辅助表现其他天气效果的元素,在我们游戏中主要能做的表现是树木的摇摆和一些相应的音效。摇摆的效果采用顶点动画来实现,已有的实现方案可以参考Unity3D手游开发日记(5) - 适合移动平台的植被随风摆动这篇文章,网上也有很多实现细节的讨论,但比较好的方案追本溯源还是《GPU Gems》中的一篇文章:《Chapter 16. Vegetation Procedural Animation and Shading in Crysis》。它主要描述了在CryEngine中的实现原理,考虑到树干和树叶的不同,使用顶点色来对振幅进行控制,估计很多人都读过,实现细节可以去参考原文。

这里只说几个我们移植时的几个修改:

  • 使用Shader的全局变量。Shader.SetGlobalXXX一系列的接口就是为这种全局参数来设计的,简单易用。
  • 临近测试我们美术比较忙,表示没时间对每棵树的模型去刷顶点色,于是摇摆的幅度控制采用了一个简化的方案——由顶点高度和一个美术设定的模型高度的比值来决定,目前只采用的线性差值,效果一般,勉强够用。
  • GPU Gem中的实现比较复杂,考虑了横向的和纵向的抖动,有不少计算在里面,这块可以根据自己项目的游戏类型和需求来修改和简化。





8. 整合

把实现的各个天气效果整合成天气系统,由一个管理器来控制,可以模拟游戏中各个国家的气候风格,这是最后整合进游戏进行实际应用的步骤。由于我们大世界和战斗场景是两种完全不同的镜头方式,因此最终特效挂接的部分实现了两套不同的控制逻辑。除此之外,根据不同国家的特性,也将雨天和雪天统一为了特殊天气,比如在燕国这样靠北的国家,就只会下雪,而其他国家则是下雨。这其中有很多繁杂的与游戏业务相关的逻辑就不谈了,只聊几个实现过程中比较有感触的点:


  • 渐变需求。天气效果中所有的控制效果都有不同的渐变细节需要处理,比如下雪天气停止不能突然没有,而是要有渐渐消失的感觉;天气由晴天变阴天,也不应该突然黑下来,而是要有一个亮度渐变的过程。这些需要各个天气系统针对自己的效果做好差值的处理,这个过程使用了DoTween来做,代码实现非常简单高效。
  • 对于需要跨天气控制的效果进行统一的管理。在最初的版本里,用于表现变暗效果的Tint Color由每一个天气进行各自的管理和差值,这里就有一些非常恶心的特殊代码要做处理,比如阴天效果的停止函数中,当进入晴天的时候需要把亮度逐渐调整到1,如果从阴天进入雨天,则不需要做这样的调整。天气效果的控制也就像是一个状态机,在单独的状态中如果需要考虑变换的前后逻辑,代码里就需要非常多if-else这样的逻辑判断。在迭代的过程中,把这块的控制抽象成为一个天气亮度管理器——BrightnessManager,它负责控制亮度并按照设定的速度在当前亮度和目标亮度之间做差值,这样对于任何天气效果,只需要在开启的时候设置默认的亮度值给亮度管理器,其他细节都不需要关心。同样还有用于风的参数控制的WindManager。
  • 效果与实现逻辑的分离。从表面上看,下雨和下雪是两个不同的天气效果,但是他们在程序的逻辑是有很大相似性的——都是控制特效的挂接和跟随逻辑。因此从逻辑实现上这两个天气效果有相同的逻辑,只是数据(特效)不同而已。另外下雨的效果有额外的一些涟漪的处理。于是使用面向对象的思路抽取一个FXWeather的公共父类来做代码的复用,方便维护。



经过一些思考和迭代之后,最终C#代码中的类图如下所示。

最终实现的天气系统类图

9. 总结

回顾整个天气系统的实现,其实没有特别有难度的东西,只是一些效果的应用和业务逻辑的编写。使用面向对象的继承和组合,再加上状态模式就完成了最后的需求。在效果方面,由于要兼顾移动平台的性能限制,相比端游的动态天气效果做了很多妥协和简化,尽量用20%的性能消耗做到60%的表现力,对于真实感等方面做了不少的妥协。


当然,现在实现的各种天气效果还很简陋,比如下雨还可以添加地面湿滑的材质效果,还可以制作暴风雨这样更动感刺激的天气效果,在沙漠中实现沙尘暴的感觉等等。这些东西,还需要更多的时间和精力来填满缺失的细节。


无论如何,希望这篇文章可以给期望增强游戏效果的同学一些启发,也同样期望有更好实现效果和方法的朋友不吝赐教,给予更多思路和经验的分享。



知乎@Funny David



评分

参与人数 2鲜花 +7 收起 理由
zhulin5230 + 5 很给力!
HOH + 2 赞一个!

查看全部评分


跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
排名
1134
昨日变化

12

主题

967

帖子

2597

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
7
蛮牛币
9259
威望
0
注册时间
2015-1-14
在线时间
690 小时
最后登录
2018-4-20
沙发
发表于 2018-4-10 10:27:22 | 只看该作者
这个好~~~

点评

  发表于 2018-4-10 17:05

5熟悉之中
571/1000
排名
4207
昨日变化
2

0

主题

106

帖子

571

积分

Rank: 5Rank: 5

UID
195174
好友
0
蛮牛币
518
威望
0
注册时间
2016-12-22
在线时间
169 小时
最后登录
2018-4-20
板凳
发表于 2018-4-10 12:20:48 | 只看该作者
这个吊,这个吊

2初来乍到
146/150

0

主题

66

帖子

146

积分

Rank: 2Rank: 2

UID
269736
好友
0
蛮牛币
38
威望
0
注册时间
2018-2-27
在线时间
80 小时
最后登录
2018-4-22
地板
发表于 2018-4-10 12:22:36 | 只看该作者
多谢啊

排名
28190
昨日变化
15

0

主题

5

帖子

29

积分

Rank: 1

UID
147672
好友
0
蛮牛币
6
威望
0
注册时间
2016-5-5
在线时间
14 小时
最后登录
2018-4-20
5#
发表于 2018-4-10 13:45:57 | 只看该作者
sixsixsixsixsixsix

7日久生情
2404/5000
排名
3483
昨日变化
15

0

主题

1728

帖子

2404

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
219676
好友
0
蛮牛币
2285
威望
0
注册时间
2017-7-12
在线时间
310 小时
最后登录
2018-4-22

活力之星

6#
发表于 2018-4-10 13:47:21 | 只看该作者
谢谢分享
[发帖际遇]: 夜雨微凉 在论坛发帖时没有注意,被小偷偷去了 2 蛮牛币. 幸运榜 / 衰神榜

3偶尔光临
259/300
排名
11714
昨日变化
7

0

主题

116

帖子

259

积分

Rank: 3Rank: 3Rank: 3

UID
245937
好友
0
蛮牛币
308
威望
0
注册时间
2017-9-25
在线时间
78 小时
最后登录
2018-4-20
7#
发表于 2018-4-10 13:52:59 | 只看该作者
学习了

4四处流浪
425/500
排名
4017
昨日变化
3

0

主题

10

帖子

425

积分

Rank: 4

UID
16026
好友
0
蛮牛币
1073
威望
0
注册时间
2014-2-28
在线时间
102 小时
最后登录
2018-4-19
8#
发表于 2018-4-10 15:34:47 | 只看该作者
厉害了,版主,代码格式可以编辑下,看的有点难受

5熟悉之中
701/1000
排名
6270
昨日变化
5

0

主题

376

帖子

701

积分

Rank: 5Rank: 5

UID
146677
好友
9
蛮牛币
2461
威望
0
注册时间
2016-4-25
在线时间
141 小时
最后登录
2018-4-19
QQ
9#
发表于 2018-4-10 17:01:08 | 只看该作者
很厉害,支持一下

4四处流浪
398/500
排名
5253
昨日变化
30

1

主题

29

帖子

398

积分

Rank: 4

UID
230664
好友
2
蛮牛币
621
威望
0
注册时间
2017-7-6
在线时间
140 小时
最后登录
2018-4-21

一贫如洗

10#
发表于 2018-4-10 18:28:56 | 只看该作者
感谢分享!

5熟悉之中
515/1000
排名
6383
昨日变化

0

主题

125

帖子

515

积分

Rank: 5Rank: 5

UID
77159
好友
0
蛮牛币
71
威望
0
注册时间
2015-3-5
在线时间
212 小时
最后登录
2018-4-12
11#
发表于 2018-4-10 18:58:49 | 只看该作者
66666666666666666

4四处流浪
318/500
排名
9908
昨日变化
4

0

主题

132

帖子

318

积分

Rank: 4

UID
99709
好友
0
蛮牛币
168
威望
0
注册时间
2015-5-12
在线时间
96 小时
最后登录
2018-4-20
12#
发表于 2018-4-11 08:41:36 | 只看该作者
感谢大神分享

7日久生情
2125/5000
排名
270
昨日变化

0

主题

70

帖子

2125

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
9580
好友
1
蛮牛币
5611
威望
0
注册时间
2013-12-4
在线时间
341 小时
最后登录
2018-4-21
13#
发表于 2018-4-11 08:44:45 | 只看该作者
66666~~謝謝大大分享

6蛮牛粉丝
1009/1500
排名
8296
昨日变化
81

0

主题

758

帖子

1009

积分

Rank: 6Rank: 6Rank: 6

UID
267381
好友
0
蛮牛币
1515
威望
0
注册时间
2018-2-1
在线时间
125 小时
最后登录
2018-4-22
14#
发表于 2018-4-11 08:53:11 | 只看该作者
谢谢分享

5熟悉之中
535/1000
排名
4483
昨日变化

0

主题

77

帖子

535

积分

Rank: 5Rank: 5

UID
227749
好友
1
蛮牛币
930
威望
0
注册时间
2017-6-20
在线时间
182 小时
最后登录
2018-4-20
15#
发表于 2018-4-11 09:06:27 | 只看该作者
感谢分享??!

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 足球投注 返回列表
幸运农场开奖结果查询 | 759| 764| 459| 811| 281| 664| 261| 900| 147| 291|