C#开发Unity游戏教程之判断语句
C#开发Unity游戏教程之判断语句
游戏执行路径的选择——判断
玩家在游戏时,无时无刻不在通过判断做出选择。例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏百玩不厌!既然提到了这一点,借此机会本章就来说明,在脚本中实现游戏为玩家提供更多选择的方法。
Unity游戏的执行路径
游戏如此受玩家欢迎的原因,除了优质的画面效果以外,就是游戏的可交互性。也就是说,游戏是可以与玩家互动的,这也是游戏与视频的不同之处。游戏允许玩家在一定程度上控制游戏的执行路径,虽然这些路径都是游戏预先设定好的。例如,《仙剑奇侠传》这款游戏中,往大了说玩家可以决定触发哪个剧情去完成哪个任务,往小了说玩家可以决定战斗时,使用法力还是武器,以及使用什么招式,如图5-1所示。
图5-1 《仙剑奇侠传》游戏的剧情与攻击方式的选择
玩家在玩游戏的过程中,总是在做出一些选择,而这些选择直接影响了游戏的执行路径。玩家的选择效果是游戏体现出来的,但是游戏实现这一效果的内在原因是,游戏代码脚本中添加了允许玩家进行选择的判断语句。
Unity中判断玩家的选择
上一节说明了,脚本中的判断语句对于游戏的重要性,但是列举的例子还是太抽象了。读者无需为此感到困惑,作者可以在此处列举些更实际的例子:玩家是否按下了游戏视图中的特定按钮,或者键盘上的特定按键,玩家是否击败了小怪等等。这些都是游戏脚本中需要使用判断语句的地方。
Unity中最常用的判断语句——if
在生活中,人类习惯使用“是”和“否”做出判断,但在游戏的脚本中,通常是使用“真”和“假”来做出判断的。本小节将以脚本中最常用的if语句来说明,在脚本中做出判断的方法。
1.if语句
在脚本中,if语句的书写格式如下,表示的游戏执行流程如图5-2所示。
if(需要判断的部分)
{
//语句或者语句块;
}
q if及其后面的括号“( )”是必不可少的;
q 大括号“{ }”里包含的是语句块,即多条语句,如果语句块里只有一条语句,那么大括号“{ }”就可以省略;
q 当从判断部分得出的结论是true时,就执行大括号里面的语句,否则就直接跳过大括号里的语句;
图5-2 if语句表示的游戏执行流程图
2.需要判断的部分
这部分代码可以是表达式,也可以是方法。但是无论如何,这个部分应该可以明确的给出true或者false。true和false实际上是布尔类型的数据(在第2章中曾以表格的形式列出)。也就是说,从需要判断的部分里,可以得到一个数据,而这个数据是布尔类型的。至于表达式,它既可以是逻辑表达式,又可以是关系表达式,如图5-3所示。
图5-3 判断部分的构成和结果
3.逻辑表达式
构成逻辑表达式的逻辑运算符有3种:!(非)、&&(与)和||(或),这种表达式的运算结果如表5.1所示。
表5.1 逻辑表达式的运算结果
注释:a和b是参与逻辑运算的两个数据。
4.关系表达式
构成关系表达式的关系运算符有6种,它们的名称、使用示例及功能如表5.2所示。
表5.2 关系运算符、使用示例及功能
Unity游戏中的if语句游戏示例
请按照下面的步骤,完成游戏示例的制作:
(1)为游戏场景添加3个游戏对象:Directional light、Sphere和Plane。调节各游戏对象在游戏场景中的位置、朝向和大小,如图5-4所示。得到的游戏场景和游戏视图,如图5-5所示。
图5-4 设置各游戏对象Transform组件下的属性
图5-5 在Scene和Game视图里,查看各游戏对象的相对位置,以及游戏视图效果
Sphere是玩家在游戏中需要操作的游戏对象,而Plane则是为了模拟游戏中的“地面”而存在。
(2)在Hierarchy视图里选中Sphere对象,然后单击Component|Physics|Rigidbody命令,即可为Sphere对象添加刚体(Rigidbody)组件,如图5-6所示,此组件将使得Sphere对象如现实世界一般,会受到重力的影响。如果Sphere在空中的话,那么它就会因为收到重力的影响而下坠。
图5-6 为Sphere对象添加的刚体组件
(3)打开脚本MyScript,并添加下面的代码:
01 using UnityEngine;
02 using System.Collections;
03
04 public class MyScript : MonoBehaviour
05 {
06 private GameObject mySphere;
07 private Vector3 myVec;
08 void Start()
09 {
10 mySphere = GameObject.Find ("Sphere");
11 }
12 void Update()
13 {
14 myVec = mySphere.transform.position;
15 //判断小球是否在Y轴方向上,超过了一定的范围,简单来说就是是否达到了一定的高度
16 if(myVec.y > 4)
17 myVec.y = 4;
18 mySphere.transform.position = myVec;
19 }
20 void FixedUpdate()
21 {
22 //判断玩家是否按下了鼠标的左键
23 if(Input.GetMouseButton(0))
24 mySphere.rigidbody.AddForce (Vector3.up*20);
25 }
26 }
将此脚本赋予Main Camera对象。
q 代码16、17行是if语句,括号里表示判断的部分是一个关系表达式。因为只有17行一条语句,所以没有使用大括号“{ }”,当关系表达式的值为true时,执行此语句;
q 代码23、24行是if语句,括号里表示判断的部分是一个方法,即Input.GetMouseButton(),作用是检测玩家是否按下了鼠标的左键。同样只有24行一条语句,所以也省略了大括号“{ }”,当方法返回的值是true时,执行此语句;
提示:Input.GetMouseButton()帮助文档的文字描述如图5-7所示,从中可以看出方法会返回bool类型的数据,而且判断的标准就是玩家是否持续按下了指定的鼠标按键。
图5-7 Input.GetMouseButton()的帮助信息
(4)运行游戏,由于球体最初在空中,此时球体只是受到了重力的影响,因此会向下坠落,直到降落到“地面”上为止。如果玩家此时按下鼠标左键的话,就会给球体施加一个向上的力,这个力比重力大,因此小球会向上运动。也就是说,当玩家按下鼠标左键以后,小球会向上运动。但是小球向上运动的范围是有限的,达到了这个限度以后,就不会再继续上升了,如图5-8所示。
图5-8 游戏示例运行效果
Unity开发中的其它判断语句
除了if语句以外,C#还提供了一些其它的判断语句,本小节会做简要介绍。如果需要的话,读者可以查阅专门讲解C#语法的书籍,然后将它们灵活的运用在游戏脚本的编写当中。
1.if-else语句
此种类型的语句与if语句的区别是,当判断部分的结果为false时,会执行另一个语句。此种语句表示的游戏执行流程如图5-9所示。
图5-9 if-else语句表示的游戏执行流程图
2.if-else-if语句
此种类型的语句,属于多重判断语句,也就是说,需要判断的部分不止一处,且每处的判断都会导致不同的执行流程,如图5-10所示。
图5-10 if-else-if语句表示的游戏执行流程图
3.swtich语句
此种类型的语句,所表示的游戏执行流程,与if-else-if语句类似,它们二者可以互换。尽管流程是类似,但是给代码阅读者的直观感受却是不同的,如图5-11所示。
图5-11 switch语句表示的游戏执行流程图
本文选自:C#游戏开发快速入门大学霸内部资料,转载请注明出处,尊重技术尊重IT人!
C#开发Unity游戏教程之判断语句相关推荐
- C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例
C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...
- C#开发Unity游戏教程之游戏对象的行为逻辑方法
C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑--方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...
- C#开发Unity游戏教程之使用脚本变量
C#开发Unity游戏教程之使用脚本变量 使用脚本变量 本章前面说了那么多关于变量的知识,那么在脚本中要如何编写关于变量的代码,有规章可循吗?答案是有的.本节会依次讲解变量的声明.初始化.赋值和运算. ...
- C#开发Unity游戏教程之Unity中方法的参数
C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号"( )",有意义吗?看起来最 ...
- C#开发Unity游戏教程之Scene视图与脚本的使用
C#开发Unity游戏教程之Scene视图与脚本的使用 Unity中Scene视图的快捷操作 Scene视图是开发者开发游戏时,操作最频繁的视图.因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使 ...
- Excel_VBA开发2048游戏教程——Einsphoton
VBA对游戏开发的流程帮助甚微,甚至影响游戏开发效率,本应用实例仅为消遣,切勿过分关注! 前言 抱歉,这可能是我最后的几篇文章之一了. 由于最近工作中遇到很多问题,作者现在处于自我检讨中,恐怕以后将要 ...
- 2D中小游戏开发C++游戏教程
初探Windows窗体程序(上)2D游戏制作从入门到入土. 这个相对于我那个小游戏入门就显得比较专业了,但是仍然会给源码,关注可以下载相应的模板,模板是给全的.###感谢老司机(一个人)### Fir ...
- Unity游戏教程初步(五):Resources与UI
目录 前言 项目需求 增加音效 增加UI # TextMeshPro-Text 增加得分点 前言 在上一节中我们给球体添加了纹理,并且为场景设置了一个目的区域.当球体处于目的区域内时,其将变色.在这一 ...
- Unity游戏教程初步(六):迷宫算法与预制体
目录 前言 项目需求 Prim算法生成迷宫 1 算法思路介绍 2 代码示例 3 用于测试的代码 预制体(预制件) 1 定义 2 构建迷宫墙体预制体 完善工程 前言 本节我们来做迷宫生成.生成迷宫的算法 ...
最新文章
- IntelliJ IDEA 前端调试(Js Debug)
- mysql5.7.10 二进制包_MYSQL5.7二进制包的安装
- Java基础---API概述---常用类(Object类/String类)---equals和==
- linq 动态拼接where条件 类似 T_SQL And Or
- 嘘!你与谷歌语音助手的对话,可能已经泄露……
- vSAN 监测失败并显示错误:“未能生成 HTML 包:Gem::Package::TooLongFileName: (Failed to generate HTML bundle: Gem::Pac
- 前端基础知识(持续更新中)
- ASP.NET MVC2之Model Binder
- Spring Boot入门篇-@RequestParam/@RequestBody配置
- 高速路上车辆组队链接的想法
- adb shell top 命令详解
- android模拟器对比,哪个安卓模拟器好用 电脑玩手游助手模拟器权威对比
- 批量生成10位数手机号,用作账号注册
- Metric study
- 计算机通信与网络安全国际会议,第一届计算机通信与网络安全国际学术会议(CCNS2020)...
- java model 原则_java内存模型(Java Memeory Model)
- ElasticSearch的基本操作第三章
- python怎么导入sql数据库,##使用python将excel表中数据导入sql server数据库
- 用C++实现简易的文本编辑器
- eclipse版本说明及下载地址
热门文章
- The import java.util cannot be resolved The import javax.servlet cannot be resolved
- 我是一个机箱 《转载》
- 旅游自助系统可行性分析
- realloc,malloc,calloc的区别
- Http Module 介绍(转)
- VC.NET扩展Windows磁盘清理工具的功能
- 使用Fastjson解析List对象时出现:{“$ref“:“$.data[0].task.OBJECTS[0]“}的问题原因及解决方法
- git解决pre-commit hook failed的问题
- 我为什么要使用IDE? [关闭]
- 如何在Java中解析命令行参数?