Controller(一)

一、Controller是什么?

        顾名思义,Controller就是控制器。它是玩家在游戏中的一个代理对象,也是玩家与游戏中人物或者AI之间的交互的桥梁。它的任务就是掌管人物或AI的所有行为。可以说Controller将人物和AI玩弄于股掌之间。

        Controller是派生自Actor,所以它理所当然具有Actor的基本属性Tansform,这使得Controller具有存在于游戏Level中的能力;具有序列化功能,这在根类UObject中有实现;具有网络复制功能,赋予了它在联机游戏中可以网络复制到服务器。

        在游戏Level中,Controller通常并不可见。什么?既然是Actor什么在游戏关卡里不可见?我们查看Controller.cpp文件源码发现,在构造函数中默认初始化SetHidden(true)如下图:

或许你会问既然是这样,为什么要默认是不可见的呢?              

嗯~   o(* ̄▽ ̄*)o   这个问题问得好.....

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        Actor本身不带有任何形状和颜色,只有在编辑器模式下能看到Actor白色小球图标。在游戏模式下看不见任何形状和颜色。它本身的作用就是一个中介,我们只关心它的功能,不关心它的长相(有大龄单身程序老哥顿时坐不住了,嗯~我的要求并不高,不要长相只要能玩就好, 然后去了洗手间,回来腿脚发麻)。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                

        总而言之,就算你看见它也没有什么卵用,所以干脆隐藏了。

二、生命周期

        既然Controller可以存在于Level中,那是否Controller是否属于Level的一员,随着Level一起生命周期开始到结束呢?答案是否定的,Controller存在于Level中,但不属于Level。

        在UE的世界观一文中,已经讲到,World有多个Level组成。由此说明Controller并不关心Level的是否存在。它属于World,它的身份等同于Level。

        所以Controller的存在与Level没有必然的联系,它是跨Level存在的一个局外人,时不时会介入Level内部和Level与Level之间的逻辑。

三、它为何这样设计,在UE核心框架里扮演什么样的角色?

        Epic在设计Unreal Engine之初的构想基于MVC(Model-View-Controller)架构模式。Controller将数据层Model和表现成View分开,实现分离的逻辑处理,这符合设计模式之单一职能原则。让开发者在阅读引擎源码的时候,条理更加清晰,让引擎架构者的设计初衷浅显易懂。

        Controller是unreal引擎源码核心框架中最为重要的类之一,它是玩家在游戏中的代理人,负责将玩家的操作传递给游戏人物或AI(例如玩家操作键盘移动或者攻击),也负责将人物和AI 的信息和状态反馈给玩家(例如游戏人物受伤后会触发游戏手柄震动)。

四、Controller类的具备的属性。

        

猜你喜欢

转载自blog.csdn.net/zhang1461376499/article/details/118112450
今日推荐