zoukankan      html  css  js  c++  java
  • 太空大战游戏开发实例

    Unity 版本: 5.3.5.f1

    一. 游戏策划
    操作模式:
    上下左右按键, 空格发射子弹

    游戏中的敌人:
    (1) 初级敌人,装甲交弱,以撞击主角为主, 沿弧线飞行
    (2) 高级敌人,装甲较强,可以发射子弹, 直线飞行


    二.游戏场景制作
    1.导入游戏所需要的美术资源
    方法一:
    Assets目录点击右键->show in explorer->将美术资源直接copy到Assets目录
    在回到unity3d界面就可以看到相关资源

    方法二:
    Assets目录点击右键->import new asset->浏览选择目标资源

    3.创建场景
    File->new sense当前场景为level0
     双击level0 即可选定编辑

    (1).创建一个平面体作为游戏背景
    GameObject->3D Object->Plane

    U3D中采用左手坐标系系统
    所以我们可以选择top视角(从上往下看),即可观察到平面
     
    (2). 创建一个材质
    assets目录右键->create->material
    Transparent材质将带有alpha信息,可以设置透明度(alpha cutoff)

    (3). 完成场景设定
    将background拖放到创建好的plane上面即可(U3D中很多操作都可以通过拖放来完成)
     
    (4). 创建星空背景
    继续新建一个平面体,使其在刚刚星球平面体下方,在inspector->scale中可以指明X和Z方向上的长度
    由于默认是1,我给2就刚好星球平面体的大小的2倍
     
    继续创建一个材质与其绑定
     
    完成后效果如下:
     
    4. 场景中添加动画
    (1) 选中星空图平面体,菜单栏点击Windows->animation(快捷键Ctrl+6)
     先点左上角那个小红点开始录制,然后选择curves,点击add property
    出现各种颜色的线,比如Material._Main Tex_ST.w是黄色的线
    拖动这个呈直线,斜率越低速度越慢(但是只会跑半边动画)

    如上路效果就是星空图相对与星球向下移动
    - -!这里被坑的有点惨,玩了半天才玩懂

    5.设置摄像机和灯光
    (1) 设置摄像机
    调整好视角
    a. 按鼠标中建平移视图
    b. 按鼠标左键+alt键旋转视图
    c. 按鼠标右键+alt键或滑动鼠标滑轮推拉视图
    d. 按F键快速锁定选中目标
     调整好视角之后,在hierarchy窗口选择Main Camera,Main Camera是游戏的默认摄像机
    在菜单栏选择Game Object->Align with view 使摄像机视角与当前视角保持一致.

    (2).设置灯光
    添加亮度
    Windows->Lighting->Ambient intensity调节亮度
     
    添加灯光
    GameObject->Light->point Light

    添加完毕后会出现黄色的光源范围
     
    默认就有一个光源(看来黄色线条表示光源)
     


    三.游戏主角设定
    游戏的主角是一个太空飞船,也是我们的操作目标

    1.将主角设定到场景中
    将Player.fbx拖放到游戏场景, 在asset目录有个播放的小三角形图标

    在光照效果下已经在星球表明形成阴影
     
     
    酷炫 突然明白了U3D就像是一套物理引擎,设计好游戏场景,每个场景有不同的物理元素(GameObject)
    然后写程序控制每个GameObject实现游戏逻辑
     
    2. 编写控制代码
    在assets目录下新建script目录,然后脚本目录下新建Player.cs
    双击脚本VS 2013打开,U3D目录会自动生成VS的sln工程文件

    将Player直接拖放到Player的Inspector窗口,即可完成脚本绑定
     
    编写代码如下:
    说明:
    a.Start()函数 主要执行一些初始化操作
       Update()函数 每桢执行一次, 有点像Win32GUI编程中的WM_PAINT

    b. Time.deltaTime表示每桢的经过时间,那些需要每桢做增减变动的数值都需要乘上Time.deltaTime
       我们的例子种速度和Time.deltaTime相乘,表示每桢移动N米距离

    c. Transform组件提供的主要功能和移动,旋转,缩放游戏体有关,其中Vector3类型的参数用来表示在x,y,z3个方向上移动的距离

    这个时候点击场景播放,就可以发现我们可以控制战机的移动了

    U3D也识别出了Speed为1
     
    3. 创建子弹
    (1). 设定子弹体
    将rocket.fbx拖放到level0场景,编写代码如下:
     设置代码组件后,我们发现子弹so~一下就消失了

    (2)创建子弹prefab
    prefab可以理解为可以重用的游戏体,
    然后我们可以在任意场合,时间包括其他的U3D游戏中重复使用

    新建一个frefabs目录,新建一个空的prefab,然后可以直接从场景中的rocket拖放到prefabs即可
    同时设置prefab脚本为rocket.cs即可,原场景中的rocket可以删掉了
     
    (3). 发射子弹
    player中添加代码,注意必须是public,否则不会显示在Inspector窗口
     
    此时Inspector窗口多了Rocket属性,将prefab的Rocket拖放到Rocket选项即可
     
     
    编写子弹逻辑,0.1秒发射一次子弹

     再次运行游戏,可以发射子弹了

    4.创建敌人
    创建敌人和创建主角差不多,直接拖动到上面即可,敌人可以复用,所以最后还是创建prefab

    编写代码如下:
     
    运行游戏,敌人开始做曲线向下运动

    5. 碰撞检测
    (1).为敌人添加碰撞
    选中敌人,添加组件

    添加Physics->Box Collider
     
     将is Trigger勾选,使其触发状态激活
     
    在继续添加一个刚体,所有参与物理计算的游戏体都需要一个刚体才能正常工作
    Add Component->physics->rigidbody
    去掉Use Gravity不受到重力影响
    is kinematic 勾选使得游戏体不受到物理模拟的影响

    同样为主角和子弹添加刚体和物理碰撞


    (2).设置tags
    Edit->Project Setting->tags and layouts
    添加2个tag
     
     在prefab中绑定tag
     
    (3).游戏体碰撞检测
    敌人代码检测逻辑:
    碰撞到子弹后,根据子弹的威力递减生命值,当生命值为负数时,自动销毁
    碰撞到主角,直接死亡
     
    子弹碰撞检测
    与敌人碰撞就销毁
     
    主角碰撞检测
    与不是己方子弹碰撞,都减少1点生命
     
    (4). 游戏边界碰撞检测
    在游戏下方添加一个游戏边界(一个空的游戏体),当敌人碰撞边界就销毁

     设置如下
    注意保证Y坐标一致,不然可能无法发生碰撞
     
    6. 添加高级敌人
    添加一个可以发射子弹的高级敌人,其方法和主角一样,只是控制交给计算机完成
     高级敌人继承于初级敌人类即可, 重载移动方式函数
    Awake每次实例创建会调用一次,时机早于start函数
    实例创建立即寻找当前player,每隔2秒发射一颗定向导弹

    7. 声音和特效
    导入音效文件和特效文件
    新建一个FX文件夹->Import Package->Custom Package->*.unitypackage文件
    也可以把本工程的特效声音文件导出为unitypackage文件给其他游戏使用

    (1).声音播放
    播放声音需要添加Audio Source组件,Add Component->Audio->Audio Source
     
    代码中定义
    将声音文件与m_shootClip绑定(U3D窗口拖放即可完成绑定)

    Start中初始化Audio

    调用Play相关函数即可播放声音
     
    (2). 特效
    特效的操作和声音比较相似,定义一个Transform

     
     U3D中将特效文件和该定义字段绑定
     
    调用Instantiate函数播放爆炸特效
     

    8. 敌人生成器
     我们可以定义一些空的GameObject来源源不断的产生敌人,道理和主角发子弹一样
    把空的GameObject发射指定逻辑的敌人

    创建2个prefabs,绑定不同的敌人,将prefab分布到场景的指定地点出怪即可
     
    同时用代码控制出怪逻辑,5~10秒随机生成敌人
     

    9. 游戏管理器
    游戏信息的展示,也是在场景里面和一个空的GameObject绑定,执行相关的代码

    10. 新场景的建立(游戏向导)
    File->New Scene->保存为start

    添加一个空gameobject->添加一个组件GUI Texture->指定一张图片
    将摄像机对准图片对象

    编写代码,通过LoadLevel可以载入其他场景
     
    11. 发布游戏
    Edit->project Setting->Player设置发布的图标,公司,产品名称等信息
     
    设置游戏分辨率相关信息
     
    File->Build Setting即可发布游戏, 启动游戏后程序会按列表顺便播放相应的场景
     
    游戏运行效果
     




     




  • 相关阅读:
    简单查询plan
    EXP AND IMP
    (4.16)sql server迁移DB文件(同一DB内)
    sql server日志传送实践(基于server 2008 R2)
    (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构、SQL查询流程)
    (1.2)学习笔记之mysql体系结构(数据库文件)
    (1.1)学习笔记之mysql体系结构(内存、进程、线程)
    SSAS(SQL Server 分析服务)、***S(SQL Server报表服务)、SSIS(SQL Server集成服务)
    教你使用SQL查询(1-12)
    Sql Server内置函数实现MD5加密
  • 原文地址:https://www.cnblogs.com/bingghost/p/5922594.html
Copyright © 2011-2022 走看看