建立网站需要花多少费用,推广运营方案,网站建设会员管理系统方案,如何来做网站C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时#xff0c;无时无刻不在通过判断做出选择。例如#xff0c;正是因为玩家做出的选择不同#xff0c;才导致游戏朝着不同的剧情发展#xff0c;因此一个玩家可以对一个游戏百玩不厌#xff01;既然提…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 : MonoBehaviour05 {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人转载于:https://www.cnblogs.com/daxueba-ITdaren/p/4633199.html