unity3D如何设计一个游戏的陷阱系统

说明 想想做Unity3D SDK集成已经快2年了遇箌过不少很棘手的SDK,其中以运营商的SDK为主 在我的另外的一篇文章中提到移动MM在使用Unity打包之后找不到文件mmiap.xml的解决办法。 发生这种现象的最奣显的现象是: 使用IDE运行官方所给的Demo或者是自己做测试程序的时候,运行很正常 但是在使用Unity3D打包之后就会发现无法正常使用在logcat中查看僦会发现,大体都是找不到xxxx文件 举个例子来说: 在集成联通SDK的时候,就会报错:java.io.FileNotFoundEx…

这些需求分化出来不少组件类:嘫后为了解耦各组件的依赖关系特别是跨游戏对象的组件依赖,于是还额外引入了一个消息系统组件实际上就是用于实现观察者模式。每个个体对象都必须带一个消息系统组件且其他编写的组件类基本上都依赖这个消息系统组件。例如A个体用指向性技能对B个体进行釋放,则由A个体的技能系统组件发送消息给B个体的消息系统组件然后消息再转发给B个体的Buff系统组件,从而让B个体受到该Buf



《ATD》策划案部分摘取:

地步再想到Unity的GameObject-Component机制,于是最后我采用组合组件的方式来设计这几个游戏模型至于之前设计Skill机制的时候,为什么反而采用继承的方式原因如下:策划案里,

分析了策划案后显而易见里面划分了这4种游戏模型:

,塔最初想到的是使用继承的方式来实现这些游戏模型(如图):然而考虑到现在的英雄/怪物/陷阱/塔类型已经足够太多了而且以后还可能会扩展更多。若用继承的方式其派生类数量将到達一个小团队难以维护的地步。

最初想到的是使用继承的方式来实现这些游戏模型(如图):

然而考虑到现在的英雄/怪物/陷阱/塔类型已经足够太多了而且以后还可能会扩展更多。
若用继承的方式其派生类数量将到达一个小团队难以维护的地步。

D》的总体程序结构已经十汾明朗了下一篇应该是最后一篇,已经懒得再写多点了大概内容时将更详细介绍其中一些具体实现时出现的问题以及解决方案(包含┅些trick),还有一些工具暂时就先写到这。一、为什

再想到Unity的GameObject-Component机制于是最后我采用组合组件的方式来设计这几个游戏模型。

至于之前设計Skill机制的时候为什么反而采用继承的方式,原因如下:

Unity《ATD》塔防RPG类3D游戏架构设计(一)-KillerAery-博客园《ATD》游戏模型《ATD》策划案部分摘取:分析叻策划案后显而易见里面划分了这4种游戏模型:英雄,怪物陷阱,塔最

  1. 策划案里Skill的种类只有8种,所以需要编写的派生类比较少而渶雄/怪物/陷阱/塔所有种类总共加起来有二十多种。
  2. 实际上还有个设计Skill的思路就是把Skill设计成一个行为树,通过组合节点来生成一个Skill然而這个想法在当时被我二选一时舍弃了。

首先为了统一术语避免游戏模型和Unity的GameObject弄混淆,我们定义了一个称之为 个体(Individual) 的名词来表示一個游戏模型单位。

系特别是跨游戏对象的组件依赖,于是还额外引入了一个消息系统组件实际上就是用于实现观察者模式。每个个体對象都必须带一个消息系统组件且其他编写的组件类基本上都依赖这个消息系统组件。例如A个体用指向

那么如何表示一个个体游戏对潒呢?
首先我们需要编写一些个体游戏对象必要的组件脚本类

来改变显示效果。举个例子Buff特效管理器,通过监听游戏模型的Buff消息来給对应的游戏模型生成Buff特效对象。此时项目整体架构关系如图:是不是感觉有点像MVC视图?(笑结语至此《ATD》的

对于一个个体游戏对象,它可能由如下图构成:

一般来说行为和输入都应该放在一起统称为控制器然而实际上在游戏里,输入来源可能是玩家也可能是AI,因此把个体对象行为和输入分离是个好的选择

也就是说它得有属性,行为操控行为的输入,还得可以容纳Buff机制Skill机制和装备机制(实际被砍了)。

为和输入分离是个好的选择也就是说它得有属性,行为操控行为的输入,还得可以容纳Buff机制Skill机制和装备机制(实际被砍叻)。根据这些需求分化出来不少组件类:然后为了解耦各组件的依赖关系特别

根据这些需求分化出来不少组件类:

然后为了解耦各组件的依赖关系,特别是跨游戏对象的组件依赖于是还额外引入了一个 消息系统组件 ,实际上就是用于实现观察者模式
每个个体对象都必须带一个消息系统组件,且其他编写的组件类基本上都依赖这个消息系统组件

例如,A个体用指向性技能对B个体进行释放则由A个体的 技能系统组件 发送消息给B个体的 消息系统组件 ,然后消息再转发给B个体的 Buff系统组件从而让B个体受到该Buff影响。

最终个体游戏对象的组件依賴关系图:

写一些个体游戏对象必要的组件脚本类对于一个个体游戏对象,它可能由如下图构成:一般来说行为和输入都应该放在一起統称为控制器然而实际上在游戏里,输入来源可能是玩家也可能是AI,因此把个体对象行为和输

然后通过一个GameObject然后添加好模型然后放置一些组件从而组合出来一个个体游戏对象。

一个怪物个体游戏对象示例:


先说明一下全局游戏逻辑的全局并不是指变量的全局暴露,洏是说负责游戏世界的整体逻辑
全局游戏逻辑设计的话相对轻松一点:

设置:引入消息系统是为了让游戏逻辑可以监听个体对象之间的交互消息,从而做出一些符合游戏逻辑的行为例如,监听到基地个体对象死亡的消息应判断游戏失败。游戏逻辑比较多脚本都需要读入配置文件数据的功能方

  1. 首先为了更好管理个体游戏对象,引入了 对象工厂 来控制个体有对象的生命周期
  2. 金钱管理器 负责玩家的金钱数據管理,例如击杀奖励关卡结算奖励。
  3. 塔管理器 负责用规则限制塔的逻辑例如建造一个塔的位置限制,建造塔的金钱消耗
  4. 关卡管理器 负责生成每波怪物。

为了辅助这些逻辑还额外引入了消息系统组件路径管理器怪物生成器三个脚本。

《ATD》游戏对象目录设置:

限淛塔的逻辑例如建造一个塔的位置限制,建造塔的金钱消耗关卡管理器负责生成每波怪物。为了辅助这些逻辑还额外引入了消息系統组件,路径管理器怪物生成器三个脚本。构造如下:《ATD》游戏对象目录设置:

引入消息系统是为了让游戏逻辑可以监听个体对象之间嘚交互消息从而做出一些符合游戏逻辑的行为。
例如监听到基地个体对象死亡的消息,应判断游戏失败

只有8种,所以需要编写的派苼类比较少而英雄/怪物/陷阱/塔所有种类总共加起来有二十多种。Skill不是GameObject没有Unity提供的GameObject-Component机制,不太方便

游戏逻辑比较多脚本都需要读入配置攵件数据的功能方便动态更新游戏。

体逻辑全局游戏逻辑设计的话相对轻松一点:首先为了更好管理个体游戏对象,引入了对象工厂来控制个体有对象的生命周期金钱管理器负责玩家的金钱数据管理,例如击杀奖励关卡结算奖励。塔管理器负责用规则限制塔

此外脚夲应在Inspector面板应提供一些可调的逻辑参数,方便调试全局逻辑(例如金钱数调)

法肯定是用聚合,但是写起来很麻烦也很累赘这时候窗ロ函数就排上了用场。因为窗口函数不会像聚合一样将参与计算的行合并成一行输出而是将计算出来的结果带回到了计算行上。二、窗ロ函数的使用1、聚合和窗口函数


应为UI/HUD/特效/BGM各自编写一个 UI管理器/HUD管理器/特效管理器/音乐管理器
一是方便管理显示二是更好的与游戏逻辑/遊戏模型来交互。

然后也要为这些管理器引入 消息系统组件 用于辅助从而接受一些重要的消息来改变显示效果。
举个例子Buff特效管理器,通过监听游戏模型的Buff消息来给对应的游戏模型生成Buff特效对象。

的GameObject-Component机制于是最后我采用组合组件的方式来设计这几个游戏模型。至于の前设计Skill机制的时候为什么反而采用继承的方式,原因如下:策划案里Skill的种类只有8

此时,项目整体架构关系如图:

bject然后添加好模型嘫后放置一些组件从而组合出来一个个体游戏对象。一个怪物个体游戏对象示例:《ATD》游戏逻辑先说明一下全局游戏逻辑的全局并不是指变量的全局暴露,而是说负责游戏世界的整体逻辑

是不是感觉有点像MVC视图?(笑


至此《ATD》的总体程序结构已经十分明朗了,下一篇應该是最后一篇已经懒得再写多点了。
大概内容时将更详细介绍其中一些具体实现时出现的问题以及解决方案(包含一些trick)还有一些笁具。

承的方式来实现这些游戏模型(如图):然而考虑到现在的英雄/怪物/陷阱/塔类型已经足够太多了而且以后还可能会扩展更多。若鼡继承的方式其派生类数量将到达一个小团队难以维护的地步。再想到Unity的Ga

行释放则由A个体的技能系统组件发送消息给B个体的消息系统組件,然后消息再转发给B个体的Buff系统组件从而让B个体受到该Buff影响。最终个体游戏对象的组件依赖关系图:然后通过一个GameObje

我要回帖

 

随机推荐