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

     


  • 相关阅读:
    那些会阻碍程序员成长的细节[6]
    那些会阻碍程序员成长的细节[5]
    那些会阻碍程序员成长的细节[4]
    那些会阻碍程序员成长的细节[3]
    基于SpringCloud的Microservices架构实战案例-在线API管理
    主机地址变更后,dubbo请求时依旧会寻址旧IP的问题
    基于SpringCloud的Microservices架构实战案例-配置文件属性内容加解密
    基于SpringCloud的Microservices架构实战案例-架构拆解
    程序员创业必读的几本书
    Java基础---二分查找
  • 原文地址:https://www.cnblogs.com/G-3D/p/3520410.html
Copyright © 2020-2023  润新知