需要源码和资源文件请点赞关注收藏后评论区留言私信~~~

下面我们将在Unity3D中实现愤怒的小鸟的简单版,游戏中最复杂的部分是物理系统,但是借助于Unity3D编辑器,我们就不用担心太多了

一、效果展示

先展示程序运行效果如下

运行程序可以将小鸟弹射出去 并且可以显示运动轨迹 读者可以自行优化

二、程序目录结构

Hierarchy视图结构如下

Assets文件夹目录结构如下图所示

Scripts里面存放的C#脚本文件 结构如下图

Prefabs文件夹中存放的预制体 结构如下图

三、实现步骤

因为愤怒的小鸟是一个2D游戏,所以需要在新建项目时选择2D模板 然后将资源包导入项目中,里面包含图片等资源 如下图所示

摄像机设置

在Project视图中找到Scenes文件夹 然后找到level01.unity文件夹 双击打开 设置里面的背景颜色

地面设置

在Project视图中 找到Sprites文件夹内的ground.png文件 在Inspector视图中 导入设置 将Pixels Per Unit设置为16 然后单击apply按钮

tips:之后所以的图标都设置为16 这意味着16*16的像素时游戏世界中的一个单位,之所以选择16,是因为鸟的大小是16*16

现在地面只是图像 不是物理世界的一部分,事物不会与其相撞,也不会站在它的上面,所以我们需要添加一个碰撞器,让其具有物理特性 这样物体就可以站在地面上。在Inspector视图中 选择Add Component->Physics 2D->Box Collider 2D组件添加即可

边界设置

创建空对象 命名为borders  同样为他添加碰撞器 操作步骤如下面所述 并且勾选Is Trigger属性 并且为右边和上面添加边界 也要添加两个碰撞器

现在需要销毁任何进入边界的对象的功能 单击borders对象 在Inspector视图中 选择Add Component New Script命令,将脚本命名为Borders

云彩设置

把cloud.png拖入Scenes视图中 重复上一步 把云彩摆到你喜欢的位置即可

击打物设置

下面我们添加一些小鸟的击打物 比如木头 石头 冰之类的 拖到Scenes视图中 都要将Pixels Per Unit设置为16 同样要添加刚体属性 选择Add Component->Physics 2D-> Rigidbody 2D命令即可

弹弓设置

将slingshot.png文件拖入Scenes视图中 将Pivot设置为Top

设置鸟

设置鸟的物理特性 包括运动轨迹 碰撞等等 此处省略不表

敌人设置

我们将绿猪设置为敌人 可以进行击打  同样还要设置敌人的游戏逻辑

弹弓橡胶设置

我们还要为弹弓添加橡胶  这样更加美观真实

四、代码

部分代码如下 需要全部源码和资源文件请点赞关注收藏后评论区留言私信

1

using UnityEngine;public class Spawn : MonoBehaviour
{// 鸟的预制体public GameObject birdPrefab;// 鸟是否在触发区域bool occupied = false;void FixedUpdate(){// 鸟不在触发区域if (!occupied && !sceneMoving())spawnNext();}void spawnNext(){// 生成一只鸟Instantiate(birdPrefab, transform.position, Quaternion.identity);occupied = true;}void OnTriggerExit2D(Collider2D co){// 鸟离开触发区域occupied = false;}bool sceneMoving(){// 找到所有的鸟的刚体,看看是否还有仍然移动的Rigidbody2D[] bodies = FindObjectsOfType(typeof(Rigidbody2D)) as Rigidbody2D[];foreach (Rigidbody2D rb in bodies)if (rb.velocity.sqrMagnitude > 5)return true;return false;}
}

2

using UnityEngine;public class Rubber : MonoBehaviour
{//橡胶预制体public Transform leftRubber;public Transform rightRubber;//调整橡胶旋转和长度void adjustRubber(Transform bird, Transform rubber){// 橡胶的旋转变化Vector2 dir = rubber.position - bird.position;float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;rubber.rotation = Quaternion.AngleAxis(angle, Vector3.forward);// 橡胶的长度变化float dist = Vector3.Distance(bird.position, rubber.position);dist += bird.GetComponent<Collider2D>().bounds.extents.x;rubber.localScale = new Vector2(dist, 1);}//OnTriggerStay2D函数将通知我们鸟是否还在弹弓上void OnTriggerStay2D(Collider2D coll){// 弹弓的橡胶拉伸adjustRubber(coll.transform, leftRubber);adjustRubber(coll.transform, rightRubber);}//鸟离开时触发事件void OnTriggerExit2D(Collider2D coll){// 弹弓的橡胶设置为默认值leftRubber.localScale = new Vector2(0, 1);rightRubber.localScale = new Vector2(0, 1);}
}

3

using UnityEngine;public class PullAndRelease : MonoBehaviour
{// 鸟的默认位置Vector2 startPos;// 添加的力public float force = 1300;void Start(){startPos = transform.position;}//监听鼠标抬起事件void OnMouseUp(){// 禁用isKinematic,这样刚体就会再次受到重力和速度的影响GetComponent<Rigidbody2D>().isKinematic = false;// 添加力Vector2 dir = startPos - (Vector2)transform.position;GetComponent<Rigidbody2D>().AddForce(dir * force);// 销毁当前组件脚本Destroy(this);}//监听鼠标拖拽事件void OnMouseDrag(){//将鼠标位置转换为世界位置Vector2 p = Camera.main.ScreenToWorldPoint(Input.mousePosition);//设置最大半径float radius = 1.8f;Vector2 dir = p - startPos;if (dir.sqrMagnitude > radius)dir = dir.normalized * radius;//设置位置transform.position = startPos + dir;}
}

4

using UnityEngine;public class Trail : MonoBehaviour
{//轨迹的预制体public GameObject[] trails;//使用一个计时器变量用来记录当前生成的数组下标int next = 0;void Start(){//每100毫秒生成一条新路径对象InvokeRepeating("spawnTrail", 0.1f, 0.1f);}void spawnTrail(){//只要鸟的移动速度够快,才去刷出轨迹if (GetComponent<Rigidbody2D>().velocity.sqrMagnitude > 25){//实例化trails数组中next下标的对象Instantiate(trails[next], transform.position, Quaternion.identity);//next+1增加nextnext = next + 1;//next等于预制体数组最大值就从0开始if (next == trails.Length) next = 0;}}
}

创作不易 觉得有帮助请点赞关注收藏~~~

【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)相关推荐

  1. Python实现飞机大战-第二部分(附源码、素材、超详细教程)

    飞机大战第二部分 1.前言 2.飞机射击 2.1.添加子弹的相关设置 2.2.创建文件bullet.py 2.3.修改game_functions.py 2.4.修改mian.py 2.5.射击效果 ...

  2. 【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)

    需要源码和资源包请点赞关注收藏后评论区留言私信~~~ 下面我们用Unity 3D搭建一个飞机在跑道上喷火起飞的3D游戏案例,效果如下面的图片和视频所示 一.效果演示 视频如下 VR飞机 二.实现步骤 ...

  3. 【Android App】勾勒出三维立方体和球体以及它们的转动图形讲解及实战(附源码和演示视频 超详细)

    需要源码或运行有问题请点赞关注收藏后评论区留言~~~ 一.轮廓勾勒 勾勒三维物体轮廓线条的步骤如下: (1)调用glEnableClientState方法启用顶点开关 (2)调用glVertexPoi ...

  4. 【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)

    需要源码和资源包请点赞关注收藏后评论区留言私信~~~ 上一篇博客介绍了如何搭建飞机场景.制作了飞机引擎开启喷射火焰,并且让飞机起飞了参考链接如下 飞机场景搭建 一.效果展示 其中按空格可以控制后部引擎 ...

  5. 【Android App】利用腾讯地图获取地点信息和规划导航线路讲解及实战(附源码和演示视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言~~~ 一.获取地点信息 至于如何集成腾讯地图和调用腾讯地图接口此处不再赘述,有需要请参见我之前的博客 腾讯地图用来搜索POI地点的工具是TencentSearch, ...

  6. 【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 手机最开始用于通话,后来增加了短信功能,初步满足了人与人之间的沟通需求.然而短信只能发文字,于是出现了能够发图片的彩信,但不管短信还是彩信,资费都太贵 ...

  7. 【Android App】给三维魔方贴图以及旋转动画讲解和实战(附源码和演示视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.给三维物体贴图 除了位置坐标.颜色向量和矩阵向量,着色器还支持声明材质坐标和纹理采样器. 其中材质坐标表示物体表面摊平后的二维空间,纹理采样器表示采用 ...

  8. 【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码 ...

  9. 【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 与传统的影视行业相比,诞生于移动互联网时代的短视频是个全新行业,它制作方便又容易传播,一出现就成为大街小巷的时髦潮流. 各行各业的人们均可通过短视频展 ...

最新文章

  1. (chap6 Http首部) 请求首部字段 Max-ForwardsProxy-Authorization Range
  2. 栈——用链表实现栈操作
  3. jQuery 1.4官方文档中文版
  4. 20181121用户、组的基本概念
  5. Web服务软件工厂(WSSF)演练之三:创建服务契约和实现方法
  6. 算法总结之 生成窗口的最大值数组
  7. linux 文件字典排序,linux - 强制linux排序使用字典顺序 - 堆栈内存溢出
  8. 4.1 编程语言的几个发展阶段
  9. 新人开车——访问控制
  10. JavaScript常用算法 1
  11. Can‘t exec “autopoint“: 没有那个文件或目录 at /usr/share/autoconf/Autom4te/FileUtils.pm line 345.
  12. 降维系列之 LTSA 局部切空间排列
  13. 计算机开机提示dll,电脑开机提示找不到iertutil.dll的解决妙招
  14. 数字孪生--thingjs
  15. 解决微擎人人商城分销中心无法生成推广二维码、商品二维码的问题
  16. android 没有指南针,Android指南针指向我的位置,而不是北部
  17. C# 计算指定年月的当月工作日方法
  18. 软著申请材料,软著申请文件,软著登记材料,软著登记文件
  19. 生活品质-断舍离Day4
  20. C#小游戏--飞行棋

热门文章

  1. 本科计算机在北京混得下去吗,在北京混下去必须经历的八个阶段
  2. 吐血整理————当代程序员必备的神器大全
  3. Three.js 3D建模必备基础
  4. python实现翻译功能_Python实现翻译功能
  5. Linux 实现鼠标侧边键实现代码与网页的前进、后退
  6. 前缀表达式、中缀表达式、后缀表达式
  7. 将百分比和数值一起在饼图中显示
  8. 2018年1月21日
  9. MFC窗口程序exc和回车关闭窗口解决办法
  10. 灰度直方图均衡化后+Otsu算法