版本记录
版本号 | 时间 |
---|---|
V1.0 | 2019.01.31 星期四 |
前言
Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。网页游戏 坦克英雄和手机游戏王者荣耀都是基于它的开发。
下面我们就一起开启Unity之旅。感兴趣的看下面几篇文章。
1. Unity开启篇(一) —— Unity界面及创建第一个简单的游戏 (一)
2. Unity开启篇(二) —— Unity界面及创建第一个简单的游戏 (二)
3. Unity开启篇(三) —— 一款简单射击游戏示例 (一)
4. Unity开启篇(四) —— 一款简单射击游戏示例 (二)
5. Unity开启篇(五) —— 一款简单射击游戏示例 (三)
6. Unity开启篇(六) —— Unity动画简介 (一)
7. Unity开启篇(七) —— Unity动画简介 (二)
8. Unity开启篇(八) —— Unity声音简介(一)
9. Unity开启篇(九) —— Unity声音简介(二)
10. Unity开启篇(十) —— Unity粒子系统简介(一)
11. Unity开启篇(十一) —— Unity粒子系统简介(二)
12. Unity开启篇(十二) —— Unity脚本简介(一)
13. Unity开启篇(十三) —— Unity脚本简介(二)
14. Unity开启篇(十四) —— Unity UI简介(一)
15. Unity开启篇(十五) —— Unity UI简介(二)
16. Unity开启篇(十六) —— Unity UI简介(三)
17. Unity开启篇(十七) —— Unity UI简介(四)
18. Unity开启篇(十八) —— Unity UI简介(五)
19. Unity开启篇(十九) —— Unity UI简介(六)
20. Unity开启篇(二十) —— 如何使用Unity制作像Bomberman一样的游戏(一)
Chain Reactions
当一枚炸弹的爆炸触及另一枚炸弹时,下一枚炸弹应该爆炸 - 这个特征会带来更具战略性,刺激性和火力的游戏。
幸运的是,这很容易实现。
在代码编辑器中打开Bomb.cs
脚本。 在CreateExplosions()
下面添加一个名为OnTriggerEnter
的新方法:
public void OnTriggerEnter(Collider other)
{
}
OnTriggerEnter
是MonoBehaviour
中预定义的方法,在触发器碰撞器和刚体撞击时调用。 名为other
的Collider
参数是进入触发器的GameObject
的对撞机。
在这种情况下,您需要检查碰撞对象并在炸弹爆炸时使炸弹爆炸。
首先,你需要知道炸弹是否爆炸了。 爆炸变量需要先声明,所以在levelMask
变量声明下添加以下内容:
private bool exploded = false;
在OnTriggerEnter()
内,添加以下代码段:
if (!exploded && other.CompareTag("Explosion"))
{ // 1 & 2
CancelInvoke("Explode"); // 2
Explode(); // 3
}
这个片段做了三件事:
- 1) 检查炸弹没有爆炸。
- 2) 检查触发器对撞机是否已分配
Explosion
标签。 - 3) 通过丢弃炸弹取消已经被称为
Explode
的调用 - 如果你不这样做,炸弹可能爆炸两次。 - 4) 爆炸!
现在你有一个变量,但它还没有被改变。 在您禁用MeshRenderer
组件后,最合理的设置是在Explode()
内部:
...
GetComponent<MeshRenderer>().enabled = false;
exploded = true;
...
现在一切都已设置好,因此请保存文件并再次运行场景。 将一些炸弹放在彼此附近并观察会发生什么:
现在你有一些严重破坏性的火力正在进行中。 一次小小的爆炸可以通过触发其他炸弹让你的小游戏世界着火,允许这些酷酷的连锁反应!
最后要做的是处理玩家对爆炸的反应以及游戏如何将反应转化为胜利或平局状态。
Player Death And How To Handle It
在代码编辑器中打开Player.cs
脚本。
现在,没有变量来指示玩家是死还是活,所以在脚本的顶部添加一个布尔变量,就在canMove
变量的正下方:
public bool dead = false;
此变量用于跟踪玩家是否因爆炸而死亡。
接下来,将其添加到所有其他变量声明之上:
public GlobalStateManager globalManager;
这是对GlobalStateManager
的引用,该脚本通知所有玩家死亡并确定哪个玩家获胜。
在OnTriggerEnter()
内部,已经检查过玩家是否被爆炸击中,但它现在所做的只是将其记录在控制台窗口中。
在Debug.Log
调用下添加此代码段:
dead = true; // 1
globalManager.PlayerDied(playerNumber); // 2
Destroy(gameObject); // 3
这段代码执行以下操作:
- 1) 设置死变量,以便您可以跟踪玩家的死亡。
- 2) 通知
global state manager
该玩家已经死亡。 - 3) 销毁
player GameObject
。
保存此文件并返回Unity
编辑器。 您需要将GlobalStateManager
链接到两个玩家:
- 在
hierarchy
结构窗口中,选择两个Player GameObjects
。 - 将
Global State Manager GameObject
拖到其Global Manager
插槽中。
再次运行场景并确保其中一个玩家被爆炸消灭。
每一个阻碍爆炸的玩家都会立即死亡。
游戏不知道谁赢了,因为GlobalStateManager
不使用它收到的信息。 是时候改变了。
1. Declare the Winner
在代码编辑器中打开GlobalStateManager.cs
。
要让GlobalStateManager
跟踪哪些玩家死亡,您需要两个变量。 在PlayerDied()
上方的脚本顶部添加以下内容:
private int deadPlayers = 0;
private int deadPlayerNumber = -1;
首先,deadPlayers
将保留死亡的玩家数量。deadPlayerNumber
在第一个玩家死亡时设置,并指示它是哪一个。
现在您已经进行了此设置,您可以添加实际逻辑。 在PlayerDied()
中,添加以下代码:
deadPlayers++; // 1
if (deadPlayers == 1)
{ // 2
deadPlayerNumber = playerNumber; // 3
Invoke("CheckPlayersDeath", .3f); // 4
}
此代码段执行以下操作:
- 1) 添加一个死玩家。
- 2) 如果这是第一个死亡的玩家......
- 3) 它将死玩家编号设置为首先死亡的玩家。
- 4) 检查其他玩家是否也死了,或者0.3秒后是否只有一点灰尘。
最后一次延迟对于进行平局检查至关重要。 如果你立即检查,你可能不会看到每个人都死了。 0.3秒就足以确定每个人是否都死了。
2. Win, Lose or Draw
你已经到了最后一节了! 在这里你创造了在胜利或平局之间选择的逻辑!
在GlobalStateManager
脚本中创建一个名为CheckPlayersDeath
的新方法:
void CheckPlayersDeath()
{
// 1
if (deadPlayers == 1)
{
// 2
if (deadPlayerNumber == 1)
{
Debug.Log("Player 2 is the winner!");
// 3
}
else
{
Debug.Log("Player 1 is the winner!");
}
// 4
}
else
{
Debug.Log("The game ended in a draw!");
}
}
这是此方法中不同if语句背后的逻辑:
- 1) 一名玩家死亡,他是输家。
- 2) 玩家1死亡,因此玩家2是赢家。
- 3) 玩家2死亡,所以玩家1是赢家。
- 4) 两名玩家都死了,所以这是平局。
保存你的代码,然后给游戏一个最后的运行并测试控制台窗口是否读出了哪个玩家赢了或者它最终是否为平局:
强烈建议您继续开发这款游戏 - 通过添加新功能使其成为您自己的游戏! 以下是一些建议:
- 使炸弹“可推动”,这样你就可以逃离你旁边的炸弹并将它们推向你的对手
- 限制可以丢弃的炸弹数量
- 轻松快速重启游戏
- 添加可被爆炸摧毁的易碎块
- 创建有趣的
powerups
- 添加生命或获得它们的方式
- 用于表明玩家获胜的UI元素
- 找到一种方法,允许更多的玩家
后记
本篇主要讲述了如何使用Unity制作像Bomberman一样的游戏,感兴趣的给个赞或者关注~~~