制作思路


  1. 搭建打地鼠游戏场景
  2. 新建游戏交互对象“地鼠”
  3. 设置游戏规则:

“地鼠”被打到时(受到鼠标点击)消失

同时在原有“地鼠”位置出现新对象“死地鼠”并在规定时间内消失

未受到点击的“地鼠”在指定时间内自动消失

“地鼠”能在相同时间间隔内随机产生

  1. 添加游戏相关的音乐和音效

制作步骤


搭建打地鼠游戏场景

  1. 搭建2D场景
  2. 确认相机参数Projection的选项为Orithographic
  3. 新建文件夹Sprites用来存放图片素材,并导入背景素材
    (这里导入的背景图片可以自行在网上搜索,由一个大的背景图片.jpg(ground)和一个有α通道的地鼠洞图片.png(hole)组成)
  4. 对两个素材进行相关的调整:
    选中图片,打开inspector面板,参数如下图所示
    Texture Type:Sprite(2D and UI)
    Sprite Mode:Single
    Pixels Per Unit:100 【每个像素点个数为100】
    关掉【自动生成小地图】的选项Generate Mip Map(一般情况下为未勾选状态)
  5. 将背景图片ground拖拽进窗口,根据背景图片的大小修改Game窗口分辨率为新增分辨率,并用Scale调整大小
    调整摄像机大小Size(可以使用鼠标拖拽调整或者用公式【高度除以2除以每单位像素数100调整数值修改)
  6. 将hole也拖拽进屏幕,调整位置,新建空物体Map做容器放置ground和hole
    注意此处要确保他们的参数Order in layer 层级关系:hole为1层,ground为0层
    使得hole放置在ground上面而不至于被遮挡不可见

    保存场景

Ps:此处有一些出入。如果我们有相匹配的“地鼠”的3D模型和材质,可以使用3D模型制作。不过由于我没有找到相关的素材,而恰巧我们此次制作为2D游戏,所以可以采取给图片即2D对象添加碰撞器的做法,如下。

  1. 将“地鼠”素材图片.png导入,拖拽入Scene面板,重置,并给它添加一个box 2D的碰撞器。
    同理制作对象“死地鼠”,并将该对象拖拽为预制体。
    如果光线较暗的话可以添加Directional light平行光
    摄影机设置Clear Flags项选项为Solid Color,颜色改为黑色,如图所示。
  2. 创建脚本S1,代码如下
void OnMouseDown() {Destroy(gameObject);  //点击销毁对象“地鼠”}

使对象“地鼠”在受到鼠标点击时自动销毁
将脚本加到对象“地鼠”上

  1. 继续编写S1脚本,实现点击“地鼠”后,“地鼠”变为“死地鼠”的效果
    首先定义预制体“死地鼠”对象
public GameObject
m_prefab2;   //引用“死地鼠”对象

然后在销毁对象“地鼠”前实例化对象“死地鼠”

Instantiate(m_prefab2,
transform.position, Quaternion.identity); //实例化生成 “死地鼠”,位置为当前【点击“地鼠”】的原位置,旋转角度为任意值

注意:要先生成,再销毁。因为在逻辑上来讲如果对象已经被销毁而不存在,那么所在位置则有可能出现错误。
注意脚本写好以后将“死地鼠”的预制体拖拽给“地鼠”对象身上的脚本S1的m_prefab2

  1. 新建S2脚本给“死地鼠”,(也可以直接Add Component脚本S2取代拖拽)
void Start () {Destroy(gameObject, 0.5f);     }

使对象“死地鼠”在出现0.5秒以后自动销毁

同理可以应用在S1脚本中,使对象“地鼠”在始终没有受到点击时出现3秒后自动销毁
保存场景

  1. 新建空物体命名为GreateTarget,并给他添加脚本CreateTarget,实现对象的自动随机生成,代码如下
public GameObject
m_Target;    //引用对象“地鼠”

InvokeRepeating函数可以在制定间隔调用指定函数,实现Create函数的重复调用,即实现“地鼠”对象的重复生成

   void Start() {InvokeRepeating("Create", 0, 1);//该调用函数为Create,等待时间为0(密集运行),间隔为1s//每指定间隔调用生成一次函数        }

Create函数实现地鼠的实例化生成以及随机出现

首先定义位置变量pos,然后产生随机的id值,再使用if函数根据随机产生的id值确定pos的值即对象实例化的位置,最后Instantiate函数进行对象的实例化

void Create() {Vector3 pos = Vector3.zero;   //初始化建立位置变量int id= 0;id = Random.Range(1,10);  //在1~9的9个数中随机产生一个数值if (id== 1)pos = new Vector3(0, 0, 0);if (id== 2)pos = new Vector3(2, 0, 0);if (id== 3)pos = new Vector3(-2, 0, 0);if (id== 4)pos = new Vector3(0, 1, 0);if (id== 5)pos = new Vector3(2, 1, 0);if (id== 6)pos = new Vector3(-2, 1, 0);if (id== 7)pos = new Vector3(0, -1, 0);if (id== 8)pos = new Vector3(2, -1, 0);if (id== 9)pos = new Vector3(-2, -1, 0);Instantiate(m_Target, pos, Quaternion.identity); //实例化对象}
  1. 此时功能基本实现完全,最后给两个对象添加Audio Source组件,导入出现和击中地鼠的音效并对应添加音效
  2. 运行游戏,对时间间隔等数值进行适当的调整,并保存工程

出现的问题及解决方法


  1. “地鼠”对象模型问题。因为没有现成的地鼠模型,如果直接把贴图贴给3d cube的话形状不匹配而且是倒着的

解决过程:但我想到之前讲到的3D对象和2D对象的不同在于2D对象需要手动添加碰撞器。而此次游戏刚好是一个2D游戏,所以我猜想如果给2D的图片添加碰撞器是否可以在游戏中实现需要的对象效果。尝试成功。

  1. 但是2D的“地鼠”对象偶尔会出现“隐身”的情况,只能看到边框而看不到图片内容。

解决过程:我搜索了2D对象看不到的原因,但是没有找到解决办法。无奈之下我删除原来制作好的对象并重新导入图片做了一遍,对象就又是可见的了。我猜想这可能是因为软件的稳定性等等原因造成的。


收获


  1. 学到了平面图形可以添加碰撞器,从而在2D游戏中达到和3D对象同样的效果
  2. 学习了一个新的函数InvokeRepeating(“函数名”,等待时间,调用时间间隔),可以在每指定时间间隔调用生成一次函数。
    之前学习unity3D时有学过一个类似功能的函数叫携程函数,不过实现的功能更加全面,可以设置多个时间间隔,从而体现出关卡的效果。
  3. 第一次接触到设置对象自动销毁时间的方法,Destory(gameObject,销毁时间)。
    就是不知道这些用在Unity2D游戏里的函数能不能同样在Unity3D游戏中使用,不过理论上应该是可以的。
  4. 学习到制作一个游戏的过程是把每一个想要实现的功能细化到最小的指令,然后用代码一一对应实现。

Unity学习笔记------用Unity2D制作打地鼠游戏相关推荐

  1. Unity学习笔记(7) Unity2D骨骼动画制作流程

    用骨骼动画最大的好处就是方便之后做换装系统. 无论对3Dor2D游戏都是这样的. 这篇博文记录一下2D骨骼动画的制作流程,参考b站麦扣的系列教程: https://space.bilibili.com ...

  2. Qt学习笔记-基于QGraphicsScene的打地鼠游戏

    运行截图如下: 源码工程下载地址: https://download.csdn.net/download/qq78442761/10366473 这里有几个关键点: 当继承QGraphicsScene ...

  3. 【Unity学习笔记】第一人称射击游戏

    1.新建一个地面Plan. 2.搭建好Player模型.把枪的模型拖入,调整好角度.由于是第一人称游戏.把camera也拖入Player下. 3.编写playerMove脚本,实现asdw控制人物的前 ...

  4. 【unity学习笔记】第一人称射击游戏(2)

    这篇博客主要记录一下敌人自动寻路以及点击地面移动的相关知识点 简单的自动寻路功能,新增了可以去多个位置巡逻 using System.Collections; using System.Collect ...

  5. Unity学习笔记1 简易2D横版RPG游戏制作(一)

    这个教程是参考一个YouTube上面的教程做的,原作者的教程做得比较简单,我先参考着做一遍,毕竟我也只是个初学者,还没办法完全自制哈哈.不过我之前也看过一个2D平台游戏的系列教程了,以后会整合起来,做 ...

  6. Unity学习笔记—二次元日系游戏制作(实践篇-游戏初始化场景制作)

    原教程:siki:二次元日系游戏制作工具 - live2dSDK入门教程 http://www.sikiedu.com/my/course/282 (上)Unity学习笔记-二次元日系游戏制作(理论篇 ...

  7. [Unity学习笔记:FPS游戏制作(3)]子弹拖尾,碰撞与枪口火焰效果

    往期博客[Unity学习笔记:FPS游戏制作(2)] 发射子弹----(2021.6.20学习笔记) 文章目录 一,实现思路 二,粒子效果的实现 (1)子弹拖尾特效的实现 (2)枪口火焰特效的实现 ( ...

  8. unity学习笔记2-卡牌游戏的制作

    unity学习笔记2 需求:制作卡牌游戏 第一步,建立card类,carddatabase类 card类删除自带的start和update方法,因为只是个对象类,负责装载对象即可 carddataba ...

  9. [Unity学习笔记:FPS游戏制作(2)] 发射子弹————(2021.6.20学习笔记)

    往期博客 [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升----(2021.6.13学习笔记) 文章目录 一,实现思路 二,实现代码 三,脚本的使用方法 四,最终效果 一,实现 ...

  10. [Unity学习笔记]2D游戏中的触碰/OnMouseDown

    [Unity学习笔记]2D游戏中的触碰/OnMouseDown 这种情况多用于2D游戏的触屏 1.给2D游戏对象加上collider 2D,让其能够被检测到

最新文章

  1. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
  2. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
  3. deepfake 图片_DeepFake克星来了!简单2步算法,造假图像无处可逃
  4. 【python】踩坑:ImportError: numpy.core.multiarray failed to import
  5. Mac字体管理工具: RightFont
  6. xilinx spartan-3a iob
  7. Linux 编译安装 openssl库
  8. python任务栏都隐藏了_请问如何始终隐藏WINDOWS任务栏?
  9. 12.5-使用Qt实现跨平台C++崩溃捕获,看这一篇就足够了(Breakpad)
  10. 计算机网络 8 报文交换和分组交换2
  11. 如何直观形象的理解方向导数与梯度以及它们之间的关系?
  12. 三阶魔方大中小魔公式_三阶魔方花样玩法,公式汇总
  13. 猿创征文|人工智能啾养成之路 - 写代码三天,CSDN治好了我的精神内耗
  14. 基于微信小程序音乐播放器的设计与实现毕业设计源码271156
  15. Java Online IDE
  16. 数据结构之栈,栈是很多算法的基础知识,本文带你从0开始了解栈并手写一个栈
  17. java获取机器的IP
  18. UVa 1025 (DAG 上的动态规划,有固定终点的最短时间,逆推法)
  19. linux kernel -- oops场景奈何桥
  20. 手工皮具-不可避免的进入染色过程

热门文章

  1. 关于PX像素、PT点数、CM厘米、MM毫米之间的换算
  2. Puppet自动化Nginx+Mongrel负载均衡配置
  3. 基于Java的俄罗斯方块游戏的设计与实现(含源文件)
  4. 笔记本能连上wifi 但是浏览器打不开,使用手机的热点却可以正常上网的问题?
  5. 使用计算机拍摄 制作电视和电影,视频制作毕业论文: 影视制作
  6. 北京最好的商标律师解析商标侵权的处罚规定
  7. 机器学习这10年我们能在各自的领域做点什么?
  8. Echarts16 ---散点图-趋势图
  9. 16部趣味数学纪录片
  10. 网线水晶头 RJ45 接法