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人!

转载于:https://www.cnblogs.com/daxueba-ITdaren/p/4633199.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1539):hello world

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <!-- 需要…

java实现自动任务_Java实现定时任务的三种方法

普通thread这是最常见的&#xff0c;创建一个thread&#xff0c;然后让它在while循环里一直运行着&#xff0c;通过sleep方法来达到定时任务的效果。这样可以快速简单的实现&#xff0c;代码如下&#xff1a;public class Task1 {public static void main(String[] args) {// r…

Android Sdk 国内镜像下载地址

大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口&#xff1a;80北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.cn/ 端口&#xff1a;80- IPv4: http://ubuntu.buct.cn/ 端口&#xff1a;80- IPv6: http://ubuntu.buct6.edu.cn/ 端口&#…

java文件替换一行数据_用Golang替换文件中的一行

我是Golang的新手&#xff0c;从一些例子开始 . 目前&#xff0c;我要做的是逐行读取文件&#xff0c;并在满足特定条件时将其替换为另一个字符串 . 该文件用于测试目的包含四行&#xff1a;onetwothreefour处理该文件的代码如下所示&#xff1a;func main() {file, err : os.O…

python核心编程第六章练习6-12

6-12.字符串。&#xff08;a&#xff09;创建一个名字为findchr()的函数&#xff0c;函数声明如下。def findchr(string, char)findchr()要在字符串string中查找字符char&#xff0c;找到就返回该值得索引&#xff0c;否则返回-1。不能用string.*find()或者string.*index()函数…

java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析

使用循环遍历集合普通for循环for(int i0;i<10;i){}增强for循环for(String str:list){}什么是迭代器IteratorIterator是Java中的一个接口&#xff0c;核心作用就是用来遍历容器的元素&#xff0c;当容器实现了Iterator接口后&#xff0c;可以通过调用Iterator()方法获取一个I…

当winform窗体的Bordestyle设置为None时,鼠标可以拖动窗体的办法

方法一&#xff1a; 1 2015-07-11 16:05:352 bool formMove false;//窗体是否移动3 Point formPoint;//记录窗体的位置4 private void Form1_MouseDown(object sender, MouseEventArgs e)5 {6 formPoint new Point(); …

传图识字java_Java:全面 清晰的 NIO 学习攻略

Java&#xff1a;全面 & 清晰的 NIO 学习攻略发布时间&#xff1a;2018-11-19 09:19,浏览次数&#xff1a;202, 标签&#xff1a;JavaNIO<>前言* JDK 1.4后&#xff0c;Java提供了一个全新的IO API&#xff0c;即 Java New IO* 本文 全面 & 详细解析Java New IO&…

java手机飞行模式_用了这么多年手机才知道,飞行模式还藏着这6个功能!太好用了...

说起“飞行模式”很多朋友们都会说我又不坐飞机&#xff0c;要它有啥用&#xff1f;当然有用&#xff01;而且用处可多了不纠结手机辐射问题很多朋友担心晚上不关机手机会有辐射&#xff0c;但是又觉得关机开机很繁琐&#xff0c;真是很纠结。其实只要把手机飞行模式打开就行啦…

Ubuntu下一个openldapserver部署步骤

1&#xff1a;安装zlib 下载zlib-1.2.3.tar.gz&#xff08;或其它版本号&#xff09; wget http://down1.chinaunix.net/distfiles/zlib-1.2.3.tar.gz # ./configure --shared # make # make install 2&#xff1a;安装openssl 不要卸载系统自带的Openssl,否则非常多服务都起不…

dentity在Java里是什么意思_注释@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)的用途是什么?为什么世代类型是身份?...

小编典典让我回答这个问题&#xff1a;首先&#xff0c;使用注释作为我们的configure方法只是一种便捷的方法&#xff0c;而不是应对无休止的XML配置文件。的Id注释是继承自javax.persistence.Id&#xff0c;指示构件字段下面是当前实体的主键。因此&#xff0c;您的Hibernate和…

ACM配置指南

Ubuntu桌面入门指南  ACM比赛系统ubuntu 使用指南 ACM核武器 简明 Vim 练级攻略  Vim命令合集  代码编辑神器VIM&#xff08;附我写acm程序时的配置&#xff09; my_vimrc in ubuntu set cin nu et ts4 sw4 sts4 noswapfile nobackup cursorline set backgrounddark synt…

前端学习(1545):模型和控制器

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <!-- 需要…

java是不是饱和了_广州Java难学吗?Java是不是已经饱和了

无论是在校的学生也好&#xff0c;还是转行的也好&#xff0c;如今学Java开发的人越来越多&#xff0c;造成了如今新手越来越多&#xff0c;有人说前端饱和了&#xff0c;Java饱和了&#xff0c;Java才刚开始以一种好的势头发展就饱和了&#xff1f;怎么可能&#xff0c;一般说…

Hello Indigo

Windows Communication Foundation (WCF),formerly code-named “Indigo,” is Microsoft’s platform for Service-Oriented Architecture (SOA),designed for building distributed service-oriented applications for the enterprise and the web. WCF was released with Wi…