zoukankan      html  css  js  c++  java
  • 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇02:滚屏》

    2.滚屏

    滚屏概述:

    打飞机游戏场景背景设计通常很简单,因为角色敌人道具等都不与背景发生交互事件。开发者只需要根据设定的游戏类型,为游戏制作背景,模拟一个大环境即可。

    滚屏原理:

    材质UV动画,实现背景图片的滚屏循环。

    实现方法:

    步骤1:

         创建背景载体。创建立方体->适当缩放物体,使物体形状上接近长方形,这样正面在视觉上接近竖版手机屏幕。

    步骤2:SS

    创建背景材质球。项目视图中创建材质球->将材质球赋给步骤1创建的cube物体->将材质球命名为UVAnim。

    步骤3:

    3.1为材质球设置Shader文件。将制作好的UV循环播放的Shader文件,导入到项目视图中。这里需要注意,引擎对shader文件识别有一定命名条件,命名原则实例: Common_Diffuse_UVani.wjshader,其中只有VUani可以自由命名。选择UVAnim,common->Diffuse->UVani.wjshader,如下图2-3-1-1所示。


    图2-3-1-1

    3.2屏幕的滚屏最终效果,屏幕一直像下滚动播放,shader文件如下所示,滚屏效果如图2-3-2-1所示。


    图2-3-2-1

    shader文件代码:

    01 WJShader "Surface_Surface_Diffuse"
    02 {
    03  Parameters
    04  {
    05       Vector [_diffuseColor]<diffuse color=""> = "1.0, 1.0, 1.0, 1.0"
    06       sampler2D [_diffuseMap]<diffuse map="" (rgb)=""> = "sys:white.dds"
    07       Vector [_speed] = "0.1, 0.1, 0.1, 0.1"
    08    }
    09  RenderQueue "Opaque"
    10  Technique "Surface_Surface_Diffuse"
    11  {
    12   Pass
    13   {
    14    RenderSTATE
    15    {
    16     cullMode "Back"
    17     POLYGONMODE "Fill"
    18     ZTest On
    19     ZWrite On
    20     blendMode Off
    21     alphatest Off
    22     samplerState "g_LightLitMap" [Clamp] [Point]
    23     samplerState "_diffuseMap" [Wrap] [Linear]
    24     samplerState "g_Lightmap" [Clamp] [Linear]
    25    }
    26  
    27    CGCODESTART
    28    #pragma surface surfMain customlight lightmap:on
    29    sampler2D _diffuseMap;
    30    float4 _diffuseColor;
    31    float4 _speed;
    32    struct INPUT
    33    {
    34     float2 _diffuseMap_UV;
    35     float3 input_Normal;
    36    }
    37  
    38    float4 customlight(SURFACE_OUTPUT sin, float3 viewDir, float lightAtten)
    39    {
    40     float4 diffuse = float4(0.0,0.0,0.0,0.0);
    41     float4 specular = float4(0.0,0.0,0.0,0.0);
    42     Forward_Shading(sin.Normal,viewDir,sin.Shininess,diffuse,specular,lightAtten);
    43     float4 c = diffuse * sin.Diffuse;
    44     return c;
    45    }
    46    void surfMain(INPUT p, inout SURFACE_OUTPUT o)
    47    { 
    48     p._diffuseMap_UV.x += _speed.x*g_Time;
    49     p._diffuseMap_UV.y += _speed.y*g_Time;
    50     o.Diffuse.xyz = tex2D(_diffuseMap,p._diffuseMap_UV).xyz*_diffuseColor.xyz;
    51     o.Diffuse.w = 1.0f;
    52     o.Alpha = 1.0f;
    53     o.Specular = float4(0.0f,0.0f,0.0f,0.0f);
    54     o.Normal =  float4 ( normalize(mul(g_InvTransModel, float4(p.input_Normal, 1.0f)).xyz), 0.0f );
    55     o.Shininess = 1.0f;
    56    }
    57    CGCODEEND
    58   }
    59  }
    60 }</diffuse></diffuse>


    引擎官方网站:http://www.genesis-3d.com.cn/

    官方论坛:http://bbs.9tech.cn/genesis-3d/

    官方千人大群:59113309   135439306

    YY频道-游戏开发大讲堂(完全免费,定期开课):51735288 

    Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    js时间操作扩展方法
    C#异步调用与线程总结
    ERP笔记5系统服务水平
    HtmlAgilityPack不能解析<select><option>的解决方法
    qq掉线咒语:aidusort.as
    情商的管理
    错误:ORA01036: 非法的变量名/编号 的多种解决办法
    安装MySQLdb时出错:EnvironmentError: mysql_config not found
    Ubuntu12.04安装maven
    (转)ASP.NET 3.5 企业级开发
  • 原文地址:https://www.cnblogs.com/G-3D/p/3520410.html
Copyright © 2011-2022 走看看