简单打飞碟游戏

原创 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)—— 飞碟射击游戏

游戏规则:          游戏分多个回合,每个回合有N个飞碟,玩家按空格后,321倒数3秒,飞碟飞出,点击鼠标,子弹飞出。飞碟落地或被击中,则准备下一次射击。每回合飞碟的大小、颜色、发射位置、发射...
  • Simba_Scorpio
  • Simba_Scorpio
  • 2016年04月03日 20:43
  • 3387

ActionScript 3.0 学习(十二) AS3 模拟打地鼠小游戏

有问题请联系qq:1031885567,注明csdn加好友。          本节做了一个模拟打地鼠小游戏,可以学习其中将各个方格用统一的类来管理,同时需要注意的是在将子原件移除掉时,也相应需要将...
  • BoRenLiang
  • BoRenLiang
  • 2015年10月20日 09:08
  • 1939

[JAVA]简单的打字母游戏

import java.awt.*; import java.awt.event.*; public class MyGame { public static void main(String ar...
  • u014786849
  • u014786849
  • 2014年04月20日 20:33
  • 1622

简单打开和保存txt文件

最近学习Stream类型,练习打开和保存TXT文件。 首先要明白流概念,学过C++的应该清楚,这里就不多说了【其实我也不知道如何解释】。 Stream类有很多子类,包括: FileStream类...
  • linkunhao123
  • linkunhao123
  • 2015年12月21日 18:59
  • 179

一个极简游戏创意

极简游戏创意方案
  • BlueCloudMatrix
  • BlueCloudMatrix
  • 2014年12月03日 23:27
  • 1408

打飞碟游戏

今天我们做一个简单的飞碟游戏有了上一章点击地面出现攻击目标而引出的单例模式,这一次的游戏可以很好设计出来。这个游戏中的主要角色有 飞碟:最基本的要素,就是一个ganmeobject 游戏场景:作为游戏...
  • WSQPoison
  • WSQPoison
  • 2017年03月24日 22:44
  • 264

飞碟游戏-序列化

一、序列化         什么是序列化呢?序列化就是把一个内存对象变为与地址无关的可传输的数据格式,通常是文本格式;反序列化反之。更通俗一点说,就是把游戏运行时保存在内存中的对象或数据输出为文本,...
  • pnxldzw
  • pnxldzw
  • 2016年05月30日 13:51
  • 224

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

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

HTML+js写的简单的打地鼠游戏,还有待完善

HTML代码: 游戏 *{ margin:0px; padding:0px; border:0px;} /*start navi*/ .navi{ width:...
  • wangkaiyuan110
  • wangkaiyuan110
  • 2015年08月20日 17:58
  • 2233

Inno setup 简单打exe包教程

前段时间关注了VC6.0自带的Installshield打包的使用方法,感觉繁琐,现在找到一个比较简单实用的打包小工具Inno setup,使用方法如下。 (1)将编写好的程序生成Release...
  • zhousenshan
  • zhousenshan
  • 2017年05月28日 15:13
  • 352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单打飞碟游戏
举报原因:
原因补充:

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