C#开发Unity游戏教程之判断语句

C#开发Unity游戏教程之判断语句

游戏执行路径的选择——判断

玩家在游戏时,无时无刻不在经过判断作出选择。例如,正是由于玩家作出的选择不一样,才致使游戏朝着不一样的剧情发展,所以一个玩家能够对一个游戏百玩不厌!既然提到了这一点,借此机会本章就来讲明,在脚本中实现游戏为玩家提供更多选择的方法。spa

Unity游戏的执行路径

游戏如此受玩家欢迎的缘由,除了优质的画面效果之外,就是游戏的可交互性。也就是说,游戏是能够与玩家互动的,这也是游戏与视频的不一样之处。游戏容许玩家在必定程度上控制游戏的执行路径,虽然这些路径都是游戏预先设定好的。例如,《仙剑奇侠传》这款游戏中,往大了说玩家能够决定触发哪一个剧情去完成哪一个任务,往小了说玩家能够决定战斗时,使用法力仍是武器,以及使用什么招式,如图5-1所示。orm

5-1  《仙剑奇侠传》游戏的剧情与攻击方式的选择视频

玩家在玩游戏的过程当中,老是在作出一些选择,而这些选择直接影响了游戏的执行路径。玩家的选择效果是游戏体现出来的,可是游戏实现这一效果的内在缘由是,游戏代码脚本中添加了容许玩家进行选择的判断语句。对象

Unity判断玩家的选择

上一节说明了,脚本中的判断语句对于游戏的重要性,可是列举的例子仍是太抽象了。读者无需为此感到困惑,做者能够在此处列举些更实际的例子:玩家是否按下了游戏视图中的特定按钮,或者键盘上的特定按键,玩家是否击败了小怪等等。这些都是游戏脚本中须要使用判断语句的地方。教程

Unity中最经常使用的判断语句——if

在生活中,人类习惯使用“是”和“否”作出判断,但在游戏的脚本中,一般是使用“真”和“假”来作出判断的。本小节将以脚本中最经常使用的if语句来讲明,在脚本中作出判断的方法。游戏

1.if语句ip

在脚本中,if语句的书写格式以下,表示的游戏执行流程如图5-2所示。游戏开发

  • if(须要判断的部分)开发

  • {文档

  •          //语句或者语句块;

  • }

  • q  if及其后面的括号“( )”是必不可少的;

  • q  大括号“{ }”里包含的是语句块,即多条语句,若是语句块里只有一条语句,那么大括号“{ }”就能够省略;

  • q  当从判断部分得出的结论是true时,就执行大括号里面的语句,不然就直接跳过大括号里的语句;

5-2  if语句表示的游戏执行流程图

2.须要判断的部分

这部分代码能够是表达式,也能够是方法。可是不管如何,这个部分应该能够明确的给出true或者falsetruefalse其实是布尔类型的数据(在第2章中曾以表格的形式列出)。也就是说,从须要判断的部分里,能够获得一个数据,而这个数据是布尔类型的。至于表达式,它既能够是逻辑表达式,又能够是关系表达式,如图5-3所示。

5-3  判断部分的构成和结果

3.逻辑表达式

构成逻辑表达式的逻辑运算符有3种:!(非)、&&(与)和||(或),这种表达式的运算结果如表5.1所示。

5.1  逻辑表达式的运算结果

注释:ab是参与逻辑运算的两个数据。

4.关系表达式

构成关系表达式的关系运算符有6种,它们的名称、使用示例及功能如表5.2所示。

5.2  关系运算符、使用示例及功能



Unity游戏中的if语句游戏示例

请按照下面的步骤,完成游戏示例的制做:

1为游戏场景添加3个游戏对象:Directional lightSpherePlane。调节各游戏对象在游戏场景中的位置、朝向和大小,如图5-4所示。获得的游戏场景和游戏视图,如图5-5所示。

5-4  设置各游戏对象Transform组件下的属性

5-5  SceneGame视图里,查看各游戏对象的相对位置,以及游戏视图效果

Sphere是玩家在游戏中须要操做的游戏对象,而Plane则是为了模拟游戏中的“地面”而存在。

2Hierarchy视图里选中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  代码1617行是if语句,括号里表示判断的部分是一个关系表达式。由于只有17行一条语句,因此没有使用大括号“{ }”,当关系表达式的值为true时,执行此语句;

  • q  代码2324行是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人!

相关文章
相关标签/搜索