开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

视频教程

关注:699

当前位置:游戏蛮牛 资源专区 视频教程

查看: 2880|回复: 20

[进阶课程] 【Unity进阶】Unity开发系列高级课程教程之有限状态机

[复制链接]  [移动端链接]
4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
发表于 2016-8-24 10:28:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 嘟嘟2016 于 2016-8-31 14:01 编辑

【Unity进阶】Unity开发系列高级课程教程之有限状态机
http://edu.manew.com/course/165


课程介绍
状态机是游戏开发必不可少的一种技术,不管是实现 AI 还是实现界面逻辑,使用状态机都可以大大简化我们的逻辑代码。本套课程我们从最简单的状态机开始,由浅入深地使用面向对象实现一个通用状态机,并且配有项目示例。

课程目标
1、理解状态、状态过渡、状态机的关系;
2、了解状态机的作用,能够使用状态机简化逻辑代码;
3、理解状态机中各个类的功能及作用,能够独自封装出这些类;

适合人群
1、已经完成《C# 语言基础》的童鞋;
2、已经完成《Unity 引擎基础》的童鞋;
3、有一定的编码经验;

免费 课时1:状态机概述 13:52
免费 课时2:Switch状态机 12:38
免费 课时3:使用Switch状态机 21:16
课时4:利用委托改进状态机 15:33
课时5:使用FSM实现新功能 20:52
课时6:面向对象的状态机 24:19
课时7:实现State类 21:10
课时8:实现StateMachine 17:38
课时9:实现Transition类 29:16
课时10:完善状态机 17:19
课时11:使用面向对象的FSM 17:29课时12:子状态机 17:04

【马步站桩】零基础学习Unity开发系列教程之C#入门        http://www.manew.com/thread-93307-1-1.html
【马步站桩】零基础学习Unity开发系列教程之C#基础        http://www.manew.com/thread-93352-1-1.html
【马步站桩】零基础学习Unity开发系列教程之Unity引擎基础        http://www.manew.com/thread-93418-1-1.html
【Unity进阶】Unity开发系列进阶教程之动画系统       http://edu.manew.com/course/176


回复

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-8-24 10:30:09 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

1

主题

25

帖子

39

积分

Rank: 1

UID
150134
好友
0
蛮牛币
9
威望
0
注册时间
2016-5-28
在线时间
14 小时
最后登录
2016-9-19
发表于 2016-8-24 15:40:40 | 显示全部楼层
感谢分享

回复

使用道具 举报

4四处流浪
338/500
排名
7273
昨日变化
2

0

主题

89

帖子

338

积分

Rank: 4

UID
41866
好友
0
蛮牛币
212
威望
0
注册时间
2014-8-26
在线时间
119 小时
最后登录
2017-8-1
QQ
发表于 2016-8-25 20:42:46 | 显示全部楼层
然后呢 视频在哪???下???

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-8-26 13:26:15 | 显示全部楼层
fjqzlqh 发表于 2016-8-25 20:42
然后呢 视频在哪???下???

蛮牛教育平台就可以观看,链接一楼就有!

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-8-29 14:08:29 | 显示全部楼层
本帖最后由 嘟嘟2016 于 2016-8-31 13:55 编辑

一、状态机

状态机能够分离逻辑代码,提高代码的可维护性和重用性

本节课我们来学习,在Unity中使用状态机,来实现一些逻辑的划分,首先我们需要了解一下,为什么开发的时候使用状态机?

之前有过开发经验的朋友,可能会知道在应用开发中,最常用的一种框架就是MVC框架。

也就是视图模型控制器这个框架,但是我们在游戏开发中,会发现很难去应用MVC框架。

是因为我们的游戏开发,并不像网站或者其他应用开发那样,模型,视图和控制器在游戏开发的过程中,它们的界限很模糊,划分的不是很清晰。这是因为我们游戏类型的不同,游戏本身底层架构就会相差很远!而且在游戏中,不同的游戏对象往往存在大量的交互的这种现象。

所以,这种垂直的MVC框架就不太适用于游戏开发。但是我依然可以在游戏开发UI部分使用MVC框架。

除了UI,我们也需要某种程度上去分离游戏中的一些程序代码。比如说我们游戏中需要些一个脚本来控制角色的一些逻辑。角色的移动,攻击等属性时,我们不可能把代码放在一个脚本中完成,我们肯定要通过一定的方法,把它们划分成多个脚本或者说多个部分,依次来实现。因为这样把复杂的代码划分成一个一个小部分去实现,可以提高我们代码的可维护性,以及重用性,这也就是为什么我们要使用状态机的原因!

状态机就可以帮助我们分离逻辑代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-8-29 16:15:18 | 显示全部楼层
本帖最后由 嘟嘟2016 于 2016-8-31 13:56 编辑

二、有限状态机

有限状态机(FSM)简称状态机:FSM的状态是有限个数的

有限状态机就是为了表示有限个状态,以及这些状态直接的过渡行为的一个模型。在游戏的开发过程中,有限状态机能够将一个复杂的功能或者说复杂的逻辑简化为若干个稳定的状态!之后,在这些状态中进行事件的判断。

举一个例子:以人物角色为例
人物角色我们使用状态机来实现人物的复杂的逻辑的话。我们首先会根据我们的游戏玩法或者功能,来把游戏角色划分为不同个状态。如游戏角色处于闲置的状态,也有可能处于攻击的状态,可能处于行走的状态,可能处于副本的状态,交接任务的状态等等……

我们把这些逻辑代码都按照状态来划分开来之后,我们在单独在某个状态中,实现特定的代码,如果把这些游戏角色划分出有一个是战斗状态,只要战斗相关的代码我们都会放在战斗状态中去实现。肯定不能放到行走的状态中去实现的。

这个就是使用状态机来帮助我们逻辑代码进行分离。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-8-31 13:58:01 | 显示全部楼层
举例:灯泡的状态图


灯泡分为两个状态:开和关。在任意时刻,灯泡要么处于开的状态,要么处于关的状态。如果我们当前灯泡是开着的,如果我们想把灯泡关闭,我们只需要关闭开关就可以了。反过来,如果我们当前灯泡是关着的,我们想要打开灯泡,只需要打开开关即可。
在这个灯泡的状态图中我们可以分类出两个状态,这里面的状态(State)就是为了存储灯泡的一些信息的或者执行某些动作。
如果我们从开的状态切换大关的状态这中间就叫状态过渡(Transition)
状态过渡就是用来描述:状态直接的转换的。
我们关闭开关和打开开关之间就是状态过渡的条件,它们的作用就是用来触发一个状态过渡的,我们称为过渡事件(Event)!
我们在开或者关的状态中,还会有一个动作,这个动作可能是持续执行的或者一瞬间执行的,称为动作(Action)!
图片中所有元素组合到一起,就是一个状态机!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

排名
32147
昨日变化
91

0

主题

64

帖子

87

积分

Rank: 2Rank: 2

UID
120581
好友
0
蛮牛币
40
威望
0
注册时间
2015-9-1
在线时间
18 小时
最后登录
2016-10-26
发表于 2016-9-3 21:54:27 | 显示全部楼层
希望可以帮到自己,提高自己。

回复 支持 反对

使用道具 举报

4四处流浪
327/500
排名
7436
昨日变化
5

0

主题

148

帖子

327

积分

Rank: 4

UID
157458
好友
0
蛮牛币
478
威望
0
注册时间
2016-7-18
在线时间
52 小时
最后登录
2017-1-20
发表于 2016-9-5 20:30:49 | 显示全部楼层
路过,看看。。。。。。。。。。。。。

回复

使用道具 举报

7日久生情
1832/5000
排名
1114
昨日变化
3

18

主题

408

帖子

1832

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
88581
好友
0
蛮牛币
8365
威望
0
注册时间
2015-4-2
在线时间
618 小时
最后登录
2017-10-18
QQ
发表于 2016-9-12 16:52:48 | 显示全部楼层
有时间过来看看,希望有帮助!
[发帖际遇]: jiliangstc2012 在网吧通宵,花了 3 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-9-28 11:09:57 | 显示全部楼层
[size=12.0000pt]三、回到Unity中进行演示——把灯泡这个功能Unity中实现一下
首先为了项目准备了一些材质球,然后我们就开始

在场景中创建一个Plane——然后我们把Plane染成绿色,然后在创建中,创建一个Cube,给Cube染一个紫色,然后我们调整摄像机,对准Cube

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

4四处流浪
436/500
排名
7350
昨日变化
8

9

主题

115

帖子

436

积分

Rank: 4

UID
162961
好友
6
蛮牛币
1514
威望
0
注册时间
2016-8-18
在线时间
183 小时
最后登录
2017-3-22
 楼主| 发表于 2016-10-17 15:56:47 | 显示全部楼层
为了能实现更明显的效果,我们删除默认的光源——添加一个Point Linght点光源,然后条件点光源的位置和大小。
如果要实现开关的效果,我们对intensity进行控制!
准备工作做好之后,接下来我们添加一个脚本,用来控制灯光——灯光控制器!
当按下键盘的O键 灯打开,当按下键盘的C键灯关闭。
首先我们新建一个C#脚本——命名为LightController

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x

回复 支持 反对

使用道具 举报

排名
20560
昨日变化
16

0

主题

16

帖子

84

积分

Rank: 2Rank: 2

UID
163065
好友
0
蛮牛币
89
威望
0
注册时间
2016-8-19
在线时间
52 小时
最后登录
2017-8-17
发表于 2016-10-21 14:09:34 | 显示全部楼层
帖子写的不错

回复

使用道具 举报

3偶尔光临
161/300
排名
9716
昨日变化
8

0

主题

22

帖子

161

积分

Rank: 3Rank: 3Rank: 3

UID
180164
好友
0
蛮牛币
153
威望
0
注册时间
2016-11-2
在线时间
59 小时
最后登录
2017-8-23
发表于 2016-12-24 10:10:32 | 显示全部楼层
6666666666666666666666
[发帖际遇]: 一个袋子砸在了 528432887 头上,528432887 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表