用Unity创建一个单词猜谜游戏 VR资源

manew_JR 2017-09-08 18:27:43
在这一节中,我们将用Unity创建一个单词猜谜游戏
 
  • 从现有的列表中随机抽取一个单词。
  • 这个词的字母将被隐藏起来。
  • 玩家们会通过按键盘上的字母来猜测每个字母。
  • 一旦发现了字母,它就会在屏幕上显示出来。
  • 这个玩家尝试猜测这个词的次数是有限的。

 
因此,在完成本教程之后,您将能够:
 
  • 从文本文件中读取单词。
  • 随机选择一个词。
  • 处理并评估玩家所压下的信件。
  • 显示玩家正确猜出的字母。
  • 跟踪并显示分数。
  • 检查玩家是否使用了太多的猜测
 


 
 
为游戏创建界面
 
因此,在本节中,我们将开始创建“猜猜游戏”这个词的核心;它将由最初空白的文本字段组成,并位于屏幕中间。
所以,让我们开始:
 
请启动Unity并创建一个新项目(文件新项目)。
 

在新窗口中,您可以指定项目的名称,其位置以及2D模式(这个游戏将在2D中完成)。
 
 
 
一旦完成,您可以点击名为Create project(位于窗口底部)的按钮,并打开一个新项目。
完成后,您可以根据位于“场景”视图右上角的2D徽标,检查2D模式是否已激活,如下图所示。
 
 
 
首先,我们将删除我们场景的背景图像。 如果你看看你的游戏视图,它可能如下图所示。
 
 
 
 
如果是这样,请执行以下操作:
 
  • 从顶部菜单中选择:窗口| 灯光。
  • 然后删除为名为SkyBox的属性设置的默认天空盒(即单击标签Skybox右侧的属性,然后按键盘上的DELETE)。

 


 
 
一旦完成,您的游戏视图应该如下所示。
 
 
 
 
我们现在将创建一个文本字段,将用于要猜到的字母。
 
从顶部菜单,请选择GameObject | UI | 文本。 这将创建一个名为文本的UI文本对象以及Canvas对象。
请重命名这个文本对象字母。
 
 
 
 
在层次结构中选择此对象(即字母),并使用检查器窗口,请按如下所示设置其属性:
 
 
  • 对于组件Rect Transform:Position =(0,0,0);宽度= 100,高度= 100。
  • 对于组件文本:Font-size = 80;颜色=白色;文本=请清空文本。
  • 对于组件Text:vertical alignment = center;水平对齐=中间。

 
一旦完成,我们将从此对象创建一个预制,以便稍后实例化(即基于此预制构建对象)。
  •  
  • 请将对象字母从“层次结构”窗口拖放到“项目”窗口。
  • 这将创建一个新的预制称为信件。

 
 
接下来,我们将创建一个gameManager对象;该对象将负责设置游戏的布局并处理用户的条目;换句话说,它将负责运行和管理游戏。
 
 
  • 请创建一个新的空对象(GameObject | Create Empty)。
  • 重命名这个新对象gameManager。

 
接下来,我们将创建一个将附加到gameManager对象的脚本;该脚本将负责运行游戏(例如,显示字母,处理用户输入等)。
 
  • “项目”窗口中,选择“创建” C#脚本。
  • 重命名新脚本GameManager。
  • 然后,您可以打开此脚本。

 
在这个脚本中,我们将在屏幕中间显示几个字母。
 
请在课程开头添加此代码。
 
1
     
public GameObject letter;
 
 
在前面的代码中,我们创建一个名为letter的新公共变量;检查员可以从公开访问它,并且将使用我们之前创建的字母prefab来设置(或初始化)。该变量将用于基于该模板生成新的字母(即,预制)。
 
 
  • 请在控制台窗口中检查代码是否无错。
  • “ScriptManager”从“Project”窗口中拖放到位于“层次结构”中的名为gameManager的对象上。
  •  
 
 
 
  • 一旦完成,您可以在层次结构中选择名为gameManager的对象。
  • 使用Inspector窗口,您将看到此对象现在包含一个名为GameManager的新组件,其中包含一个名为letter的空字段。


 
 
 
请在“检视器”窗口中将“预制名称”从“项目”窗口拖放到该空白字段,如下图所示。
 
 
 
一旦完成,我们可以开始编写一个将创建新字母的函数。
 
  • 请打开脚本GameManager。
  • 在类的末尾添加以下代码(就在Update之后)。

 
 
01
02
03
04
05
06
07
08
09
10
void initLetters()
{
int nbletters = 5;
for (int i = 0; i < nbletters; i++) {
Vector3 newPosition;
newPosition = new Vector3 (transform.position.x + (i * 100), transform.position.y, transform.position.z);
GameObject l = (GameObject)Instantiate (letter, newPosition, Quaternion.identity);
l.name = "letter" + (i + 1);
l.transform.SetParent(GameObject.Find ("Canvas").transform);
}
}
 
在前面的代码中:
 
  • 我们定义我们将使用变量nbLetters显示五个字母;这个数字是随意的,所以我们可以确保我们可以在屏幕上显示字母;这个数字当然会根据要猜测的单词的长度而有所不同。
  • 然后,我们创建一个循环,循环五次(每个字母一次)。
  • 在每次迭代中,我们使用变量newPosition定义新信的位置。
  • 该字母的位置是通过将与该脚本相关联的对象gameManager的位置(即transform.position)加上字母的大小(即,100;此尺寸/宽度早先设置)来计算的检查器使用width属性)乘以变量i;所以x轴上的第一个字母的位置将是transform.position + 0,第二个字符将位于x位置,转换位置+ 100,依此类推。
  • 我们实例化一个字母,并设置其名称。
  • 最后,我们将这个新对象的父对象设置为Canvas对象;这是因为,作为UI文本对象,此对象需要与画布相关联才能在屏幕上显示;这通常是在Unity中使用编辑器创建一个新的UI Text对象时默认完成的;但是,需要手动完成此对象的创建,并从脚本添加到场景中。

 
最后,请将以下代码添加到Start函数。
 
initLetters();
 
 
在播放场景时,应该会看到在层次结构中创建了新的字母。
 
 
 
 
如果您在层次结构中双击其中一个(例如letter1),则应在“场景”视图中看到它们所在的位置及其布局。
 
 
 
 
现在,因为字母的位置是基于游戏manager的位置,你可能会注意到,如上图所示,这些字母不是正确居中。 所以我们需要确保这些字母垂直和水平地正确对齐。 为此,我们将执行以下操作:
 
  • 创建位于屏幕中间的空文本对象。
  • 基于此对象上每个字母的位置。
  • 确保所有字母现在正确对齐。
所以我们继续吧
 
  • 请创建一个新的UI文本对象(GameObject | UI | Text)并将其重命名为centerOfScreen。
  • 在层次结构中选择此对象。
  • 使用检查器,在名为RectTransform的组件中,将其位置更改为PosX = 0和PosY = 0; 你可以保留原来的其他属性。
  •  
 


 
因为这个对象是一个UI对象,所以把它的位置设置为(0,0)将保证它被显示在屏幕的中心; 这是因为UI对象(对于组件RectTransform)的坐标是基于视图/摄像头。 所以PosX = 0和PosY = 0,在这种情况下,对应于屏幕的中心; 使用空对象将不同,因为坐标将是世界坐标,与屏幕/视图无关。
 
 
使用检视器,在名为“文本”的组件中,删除默认文本,以便此UI文本实际上是一个空字段。
 
 
一旦完成,我们可以修改脚本GameManager中的代码,使我们的信件居中。
 
  • 请打开脚本GameManager。
  • 将以下代码添加到类的开头(粗体的新代码)。
 
1
2
3
4
5
public GameObject letter;
public GameObject cen;
void Start () {
cen = GameObject.Find ("centerOfScreen");
initLetters ();
}
 
在前面的代码中,我们声明一个名为cen的新变量,用于引用对象centerOfScreen。
在我们之前创建的函数initLetter中,请修改此行
 
 
newPosition = new Vector3 (transform.position.x + (i * 100), transform.position.y, transform.position.z);
替换为
 
newPosition = new Vector3 (cen.transform.position.x + (i * 100), cen.transform.position.y, cen.transform.position.z);
 
在前面的代码中,我们将把我们信的位置放在屏幕的中心。
 
  • 请保存您的脚本,并检查它是否无错误。
  • 播放场景,您应该在场景视图中看到字母现在垂直对齐; 但是,它们稍微偏移水平。
  •  

 

 
所以我们可以在脚本中添加一个最后一个变化,这样每个字母都围绕屏幕中心; 这将包括基于屏幕中心的每个字母的位置抵消如下,使得该中间的字符与屏幕的中心匹配。
 
请打开脚本GameManager,并在initLetter函数中替换此行:
 
newPosition = new Vector3 (cen.transform.position.x + (i * 100), cen.transform.position.y, cen.transform.position.z);
替换为
 
newPosition = new Vector3 (cen.transform.position.x + ((i-nbletters/2.0f) *100), cen.transform.position.y, cen.transform.position.z);

在前面的代码中,我们根据屏幕的中心偏移每个字母的位置; 所以第一个字母的x坐标将为-250,第二个字母的x坐标为-150,依此类推。
 
您可以保存脚本,播放场景,并查看场景视图; 你应该看到字母现在正确对齐,如下图所示。
 
 
 
如果你想看看这些字母是什么样子,你可以在玩游戏时选择每个新创建的字母,并在Inspector中使用组件文本来修改它的Text属性,如图所示 在下图中。
 
99VR视界二维码
热门推荐
Hot Recommended
在线客服