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开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/G-3D/p/3520410.html
Copyright © 2011-2022 走看看