- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
手游实战项目:3.道具管理器.doc
本篇开始,少说废话,多干事实。
????? 上次讲完了道具的设计,想必大家目前也有成千上万的道具等着上线,如果有效管理起这么大量的道具呢?答案是数据库。呃,难道不成重新建立一堆数据库表,然后每次都要加载记录然后赋值到道具中吗?答案是否定的,我们并不需要设计或者使用数据库,我们今天要做的就是,设计一个道具管理类,假装是个数据库就好了。
???? 新建一个C#脚本,重命名为?Item_Database_Manager
???? 首先,要将这个管理器设计成单例模式,这样保证全局的唯一性和信息的统一,首先添加如下代码,
?
static Item_Database_Manager idm;public static Item_Database_Manager Get_Manager(){if (idm == null){Global_Manager.InitAll();}return idm;}
?????? 简单到无法用言语来形容了,至于 Global_Manager.InitAll() 这个方法,以后再说明,简单来说,就是通过查询tag来寻找所有被设计成单例模式的实例,Global_Manager 是一个全局的管理器,管理管理器的管理器,后面我会给出代码,这里只要理解这么多就够了,以后遇到会再说的。
????? 所以,外部只要通过这个静态方法就能ref他的实例了,是不是很方便呢。
????? 管理器的作用就是管理,所以我们需要一些容器来保存道具们。
????? 我们这里简单使用数组就可以了,因为道具们属于静态数据,
?
public Item_Profile[] items;void Awake () {// 场景切换时不删除DontDestroyOnLoad(gameObject);idm = gameObject.GetComponentItem_Database_Manager();// 分配道具IDReSort();}public void ReSort(){// auto assign the id to itemfor(int i=0;iitems.Length;i++){items[i].item_id = i;}}
?
?????? 就如注释,就是这么回事。DontDestroyOnLoad 保证在切换场景是不需要删除这个对象,因为这个管理器几乎每个场景必备,所以频繁的加载卸载并无意义。配合茶水给出的 Global_Manager,智能加载 (即场景中若存在相同的管理系,则不会再次加载),从而保证全局有且只有一个这样的对象。ReSort 则是自动为道具分配一个ID,ID其实就是数组下标而已。
?????? 然后,我们要提供一个获取道具信息的方法,
?
// also referr to item idpublic Item_Profile Get_Item(int index){index = Mathf.Clamp(index, 0,items.Length);return items[index];}
?
??????? 根据ID获取道具,index = Mathf.Clamp(index, 0,items.Length) 这里做法可能并不准确,这里只是简单的裁剪了index的值,放置越位,但是一般来说,获取那些道具应该由caller来保证他的合法性,而不是管理器,当然,也可以修改成越位返回null,取决于你的程序架构。
??????? 基本上,管理器就这么回事了,看茶水的文章当然不会是这么肤浅的啦,作为报答大家对茶水的关注,这里提供一个设计道具时候的小技巧,先跟着做,后面再解释,
?
添加一下代码,
?
public Item_Profile empty_item;public void Create_Empty_Item(){if (empty_item){GameObject go = Instantiate(empty_item.gameObject) as GameObject;go.name = item;}}
?
???????? 然后在Scene中添加一个空的GameObject,然后挂载 Item_Profile 脚本,重命名为 Empty Item,然后保存在prefabs。Create_Empty_Item 方法提供一个捷径去创建一个新的道具GameObject,已包含挂载好的脚本,并且命名为item,方便在Hierarchy中查找。
??????? Done!!管理器设计完成,后面就是万众期待的Editor编程了,这里就不浪费篇幅来详细说明了,大家直接使用茶水给出的代码即可,代码也很简单,一看就会懂的了。
文档评论(0)