Unity认证开发者课程

默认教学计划
24人加入学习
(2人评价)
价格 ¥ 480.00
教学计划
承诺服务

我们已经了解了if语句结构和条件句

为了实现真正复杂的决策行为

还需要学习一个新概念

即复杂条件句

我们要学习and和or运算符

这两个运算符

能将多个不同的判断结合成为一个判断

这个脚本包含两个公共整型变量

current level与invincible level

还有一个is livel的公共布尔值

目前的状态为真

在更新时

将is live值设定为假

来判断玩家是否已经死亡

以及current level是否小于invincible level

假设存在这样一个游戏机制

即如果玩家处于或高于invincible level

即使将is live设置为假

玩家也不可以被禁用或者销毁

我们无法为这多个决策分别撰写if语句

因为需要这两个情况相互依存

他们得同时发生

需要把这一复杂决策转化为两个简单决策

因此,我们要写一个if语句

并使用and运算符

我们写下的第一个条件语句是这样的

if(is alive==false)

前面已经说过

is alive是个布尔值

所以不需要去测试它是不是为假

他可以缩略成更简化的写法 

写成if(!is alive)

“如果现在玩家死了”

以为is alive目前为真

当我们在它前面加上非运算符时

它就变成了假,意味着这个if语句不会被执行

一旦is alive为假

 

[展开全文]

“if”条件语句

我们已初步理解了条件语句的逻辑

就来写一些条件句

如if语句

并使用它们为游戏对象添加行为

打开一个脚本,在这个脚本中

有一个update(更新)方法

以及一个名为“is dead”的布尔型公共变量

其值目前为false(假)

我想使用这个“is dead”变量

来判断我的游戏对象的生死

如果它没死,我不进行任何操作

但如果它死了,

[展开全文]

任务133:条件语句简介

条件或条件句

可以让代码通过比较数值做出决策

在我们开始学习

if语句之前

有必要先了解我们是如何比较数值

并根据他们做出决策的

这需要通过一系列的比较运算符来实现

你可能已经熟悉这些运算符

因为它们在数学中很常见

假设我想知道一个数字是否比另一个数字大

我先创建两个整数,然后进行比较

看看比较结果如何

我创建了两个整数,值为5的num1

与值为7的num2

还声明了名为“result”的布尔型变量

当我们比较这两个数值时

结果只会是一个布尔值,即真或假

在编程中,全部决策其实都是真或假

我们无法评估其他类型的结果

只能判断某额东西是真还是假

更复杂的问题

通常也只是多个真假决策而已

只是从外面看来比较复杂

我们来看一下这个例子

我想要判断变量num1是否大于变量num2

通过使用大于运算符

一个真或假的数值会被放入布尔参数“result”中

然后,如果我想把这结果输出到日志

就能看到这个值是什么

现在到unity中运行,就能看到这个值是什么

我将运行这个场景

可见它的值为false(假)

num1并没有大于num2 

在编程中的所有决策基本就是这样

看似复杂,实则不然

只不过是一系列回答是或否的问题

我可以问“num1是否小于num2”

可想而知,结果会是真

点击播放,能看到输出值为true(真)

这些条件句

就是计算机进行决策的方式

[展开全文]

任务132:变量类型列表

 我们知道了unity内变量的基本概念

再来看看一些可用的变量类型

我们要学习的第一个变量类型是integer(整数)

整数可以使用关键字int来声明

声明变量的格式

是数据类型在最前,然后是变量名

接着你可以使用分号来结束语句

或者用等号来为你的变量赋值

整数数据类型可以储存整数

如1,2或者50

它无法储存小数

所以它适用于除法运算的取整

我们要学习的下一个数据类型是float(浮点数)

它是浮点数值的简称

创建浮点数,需要以“float”关键字开头

然后是变量

浮点数可以储存任意数字

包括小数位或是余数

例如,浮点数可以储存5.5  6.2  3.14

或其他任何数值

在unity内使用浮点数要注意

是在输入想要变量储存的数值后

需要在后面加上“f”

这个字母很重要,它表示

你要把这一数值作为浮点数来储存

而不是其他的数字形式

这点很实用,虽然浮点数

不如其他更大的数据类型精确

但使用起来却非常快速有效

开发电子游戏时

快速有效的变量非常实用

unity中使用的大多数数字都会是浮点数

下一个数据类型叫做boolean(布尔型),或者简称bool(布尔)

布尔只可能有两个数值

真(true)或假(false)

他不能储存字符,数值或其他东西

布尔总是真或假

如果你不为布尔赋值,它的值会默认为假

你可以使用“true”或“false”

来为它赋值真或假

布尔常用于储存默写决策程序运行的结果

或是代码中某个对象的状态

例如,你想知道一个角色是够还活着

可以声明“is alive”的布尔型变量

当这一变量等于真时

我们知道玩家还活着

如果需要储存文本,即所谓的“字符串”

可以将它储存在名为string(字符串)的变量类型中

这些字符串的数值

通常为文本,需要写在双引号之内

字符串可以包含空格,特殊字符等等

只要他们在两个双引号之间

我们还可以在字符串上运行一些简单的功能

例如,我们想声明三个字符串

分别名为my string ,my string2与my string3

并分别复制为hello(你好)空格与world(世界)

然后我们可以使用加号将它们相连

并将结果储存为一个新的字符串变量

我们将其命名为“result”

其值即为“hello world”

这四个变量类型

整数,浮点数,布尔型与字符串

是unity中四个最常见的基本数据类型

然而,我们也是用很多更为复杂的数据类型

例子之一就是vector3数据类型

它是能储存三个浮点数值的数据类型

因为属于复杂类型,所以为vector3赋值

会与整数或布尔型赋值有些不同

我们依然会使用等号

然而,我们不能直接在等号后面赋值

因为vector3储存三个数值

我们要使用构造函数

用基本类型来构造一个更为复杂的vector3类型

我们先输入“new”

然后是数据类型vector3与我们想要的数值

现在,我们有了叫“my vector”的vector3变量

其X轴的值等于4

Y轴等于5,Z轴等于10

我们也能单独修改它的三个值

我们可以将my vector的X值设为10

取代已声明的4

甚至可以将my vector的Y值

换成之前的myint变量

还可以将my vector的Y值

与我们之前声明的my float变量相加

你在第20行看到的“+=”运算符

是一个简化操作

它表示将my vector变量的Y值

与my float的值相加

展开来写,就是这样

我们通常不想多打字

所以可以缩写成这样

vector3在unity中很常用

能储存如位置、缩放

欧拉角和颜色数据

或者其他需要三个浮点数一起的时候

另一个创建于unity内的常用数据类型

可以通过引用来跟踪场景内的玩家或对象

这以数据类型就是transform(变换)

之前我们控制变换

使用是首字母小写的“transform”

这是特定对象上的变换组件

如果我们使用首字母大写的“Transform”

他就是一个数据类型,意为

“给我一个Transform的变量”

使用这一语法

可以让一个变换组件存为本地的引用

随后便能像控制任何变化组件一样控制它

unity中还有很多内置数据类型

本视频无法一一讲解

请记住,在unity中声明的每一个

组件类型与类,其实都是一种数据类型

你甚至可以创建自定义数据类型

每次你创建一个类

其实都是在创建一种数据类型

例如

我们一直在使用的名为sample script的类

因为sample script是一个类

他也可以成为我们声明的一个数据类型变量

这适用于在一个类对象内

储存对两一个类对象的引用

举例来说

我们也可以声明我们在这部分中所创建的

其他脚本的变量类型

例如我们之前用到的translate and rotate脚本

总之,不论是C#unity script,还是unity本身

都有各种变量数据类型

此处不一一列举了

相关文档也非常多

然而请记住

他们通常都有这相同的格式

即数据类型、变量名、数值

掌握这一点,你就能轻松地

控制各种类型的变量了

 

[展开全文]

131:声明变量

变量是编程中重要且必需的概念

它能让你在代码不同的位置

储存于复用数据

假设我们要设置一个transform(变换)的位置

在设置完位置后

我们还有几行代码

然后要回头重新设置位置

或者重新利用这个数值来做其他事

我们可以记住这些数值,再次输入

但那样很费事,而且容易出错

我们需要死记硬背那些数值

确保自己重复利用时不出错

如果改动了其中一个数值

还要找到其他相应数值,全部改动

这种方式是硬编码,通常不是一件好事

我们不想对脚本内的数值进行硬编码

取而代之,我们把数值保存为变量

变量其实就是一个数据储存容器

不同类型的变量储存不同类型的数据

用于不同的地方

例如,vector3 就是一种数据类型

他读取并储存3个浮点值

稍后我们会详细说明

不同的数据类型及其功能

我们现在只要了解变量的概念就好

假设我想补救目前的情况

不再对这个变换的位置值进行硬编码

我将要声明一个vector3类型的新变量

并且用它来设置transform的位置信息

现在,我们有那些数值的单例

2f,2f和2f,储存在一个vector3中

我将其命名为“mypos”即“my position(我的位置)”的缩写

我想在任何地方使用这一数值时

只需要输入“mypos”即可

在第10行与14行可见

transform.position的值被设置成了“mypos”

如果我需要改变mypos的数值

只需要改动一处

所有的位置的引用都会自动更新

此外,因为transform.position属于vector3类型

我可以用它来为vector3赋值

假设我想暂时

将transform的位置值储存进一个vector3

对其进行修改再放回到代码里即可

代码会是这样

我们创建了一个名为“mypos”的变量

并让它等于transform的位置值

然后进行修改,再把它放回12行就好

变量的类型多种多样

我们会在后面的部分进行详细介绍

但所有变量的声明都需要遵循特定格式

或者使用特定语法

在C#中,声明变量

是在我们创建变量时

先声明这一变量的数据类型

数据类型指明了变量可储存的数值类型

假设我想创建一个整数

我可以输入“int”,即整数的缩写

现在我知道了数据类型,就需要为它命名

我可以任意命名,但要遵守几项规则

首先,名称中不得包含空格或特殊字符

可以包含数字,但不能以数字开头

为了向你们展示一下命名规则

我将它命名为“myvalue2”

现在我们声明了变量

可以就此以分号结束

表示代码语句的结束

需要的话,我们也可以给这一数值

设置初始值

我们可以用等号为myvalue2赋值

闲杂我们有了一个名为myvalue2的整数

其数值等于16

在命名变量时需要遵循一个常用标准

即通常说的“骆驼拼写法”

在骆驼拼写法中,变量名的首字母要小写

此后每个单词的首字母都要大写

假设我再来创建一个浮点类型的变量

命名为“my new value”

可见“my”中的“m”是小写吗

“New”中的“N”是大写

“Value”中的V也是大写

这不是必须的,但因为它是标准

很多人都会认可并且使用

变量的另一个重要概念是作用域

作用域定义了变量可以在哪里使用

一般来说

一个变量只能用于自己被声明的代码块内

左右大括号标识着一个代码块

课件第7行与第16行的大括号

划出了一个代码块作用域

现在,假设我们用另一种方法

如update(更新)方法

我们想使用my value2这一变量

那就不行了,因为这是不同的代码块

可以看到这里my value2变量名呈红色

之处这不是合理用法,出现了错误

如前缩减,第7行到第16行

划定了储存my value2的代码块

19到21行划定了另一个代码块

我们常常会见到代码块内包含代码块的情况

这种情况下,变量在里面的代码块中也可用

我来演示一下

我们还没学条件句

或者if语句,但请先看我演示

稍后我们会详细介绍

现在我们有了一个代码块内的代码块

在7到21行的代码块内

从18到20行又定义了一个新代码块

这种情况,我们是可以使用

变量mypos,my value2与my new value的

虽然它们不在18到20行的代码块内

但依然在总的代码块内

因此我们还是可以使用它们

想记住代码块与作用域看似很复杂

但你慢慢就会熟能生巧

我们给start方法内的变量赋值

并还想在update方法内使用它

显然,这两个模块不是包含关系

那我们该怎么办

答案是,我们可以向外看

你能看到,第5到22行是一个更大的模块

它叫“类代码块”

包含着samplescript类中全部代码

我可以在这里声明变量

这样在整个类中都可以读取它

请注意,如果我以类级或者全局声明

在第6行变量my value2

那么第16行就有问题了

我们声明的两个名为my value2的变量

都在同一代码块内

这会导致错误

根据你集成开发环境或文本编辑器的不同

错误的表现形式也不同

要么你会看到信息,说你不能这样做

要么更糟,你收不到任何提示信息

但游戏无法正确运行

想运行这个代码,就要去掉第16行的变量

我们只是简单的赋值给它

现在第16行使用的my value2变量

在第6行声明过

又由于my value2是类级声明

所以它不仅可在start方法中使用

也可以再update方法与类中的其他方法中使用

闲杂我们了解了变量的作用域,声明及使用

再来看另一个例子

我们想用脚本让一个对象沿Z正轴移动

我们可以使用transform组件中的translate方法

我们之前说过

请使用time.deltatime

来确定它是每秒移动5个单位

我们还要注意

早前说过的

用硬编码方式赋值5f不是个好主意

我们通常想要规避这种硬编码数值

所以我们可以声明一个名为speed的浮点型变量

将其用在这个translate(平移)方法内

同样,遵照之前所学的

在第6行我们以数据类型“float”开头

接着输入变量名“speed”

然后根据需要,将其数值设置为5f

现在,一出第10行的5f数值

将它用“speed”变量代替

这样,如果要变更移动速度

也不需要在代码里去找他们

而是可以直接在它赋值的地方修改

来看看脚本效果

回到unity中的方块

附加着sample script脚本

该脚本会使方块沿Z轴向正向移动

请看

我们或许想改变方块沿Z轴的移动速度

如果你是程序员,可以直接打开脚本修改

但你如果不是程序员

或者你并不熟悉自己所使用的脚本

或者你只是没有时间

这就不是个好办法

你不会想翻阅大量的代码

找到那个控制效果的数值

相反,我们可以将这些数值

显示在unity的检视面板中

这样你就不用翻遍脚本去进行每一个小修改

为了让变量能作为脚本组件显示在检视面板中

你需要将其设置为公共变量

公共变量有几个作用

确切来说,公共变量可以在检视面板内显示

也可以在自己的类外被读取

假设我有另一个脚本

想要设置sample script的速度变量

我就要把速度改为公共变量,让另一个脚本打开

基本上

公共变量可在类外被其他类打开及控制

除了公共变量,还有一种叫做私有变量

私有变量指这一变量在奔雷之外不能被读取

也不可被改变

通常我们不需要写“private”

因为私有变量是默认值

只要不注明是公共还是私有

变量都默认为私有

现在,我们将它设回公共变量

回到unity中查看效果

现在速度变量成为了公共变量

我们可以看到speed(速度)

作为方块上sample script组件的一个属性显示

如过我们想减缓速度,改变它的数值就好

我们还能让他在移动时加速度甚至回头

如果你熟悉编程

可能会担心公共变量的问题

这让它们可以随时被使用,没有安全性

导致错误

如果不想要公共变量

又想在编辑器中打开

你能做的就是将它

设置为serializable field

可以通过这一属性标记来实现

这样能让速度变量不公开

保持私有属性

但依然显示在编辑器中

这样,当我们回到编辑器

能看到它依然是一个组件的属性

还能在运动时改变其数值

本部分需要掌握的最后一个变量知识

是变量的位置的重要性

例如,目前我有速度变量

可以用它来影响我的移动方法

我已经将其设置为在检视面板显示

这样不用打开代码也能更改它

然而,如果我将此变量声明移动到update方法中

它就没用了

我不能在方法中声明序列化字段

也不能声明公共变量

为了让变量公用,可在类外读取

或可在unity编辑器内被打开

那它就需要在类中的全局作用域内显示

一般来说,我们会在类顶端,在所有方法前

声明所有的全局变量

变量处于正确的位置

就能在检视面板中显示

也能被类中的所有方法读取

 

[展开全文]

任务130:附加脚本到游戏对象

现在我们已经充分了解了

script(脚本)的含义与作用

再来看看除了让它们输出到日志外

其他的实际作用吧

这是《僵尸玩偶》游戏中的一个普通场景

在右侧有一个方块

呈现着奇怪的位置与非标准的角度

每个角度均倾斜45度

我们将使用一个脚本让这个方块

呈现一个特定位置与角度

然后再用脚本使其移动与旋转

我先创建一个新脚本

在project(项目)窗口中点击右键

选择create(创建)C#script(C#脚本)

我将此脚本命名为“translate androtate”

打开translate androtate脚本

我们可以添加所需代码

你可能发现它的格式与默认脚本有些不同

我已经移除了注释

并将它设置成与其他脚本相同的结构

我们的游戏中有具体标准

脚本也需要符合这一标准

如果你发现这一章中的脚本与你电脑上的不同

请记住我们只是改变了格式而已

在start(开始)方法中,要做的第一件事

是把挂载了这一脚本的游戏对象移动到原点周围

我们要将它放在原点附近,稍高一些

这样就不会碰触地面

我们可以通过修改position(位置)来实现

它是transform(变换)组件的一部分

与要求在括号中导入数据的方法不同

变换组件的位置信息需要直接导入数值

因此我们不使用括号

而使用等号为其赋值

现在位置值需要一个名为vector3的变量类型

我知道我们还没详细讨论过变量

vector3是一种复杂的变量类型

其中储存着X Y Z 值

很适合用来储存缩放与位置的信息

想创建一个vector3变量

我们只要输入“new vector3”即可

然后在括号里输入想给vector3的数值

我们想将对象移动到原点稍高的位置

所以将其赋值为(0f,2f,0f)

这会将其定位于XYZ轴上(0,2,0)的位置

你可能好奇数字后面的f是什么意思

我们还没说过浮点数

但只要知道,当我们在使用浮点数时

是vector3要求的

 

[展开全文]

第四节根据资源创建项目架构

  1. 就是划分好不同的文件夹放好不同的资源文件。对资源文件进行整理

2.Ctrl 多选,shift范围内选。

[展开全文]

快速搜索方法,包括文件夹归类,名称整理

Putting them in folder,organized by names,

tag asset labels 

[展开全文]

授课教师

讲师

课程特色

视频(229)
图文(9)

学员动态