unity 简单通用游戏模式设计

好吧好吧,又谈到这个问题了,其实早就想写这个博客了,犹豫了好久。在设计游戏的时候我本人是很排斥什么游戏架构设计,mvc什么的,我只想马上动手就把自己的游戏玩法最快的用代码敲出来,还不会出无法挽回的错误,那么下面的步骤可以帮助你构建一个简单的游戏模式架构。

一。首先是数据存储类,如GameManager,UIManager,SoundManager等这些类,这些类是不销毁的,由于这些类为物体组件,用普通的单例模式容易出现实例化的冲突,因此可以首先加载一个数据场景,间隔一段时间后加载第二个正式场景,以后最多的返回也只能返回到第二场景,这样就解决了冲突问题

二。分场景控制类,每个场景中有可能要进行不同的复杂的控制,比如播放个动画,选择角色什么的。比如UI场景,该场景中主要以UI功能为主,设置音量,选择角色什么的,都在该场景中进行,因此可以用个UIScene类的做一些特殊的控制;正式游戏场景,比如在UI场景选择好了敌人,那么现在进入正式打击敌人,冒险什么的,可以建立一个PlayScene场景,该场景用来控制播放个动画次序什么的各种操作。

三。通用类的作用,比如UI控制中物体的隐藏与出现,跳转到另一个场景的操作,销毁物体的操作这些可以用一个GeneralController的集成这些函数,然后作为组件的形式添加到需要的分场景的场景控制的物体上,这一点尤其对UGUI的添加事件很有效。

四。观察者类与数据存储类的静态变量。比如游戏加载后要把当前的语言或者音量设置到相关物体上,那么寻找携带这些数据的Manange类的方式有自带的Find相关类;或者使用数据存储类的instance静态变量,判断该静态变量是否为真,如果为真,那么就说明该类的物体存在,直接调用该静态变量获取到相关需要的数据。因此相比较而言,使用instance静态变量更加可靠高效

五。查找多个物体的问题,为多个物体设置数据。这里涉及到在场景中寻找具有相同标签或者拥有相同组件的物体,这里最好的方式是为每个相同组件的物体添加一个观察者组件,该组件用于当物体生成时,调用相关的管理类,将自己存放到管理类的存储列表中,这样管理类就不用在场景中使用FInd方法去寻找这些物体了。

六。对象池。这里并非这篇博客主要内容,只是做个提醒,因为抛开性能问题,上面的的五条对一般游戏来说足够了。对一些长期生成的物体如子弹等最好做成一个对象池,从而提高机器性能。

七。托管程序。这里的托管和计算机语言的概念相类似。比如现在写一个类,这个类执行一段程序,将物体A移动到位置p1,结束后开启UI界面,选择几个物品,然后关闭UI,让物体A移动到p2,然后制造一场爆炸,过程结束。这个过程就好像做某个任务的过程,如果写这个过程那么移动的过程需要在update函数中执行,爆炸的过程也需要开启,但是如果都在update中执行和判断会导致整个程序相当臃肿。这里我们采用几种方式:第一种,托管和事件,即将如需要每帧执行的函数,就托管给某一个类,成为这个类执行协程。第二种,状态机与事件协同控制。在update函数中有两个状态标识符。state是最外层的状态,为0时update空状态,为1时,判断第二个标识符号modelState,根据modelState的值开启相应的过程,并且同时让state的值为2或者为0,如果开启的过程执行结束,那么可以为该开启的过程添加一个事件,用于让state为1,然后开启另一个过程 。这写过程也可以托管给其他程序执行。

 

posted @ 2019-04-22 23:27 小辉歌 阅读(...) 评论(...) 编辑 收藏