Unity经典游戏教程之:是男人就下100层
版权声明:
- 本文原创发布于博客园"优梦创客"的博客空间(网址:
http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客"(微信号:unitymaker) - 您可以自由转载,但必须加入完整的版权声明!
是男人就下一百层
一、游戏介绍
是男人就下100层这是一个很受欢迎的小游戏。设计者所取的游戏名称以及它特有的挑战性令几乎所有的男同胞们都一如既往的去暴机,这个游戏同样也吸引了广大的女性,相当有挑战性。
- 中文名 是男人就下100层
- 原版名称 man down
- 游戏类型 休闲游戏
使用方向键左右控制小人,要防止被托上去挤死,防止掉下去摔死以及防止踩到陷阱。
二、场景搭建
- 导入游戏资源,确保Sprites文件夹里的资源的Texture Type为Sprite

- 打开Sprite Mode的Sprite Editor,对图片进行切割,点击Apply进行保存。


- 将云彩(cloud、darkcloud)、背景图(game background)拖进场景,其中背景图为背景(Background),其他作为前景(Foreground)。



三、主角设置
1.拖入主角
将主角拖入场景之中并将其命名为Player,将主角Player设置在Foreground前景层。

2.主角动画
打开动画控制器,创建主角的动画walk动画和Idel动画。把主角图片拖到时间轴上其中walk动画每0.01秒一张。Idel动画只需要拖一张。


3.主角移动的实现
- 给主角添加刚体(Rigidbody 2D)、添加碰撞器(box Collider 2D)

给主角添加脚本Player。给角色设置一个最大速度maxSpeed。设置一个力量force。保存Rigidbody 2D
通过Horizontal取得水平上的按键0=什么也没按。1=右键。2=左键.public float MaxSpeed = 4;
public float Force = 4;
public Rigidbody2D mybody;void PlayerMove()
{
var x = Input.GetAxis("Horizontal"); var xforce = 0.0f; if(x > 0)
{
xforce = Force*x;
myAnimator.SetBool("walk", true);
this.gameObject.transform.localScale = new Vector3(1, 1, 1);
}
else if(x < 0)
{
xforce = Force*x;
myAnimator.SetBool("walk", true);
this.gameObject.transform.localScale = new Vector3(-1, 1, 1);
}
else
{
xforce = 0;
myAnimator.SetBool("walk", false);
} var xspeed = mybody.velocity.x;
if(Mathf.Abs(xspeed) >= MaxSpeed) {
if(xforce * xspeed > 0) {
xforce = 0;
}
} mybody.AddForce(new Vector2(xforce, 0));
}
四、云彩设置
1.将云彩拖入场景
将云彩拖入场景之中并将其命名为cloud和darkcloud将云彩cloud和darkcloud设置在Background背景层。

2.设置云彩的生成
给云彩添加碰撞体Box Collider 2D,添加脚本CloudSpawn,建立cloud预制体和主角预制体player_0。将预制体Cloud和player_0拖入,Cloud 、player中。确保min x、max x、Distance Y、LastCloud Y的值。

void CreateClouds()
{
var worldSize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0));
var worldSize2 = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0));
minX = worldSize2.x + 1f;
maxX = worldSize.x - 1f;
lastCloudY = 0;
for (var i = 0; i < clouds.Count; i++)
{
var cloud = clouds [i];
Vector3 pos;
float x = 0;
if (controlCloud == 0)
{
x = Random.Range(0, maxX);
controlCloud = 1;
}
else if (controlCloud == 1)
{
x = Random.Range(minX, 0);
controlCloud = 2;
}
else if (controlCloud == 2)
{
x = Random.Range(1, maxX);
controlCloud = 3;
}
else if (controlCloud == 3)
{
x = Random.Range(minX, -1);
controlCloud = 0;
}
pos = new Vector3(x, lastCloudY, 0);
cloud.transform.localPosition = pos;
lastCloudY -= distanceY;
}
}
3.设置云彩的特殊功能
设置游戏角色player碰到darkCloud就会死亡

五、设置背景的滚动
游戏背景需要不断滚动,先把游戏背景图片再复制两份再把复制的背景拼接好注意不要留缝隙,再给图片添加碰撞体(Box Collider 2D)和脚本BG Scaler


void Start () {
SpriteRenderer sp = this.gameObject.GetComponent<SpriteRenderer>();
float width = sp.bounds.size.x;
float swidth = Screen.width;
float sheight = Screen.height;
Debug.Log(swidth+" : "+sheight);
float sz = Camera.main.orthographicSize;
float sc = sheight/swidth;
float cameraHeight = sz*2;
float cameraWidth = cameraHeight/(sc);
float spriteScale = cameraWidth/width;
this.transform.localScale = new Vector3(spriteScale, 2, 0);
}
五、角色死亡
设置游戏角色player碰到darkcloud就死亡和碰到游戏上下bound死亡。
if (other.gameObject.tag == "darkCloud")
{
var cs = Camera.main.GetComponent<CameraScript> ();
cs.enabled = false;
transform.localPosition = new Vector3 (1000, 1000, 0);
//GameController.Instance.ShowGameOver (score, CoinCount);
AudioSource.PlayClipAtPoint(dealSound, transform.position);
LifeCount--;
GameManager.Instance.CheckGameState (LifeCount, CoinCount, score);
}
else if (other.gameObject.tag == "bound")
{
var cs = Camera.main.GetComponent<CameraScript>();
cs.enabled = false;
transform.localPosition = new Vector3(1000, 1000, 0);
//GameController.Instance.ShowGameOver(score, CoinCount);
AudioSource.PlayClipAtPoint(dealSound, transform.position);
LifeCount--;
GameManager.Instance.CheckGameState(LifeCount, CoinCount, score);
}
六、背景音乐
先新建一个空节点命名为Music,在文件夹中找到音乐天空之城将其拉入Music选择循环播放(Loop),适当选择音量(Volime)。


七、扩展方向
- 增加血量扣血
- 增加道具吃道具加分
- 添加敌人
- 当层数越来越多时候速度越来越快
Unity经典游戏教程之:是男人就下100层的更多相关文章
- Unity经典游戏教程之:雪人兄弟
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- Unity经典游戏教程之:贪吃蛇
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- Unity经典游戏教程之:冒险岛
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- Unity经典游戏教程之:合金弹头
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- Unity经典游戏教程之:弓之骑士
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- HTML5游戏开发_是男人就下100层
项目流程 市场调研(可行性分析)--> 可行性报告书 需求分析师.客户经理 需求分析--> 需求说明书 项目经理.需求分析师 概要设计--> 概要设计说明书(ER图, UML) ...
- 超多经典 canvas 实例,动态离子背景、移动炫彩小球、贪吃蛇、坦克大战、是男人就下100层、心形文字等等等
超多经典 canvas 实例 普及:<canvas> 元素用于在网页上绘制图形.这是一个图形容器,您可以控制其每一像素,必须使用脚本来绘制图形. 注意:IE 8 以及更早的版本不支持 &l ...
- 是男人就下100层【第四层】——Crazy贪吃蛇(2)
在上一篇<是男人就下100层[第四层]--Crazy贪吃蛇(1)>中我们让贪吃蛇移动了起来,接下来我们来实现让贪吃蛇能够绕着手机屏幕边线移动而且能够改变方向 一.加入状态并改动代码 首先我 ...
- 是男人就下100层【第四层】——Crazy贪吃蛇(3)
上一篇<是男人就下100层[第四层]--Crazy贪吃蛇(2)>实现了贪吃蛇绕着屏幕四周移动,这一篇我们来完成贪吃蛇的所有功能. 一.随机产生苹果 private void addAppl ...
随机推荐
- 学习体验centos7 下根目录扩容操作(步骤详细!!!)
转自 苗尼玛乔 感谢你!
- Linux 安装Nginx与使用
最近继续整理Linux相关文档.这次整理的是Nginx,这里将自己整理的详细文档做个笔记. 1. 安装环境依赖包 1. gcc 语言编译器套件. 2. pcre 兼容正则表达式的库 rewrite ...
- [Qt]自定义表头实现过滤功能
1. 写在前面 过滤功能源自项目上交互优化用户体验,在表头添加过滤符号实现过滤,替换以往在表格上方占用一行过滤项进行过滤. 2. 过滤提示 过滤提示就是三态图标(normal,hover,press) ...
- smobiler介绍(二)
类似开发WinForm的方式,使用C#开发Android和IOS的移动应用?听起来感觉不可思议,那么Smobiler平台到底是如何实现的呢,这里给大家介绍一下. 客户端 Smobiler分为两种客户端 ...
- 趣解 ceph rgw multisite data sync 机制
multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...
- Java的一些基础知识,现在回顾一下,毕竟学了那么久!
一.基础知识:1.什么是JVM.JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性,java语言是跨平台,jvm不是跨平台的,jv ...
- MySQL metalock的一些技巧(写大于读的案例,以及获得锁的顺序)
前言:元数据锁不是锁定数据,而是锁定描述数据的元数据信息.就像很多装修工人(工作线程)在室内(对象上)装修(操作),不能有其他工人(线程)把屋子拆了(表删除了). MySQL 为了数据一致性使用元数据 ...
- Spring Bean 生命周期之destroy——终极信仰
上一篇文章 Spring Bean 生命周期之我从哪里来 说明了我是谁? 和 我从哪里来? 的两大哲学问题,今天我们要讨论一下终极哲学我要到哪里去? 初始化 Spring Bean 有三种方式: @P ...
- 微信开发:微信js_sdk分享,使用场景,网页在微信app内部分享时的标题与描述,包括logo设置(一)
主要有下面几步.首先大家先分清楚 小程序的appid,appSecret 跟公众号的appid,appSecret是不一样的.因为这两个都能拿到token,且是不同的值. 准备开始: 1.准备好 公众 ...
- 理解vue-loader
事情的起源是被人问到,一个以.vue结尾的文件,是如何被编译然后运行在浏览器中的?突然发现,对这一块模糊的很,而且看mpvue的文档,甚至小程序之类的都是实现了自己的loader,所以十分必要抽时间去 ...