unity 简单通用游戏模式设计
好吧好吧,又谈到这个问题了,其实早就想写这个博客了,犹豫了好久。在设计游戏的时候我本人是很排斥什么游戏架构设计,mvc什么的,我只想马上动手就把自己的游戏玩法最快的用代码敲出来,还不会出无法挽回的错误,那么下面的步骤可以帮助你构建一个简单的游戏模式架构。
一。首先是数据存储类,如GameManager,UIManager,SoundManager等这些类,这些类是不销毁的,由于这些类为物体组件,用普通的单例模式容易出现实例化的冲突,因此可以首先加载一个数据场景,间隔一段时间后加载第二个正式场景,以后最多的返回也只能返回到第二场景,这样就解决了冲突问题
二。分场景控制类,每个场景中有可能要进行不同的复杂的控制,比如播放个动画,选择角色什么的。比如UI场景,该场景中主要以UI功能为主,设置音量,选择角色什么的,都在该场景中进行,因此可以用个UIScene类的做一些特殊的控制;正式游戏场景,比如在UI场景选择好了敌人,那么现在进入正式打击敌人,冒险什么的,可以建立一个PlayScene场景,该场景用来控制播放个动画次序什么的各种操作。
三。通用类的作用,比如UI控制中物体的隐藏与出现,跳转到另一个场景的操作,销毁物体的操作这些可以用一个GeneralController的集成这些函数,然后作为组件的形式添加到需要的分场景的场景控制的物体上,这一点尤其对UGUI的添加事件很有效。
四。观察者类与数据存储类的静态变量。比如游戏加载后要把当前的语言或者音量设置到相关物体上,那么寻找携带这些数据的Manange类的方式有自带的Find相关类;或者使用数据存储类的instance静态变量,判断该静态变量是否为真,如果为真,那么就说明该类的物体存在,直接调用该静态变量获取到相关需要的数据。因此相比较而言,使用instance静态变量更加可靠高效
五。查找多个物体的问题,为多个物体设置数据。这里涉及到在场景中寻找具有相同标签或者拥有相同组件的物体,这里最好的方式是为每个相同组件的物体添加一个观察者组件,该组件用于当物体生成时,调用相关的管理类,将自己存放到管理类的存储列表中,这样管理类就不用在场景中使用FInd方法去寻找这些物体了。
六。对象池。这里并非这篇博客主要内容,只是做个提醒,因为抛开性能问题,上面的的五条对一般游戏来说足够了。对一些长期生成的物体如子弹等最好做成一个对象池,从而提高机器性能。
unity 简单通用游戏模式设计的更多相关文章
- 简单Elixir游戏服设计- 游戏玩法介绍
抄以前的,做了点修改. 到目前为止,我们完成了玩家的数据和进程建模,现在介绍游戏玩法. 为什么我们还不做客户端接入.协议指定呢?为什么还没有网关和数据存储呢.在我接手的游戏, 这些通常已经定下来了,我 ...
- 简单Elixir游戏服设计-玩法simple_poker
上回介绍了玩法,现在编写了玩法的简单建模. 做到现在感觉目前还没有使用umbrella的必要(也许以后会发现必要吧),model 应用完全可以合并到game_server. 代码还在https://g ...
- 简单Elixir游戏服设计-玩家进程注册
上回说用Registry 做本地注册(跨服可以用syn,只是稍微麻烦点,需要模拟global注册机制,写个封装模块). 修改game_server 项目的mix.exs, 增加应用启动 def app ...
- 简单Elixir游戏服设计-玩家进程跑起来
有了玩家模型,我们试试让玩家进程跑起来. 需要搞个PlayerSupervisor来负责启动和监控玩家进程. defmodule PlayerSupervisor do use Supervisor ...
- 简单Elixir游戏服设计-创建玩家模型
删除model.ex 创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了. 选择 map 代表数据,是为了扩展数据结构,方便增加功能.struct也是可以的. add_num ...
- 简单Elixir游戏服设计- 创建项目
反正是写到哪算哪. 创建umbrella项目 mix new simple_game --umbrella 创建model项目 cd simple_game\apps mix new model 创建 ...
- 使用 Unity 3D 开发游戏的架构设计难点
Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛.但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D ...
- 信息安全系统设计基础课程实践:简单TUI游戏设计
简单TUI游戏设计 目 录 一 Curses库简介与基本开发方法 ...
- Unity《ATD》塔防RPG类3D游戏架构设计(二)
目录 <ATD> 游戏模型 <ATD> 游戏逻辑 <ATD> UI/HUD/特效/音乐 结语 前篇:Unity<ATD>塔防RPG类3D游戏架构设计(一 ...
随机推荐
- ElasicSearch(1)
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- ABAP-FTP-执行
1.界面 2.程序 ZFID0004_FTP_EXEC 主程序: *&------------------------------------------------------------- ...
- idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加“update” ...
- 权限控制框架---shiro入门
1.shiro控制权限的两种思想:粗粒度url级别,细粒度方法级别 2.shiro执行流程简介 3.案例 3.1shiro控制用户登录实现,登录其实就是shiro中的认证. (1)配置web.xml( ...
- transform(转)
转自:https://zhuanlan.zhihu.com/p/54356280
- 多层josn数据 修改
var aa = { a: 1, b: { c: 1, d: 1 }, e: [{ f: 1, g: 2 }, { h: 1, i: { j: 3, k: [{ l: 55, m: [1, 2, 3, ...
- java集合框架(1) hashMap 简单使用以及深度分析(转)
java.util 类 HashMap<K,V>java.lang.Object java.util.AbstractMap<K,V> java.util.Hash ...
- 数组中的逆序对(python)
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 牛客小白月赛12 J 月月查华华的手机(序列自动机)
---恢复内容开始--- 题目来源:https://ac.nowcoder.com/acm/contest/392/J 题意: 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机. ...
- 信号基础知识--FFT DFT
clc;close all;clear all; f0=10; fs=100; %采样率 t=1/fs:1/fs:2; %共两秒钟,共200个采样点.采样间隔T=1/100 y ...