【第22期】观点:IT 行业加班,到底有没有价值?

简单打飞碟游戏

原创 2016年05月30日 15:36:03

一、鼠标点击小游戏

        在写简单飞碟游戏之前,先写一个鼠标点击的小游戏热热身:游戏场景中会随机出现小圆圈,鼠标点击后,圆圈3秒后自动消失。

     (1).  首先,创建Terrain, 并标记为Finish;创建Cylinder并设置其大小,将其拉到Assert/Resources/Prefabs下,再在Prfabs下创建meterial并设置颜色,将meterial拖到Cylinder中,删除层次块中的Cylinder。

     (2).  编写代码。

          ① 编写简单工厂类。单例模式,并且有两个list, 一个存放未被使用的圆盘,一个存放被使用的圆盘,静态变量aid用来初始化

          需要的更多的圆盘。

         

          工厂核心函数为placeAttackMark(Vector3 position),当鼠标点击时,将圆盘移动到点击位置,然后添加disappear组件,让圆

          盘自动消失。

         

          ② 编写disappear类。

          当两秒过后,将挂载了本组件的物体添加到unused列表中,并从used列表删除;将此物体移动到视觉外的位置并删除其挂载

          的disappear组件,防止其一直执行组件中的函数。

         

          ③ 编写Attack类。

          检测到用户的鼠标点击后,获取点击在世界坐标中的位置然后将圆盘移动到该位置,2秒后自动消失。其中,要将Terrian的

          layer改为Water。LayerMask layer = 1 <<LayerMask.NameToLayer("Water");的意思就是射线发射时只检测在Water层中物

          体,只与water层中的物体碰撞。

          

     (3). 将上述类放在Attack.cs文件中并挂载到主摄像机上。注意此时主摄像机有一个可以设置的变量Aid,将预设中的Cylinder

           拖到此处即可。运行,尽情享受吧。

二、简单飞碟游戏

        (1). 创建Terrian;创建Cylinder并设置其大小(10,0.1, 10),将其拉到Assert/Resources/Prefabs下,设置标签为Finish, 往后的代码需要用到这个标签,删除层次块中的Cylinder。调整摄像机(0, 175, 0)、Terrain(0, 15, 0),大小为(29, 1, 30)。

      (2). 编写BaseCode.cs。

      其命名空间Mygame中包含Factory类工厂,工厂能控制飞碟的移动,让飞碟消失,即回收飞碟;包含disappear组件,飞碟加载这个组件后自动消失;包含autodisappear组件,当飞碟到达某位置后自动消失,位置可自由设置。

      ① Factory类。

      变量的用途,根据变量名即可知道;简单的获取实例的函数。

     

     

      通过添加组件控制飞盘的消失:

     

      接下来是工厂的核心类:ApplyUFO(int)。当未使用的飞盘队列还储存有飞盘时,取出来,根据游戏的关卡,给飞盘不同的属

      性和动作。每个飞盘都需要AutoDisappear组件和Rigibody组件。

     

      第一关:速度较小,黄色的飞盘,向下抛。

     

      第二关:速度较大,蓝色,飞盘抛出方向随机。

     

      第三关:速度大而且随机,抛出位置有两个,抛出方向随机,黑色。

     

      ② Disappear类。

      对两个list进行适当操作,去除要消失的飞盘的相关组件。

     

      ③ AutoDisappear类。

      同Disappear类似,但加上消失的条件。

     

     (3). 编写GenGameObject.cs

     用于生成n个飞碟并放在unusedlist里面,以供使用。

     注意当代码挂载到相机上后,要将Prefabs中的飞盘挂载到相机的GenGameObject组件的UFO上,这样才能Instantiate。同时记得设置N的大小,即每次存到队列中的飞盘个数。

    

     (4). 编写UserInterface.cs类

     在界面布置相关按钮,并检测鼠标点击,当鼠标点击到飞盘时,飞盘消失,分数增加;

     并控制一定时间间隔后才能抛出一个飞盘。

    

     点击时用射线检测,射线从摄像机发射,射到鼠标点击的屏幕位置在3d中的坐标,碰撞到物体的具体信息存储在hit中,并检测碰撞到的是不是飞盘,是的话,添加相关动作。此处用到上面的Finish标签。

    

      这样,简单飞碟游戏就写完了。刚开始游戏是注意选择关卡。这是最初是的飞碟游戏版本,虽然很low但刚开始时能做出来还是很开心的。下面附有代码:

    

     负责任链接








版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Unity3D学习笔记(6)-- 打飞碟游戏改进版

一.简要说明 这是上一次打飞碟游戏的改进版本,这次和上次的版本有小些差异,在功能上主要添加了一个物理运动的模块,以下来讲讲这些改动。 二.游戏效果图 三.UML图 先上一张UML图 Physi...
  • x2_yt
  • x2_yt
  • 2017-04-03 21:37
  • 147

Unity3D 从入门到放弃(四)----打飞碟

Unity3D 从入门到放弃(五)—–打飞碟填坑计划的万恶之源 写在开头: 本来感觉应该是不会写博客的,而且也不是很擅长写 博客。但在后来,突然醒悟到,博客这个东西,实际上并不是给别人看的(...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

游戏编程入门(16):教游戏思考

开发真正吸引人的游戏经常涉及在计算机的范畴内有效地模拟人类的思想。 本文重点介绍人工智能的基础理论以及如何将其应用在游戏中,最后将介绍一个例子,说明如何将简单的人工智能结合到游戏中。 本文内容: 人工...
  • Jurbo
  • Jurbo
  • 2017-07-05 22:28
  • 468

Flash游戏制作--打飞碟

射击类游戏不仅在各种平台的游戏中占有重要地位,在Flash游戏中也占有数量上的绝对优势,不少朋友喜欢将学习Flash射击游戏的制作作为学习Flash游戏制作的开始,又因为射击游戏可根据作者自己水平的不同,可难可易,较易掌握,所以Flash射击游戏的制作成为Flash游戏的一大热点,这次我们就来学习一...

1500个javascript特效

16进制时间显示 <a target="_blank" href="http://www.codesky.net/article/201109/120

关于Unity游戏的序列化

上课的时候讲到了用Unity制作游戏的序列化, 那么什么是序列化呢? 序列化就是将游戏里面的数据写进文件里, 包括角色的生命, 攻击, 防御等等. 这样当游戏需要调整时 (比如平衡性问题),...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)