2D Roguelike 5 of 14 : Game Manager
-
0:03 - 0:05在这个视频中,我们将开始
-
0:05 - 0:07设置我们的“GameManager”。这样我们就可以
-
0:07 - 0:10测试我们刚写的“BoardManager”脚本了。
-
0:11 - 0:13让我们选择两个脚本并将它们添加
-
0:13 - 0:15到“GameManager”中。
-
0:18 - 0:22接下来,让我们在“MonoDevelop”中打开“GameManager”脚本。
-
0:24 - 0:26在“GameManager”中,我们将添加
-
0:26 - 0:28一个类“BoardManager”类型的公有变量,
-
0:28 - 0:30BoardScript。
-
0:30 - 0:33我们还将添加一个“int”类型的
-
0:33 - 0:37私有变量,Level,并将其“初始化”为3。
-
0:37 - 0:40我们使用3,因为我们要测试
-
0:40 - 0:43Level 3,因为这是敌人出现的地方。
-
0:43 - 0:45我们会把 “Start” 改成 “Awake”。
-
0:45 - 0:47在Awake中,我们要做两件事。
-
0:47 - 0:50我们将获取并存储一个组件引用
-
0:50 - 0:52到我们的“BoardManager”脚本中。
-
0:52 - 0:55并且我们还会调用“InItGame”函数。
-
0:55 - 0:57我们声明InItGame。
-
0:57 - 1:01在“InItGame”中,我们将调用“boardScript”的
-
1:01 - 1:02“SetupScene”函数。
-
1:02 - 1:05当我们这样做时,我们会
-
1:05 - 1:08在参数层中进行解析,这样我们就可以告诉“boardScript”,
-
1:09 - 1:11我们设置的场景是什么级别的,
-
1:11 - 1:14这样它就可以确定敌人的数量。
-
1:15 - 1:18这样做之后,我们保存脚本并返回到编辑器。
-
1:22 - 1:24回到“编辑器”中,是时候分配
-
1:24 - 1:27我们的“BoardManager”脚本的变量了。
-
1:27 - 1:29让我们选择GameManager”
-
1:31 - 1:33我们要做的是锁定
-
1:33 - 1:35"inspector"这样我们就可以
-
1:35 - 1:37点击多个”prefabs“
-
1:37 - 1:41然后把它们拖到数组中。
-
1:41 - 1:45让我们通过点击这里的锁按钮来锁定“inspector”。
-
1:46 - 1:48现在我们可以做的是,我们开始通过拖动
-
1:48 - 1:50“exit”,这是第一个。
-
1:53 - 1:55接下来我们要按shift按键
-
1:55 - 1:58选择所有8个floor预制体,
-
1:58 - 2:00将直接把它们拖到
-
2:00 - 2:03floorTile数组中。
-
2:07 - 2:10这将允许我们同时添加所有这些,
-
2:10 - 2:12而不会失去焦点。
-
2:13 - 2:15接下来我们要做的是“wallTiles“。
-
2:15 - 2:18选择“Wall1”,按shift按键,点击“Wall8”。
-
2:21 - 2:23将它们拖到“wallTiles"数组中。
-
2:25 - 2:28我们要做的是“foodTiles",在这种情况下,
-
2:28 - 2:32我要点击“Food”预制件,然后按下“command”按键,
-
2:32 - 2:34点击“Soda”预制体,我是在MAC上操作。
-
2:34 - 2:37如果我们在PC上操作,那将是按下“CTRL”按键
-
2:37 - 2:39添加选择。
-
2:39 - 2:41我们会把它们拖到我们的"foodTiles"数组中。
-
2:42 - 2:44然后是两个"Enemy"敌人瓦片。
-
2:47 - 2:50最后是"outerWallTiles"。
-
2:54 - 2:57有了这些设置,让我们解锁“inspector”
-
2:59 - 3:00并测试一下。
-
3:03 - 3:05很好,我们可以看到
-
3:05 - 3:07我们的“levels”正在产生,
-
3:07 - 3:09我们可以看到摄像头有点脱离了位置,
-
3:09 - 3:11我们快速地修正一下。
-
3:11 - 3:15我们把X设为3.5,把Y设为3.5。
-
3:15 - 3:17我们把背景设置为黑色。
-
3:20 - 3:22完成之后,让我们play这个场景
-
3:22 - 3:24测试一下。
-
3:28 - 3:29于是我们就有了,
-
3:29 - 3:32我们的出口,和我们的地板背景,
-
3:32 - 3:34食物被生成出来了,
-
3:34 - 3:37”内墙”和“外墙”被生成出来了。
-
3:37 - 3:39还有我们的敌人也被生成出来了。
-
3:44 - 3:48我们将为我们的“GameManager”脚本添加一些功能。
-
3:48 - 3:51让我们写一个被称为”单例“的“GameManager”。
-
3:51 - 3:54“单例”是一个对象,
-
3:54 - 3:57在任何给定的时间,
-
3:57 - 3:59它只能在游戏中有一个实例。
-
3:59 - 4:01因为“GameManager”会做一些事情,
-
4:01 - 4:05比如加载“级别”,管理玩家的分数,
-
4:05 - 4:07我们不希望有超过一个
-
4:07 - 4:09这样的对象存在,
-
4:09 - 4:11所以在我们的代码中,我们要保证
-
4:11 - 4:13不能发生这种情形。
-
4:13 - 4:15让我们在“MonoDevelop”中打开“GameManager”。
-
4:17 - 4:20我们把“GameManager”设置为“单例”
-
4:20 - 4:23我们将添加一个的公共静态变量
-
4:23 - 4:26“GameManager”名为“Instance“
-
4:26 - 4:28并将其初始化为null。
-
4:28 - 4:30声明实例为public意味着
-
4:30 - 4:33它将从类的外部访问。
-
4:33 - 4:37将其声明为静态意味着该变量
-
4:37 - 4:40将属于类本身,
-
4:40 - 4:42而不是类的实例。
-
4:42 - 4:44这意味着我们现在可以
-
4:44 - 4:46从游戏中的任何脚本访问我们的“GameManager”
-
4:46 - 4:48的公共功能和变量。
-
4:49 - 4:51在“Awake”中,
-
4:51 - 4:54如果我们要给”instance"赋值,
-
4:54 - 4:57我们要先检查”instance"是否为空。
-
4:57 - 5:00如果”instance“不为空,并且
-
5:00 - 5:03"instance"不等于“this”,我们要“destroy”它
-
5:03 - 5:06这样我们就不会意外地得到
-
5:06 - 5:09两个“GameManager”的例子。
-
5:09 - 5:11我们还将在我们的“GameManager”中设置
-
5:11 - 5:14“DontDestroyOnLoad”。
-
5:14 - 5:16"DontDestroyOnLoad"意思是当我们
-
5:16 - 5:19加载一个新的场景时,通常是所有在
-
5:19 - 5:22“层级(hierarchy)”中的游戏对象被销毁。
-
5:22 - 5:24因为我们想用"GameManager"来
-
5:24 - 5:27记录场景之间的分数
-
5:27 - 5:30我们不希望它在那个时候被摧毁。
-
5:30 - 5:32因此,我们将使用“DontDestroyOnLoad”
-
5:32 - 5:35来确保它能够在场景之间持续。
-
5:35 - 5:38让我们保存脚本并返回到编辑器。
-
5:40 - 5:42现在我们已经添加了我们需要的
-
5:42 - 5:44“GameManager”脚本,让我们把它拖到
-
5:44 - 5:46我们的“Prefabs”文件夹中,创建一个预制体。
-
5:51 - 5:53在我们完成之前,我们还需要一个
-
5:53 - 5:55示例脚本,它将在游戏开始时
-
5:55 - 5:57加载“GameManager”。
-
5:59 - 6:01我们将进入脚本,并创建
-
6:01 - 6:03一个名为“Loader”的新脚本。
-
6:08 - 6:10“Loader”是一个非常简单的脚本,
-
6:10 - 6:12它会检查是否有一个“GameManager”
-
6:12 - 6:14被实例化,如果没有实例化,
-
6:14 - 6:16将从我们的prefabs预制体中实例化一个。
-
6:16 - 6:19我们要添加一个公共游戏对象,
-
6:19 - 6:21叫做“GameManager”。
-
6:21 - 6:23我们将“Start ”改成“Awake”。
-
6:23 - 6:27在"Awake"里,我们要检查“GameManager.Instance”
-
6:27 - 6:29是否为空。
-
6:29 - 6:32这里我们使用的是我们在
-
6:32 - 6:35“GameManager”脚本中创建的静态变量,
-
6:35 - 6:37并从“Loader ”脚本中访问它。
-
6:38 - 6:40如果它等于null,我们就会实例化
-
6:40 - 6:42我们的“GameManager”预制体。
-
6:42 - 6:45我们可以删除“Update”函数,因为我们不打算使用它。
-
6:46 - 6:48这就是我们目前所需要的。
-
6:50 - 6:54我们在编辑器的“hierarchy”中删除我们的“GameManager”。
-
6:55 - 6:58然后将我们的“Loader”脚本添加到“ main camera”中。
-
6:59 - 7:01添加了我们的“Loader ”脚本,我们会拖拽
-
7:01 - 7:03我们的“GameManager”预制体。
-
7:07 - 7:09现在我们可以测试我们的场景了。
-
7:12 - 7:15现在我们已经有了“GameManager”,
-
7:15 - 7:16我们可以列出一些级别,
-
7:16 - 7:19是时候让我们的units移动了。
-
7:19 - 7:22在下个视频中,我们要写一个脚本
-
7:22 - 7:24叫做“MovingObject”。
- Title:
- 2D Roguelike 5 of 14 : Game Manager
- Description:
-
* IMPORTANT - This projects requires Unity 4.6 or greater *
Watch on Unity's learn site here -
http://unity3d.com/learn/tutorials/projects/2d-roguelikeThis 2D Roguelike project guides you through creating a turn based, tile based game with procedurally generated levels. In the game you play as a lone man trying to find food and survive the waste land for as long as you can.
This is part 5 of 14 in which we write our game manager script which uses a singleton pattern.
Presented by -
Matt Schell - Screencaster (@mattmirrorfish) - Video Language:
- English
- Duration:
- 07:31
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager | |
![]() |
zero575 edited Chinese, Simplified subtitles for 2D Roguelike 5 of 14 : Game Manager |