Zemi
2025-09-19

第一周#

这周参加了Zemi的第一次,教授大致介绍了下zemi中要做的事情,以及我需要确定我的研究课题。

关于我的研究课题其实在大三上学期的时候就已经构想过了相关的内容,目前是打算制作一个俯视角2d动作rougelite游戏,然后在里面搭载AI,利用AI自主进化其中的怪物,让怪物的种类变得更多样,游戏的丰富度更高。

目前游戏的名称打算叫做《EvoDungeon》也就是进化地牢,打算和身为画师的朋友一起参与制作。整体的简单介绍就是这么多。

2025.09.19#

初次zemi发表了一下自己的课题题目,大致内容是制作游戏和,利用AI来跑绘图模型,然后尽量制作出一个可以生成出游戏素材的软件。


第二周#

本周的事情不多,简单去查了下资料,其中尤其是对于AI方面的知识。

打算采用自己绘制训练数据的方式,然后通过AI产生创意来产出新设计,由自己再重绘进行完善,以此来丰富训练数据。


第三周#

本周主要是绘制了8张原创的像素图素材,然后配置好了AI训练的环境。

AI训练环境配置相关

  • 采用SD-Trainer进行AI的训练
  • 底模使用SD1.5
  • 训练出的模型是Lora
  • 生图检验是使用的sd-webui-aki

暂时初步使用模型跑了一些图片出来了,是个不错的开端。但其中伪像素问题明显。


第四周#

本周是第三次进展报告,主要是采用了几张上周模型生成的图片创意,进行了重绘

其中对于图片的解析度更换到了512px,将学习步骤增加,同时重新考虑了tag的写法


第五周#

本周是AI和游戏的双线程展开

AI相关#

AI这边,将上周更新的tag写法融入到了实际训练中,但效果并非很好。让我考虑会不会是图片素材的原因,所以我试探性的加入了一些普通像素图,并非自己的原创图片,试图让模型更好的理解像素图,同时更好的分析自己的像素风格。

游戏相关#

游戏方面,本周初次开展,初步完成了HPBar和StaminaBar的设计。包括主角的形象也已经大致敲定。

游戏的代码实现方面,继续采用了自己之前制作游戏时使用的statemachine管理方案,但本次zemi中有足够的时间进行研究,我可以对于代码的写法,功能分区,优化方面下手。

这次采用的statemachine和往常的最大区别在于功能职责的分区

如果说之前的是为了逃避学习unity中的animator相关功能采用的state分区,那么这次才是真正的把各个状态的职责全部落实到了。

例如将行走奔跑逻辑不是放在controller里面,而是放置在对应分区中。

同时对于玩家prefab构建的制作也进行了优化,由于这次游戏是俯视角2d战斗类型,其中人物模型不负责实际的攻击处理,而是转由手中的的武器进行管理,所以我将玩家分为了两部分,武器和人物,包括由于相关状态数值其实也可以单独分离出来,于是将status单独分离进行了管理。


第六周#

本周由于进行了就职相关的准备和其他的事务,用在zemi上的时间很少,很对不住。

大致完成的是,武器的瞄准方向,武器会根据鼠标的相对世界坐标进行瞄准,其中实现方法是,重新拉一个不输出画面的camera,然后捕捉camera上鼠标的相对位置,然后将坐标转化为武器旋转的角度,从而来实现瞄准。

其中对于核心部分的ScriptableObject,GeneSystem相关的进行了设计,初步想法是,当玩家捡起Gene凋落物时,游戏暂停,同时跳出UI,左边为Gene的buff增强部分,右边为武器动作相关部分,通过选择可以让Gene作为可装备物品或者是单纯的buff存在。

AI方面,由于拿到了新的显卡,整体没有遇到太大的问题,主要是对于各参数的调整实验,暂时长时间都会是处于研究参数的阶段。


第七周#

本周成功将游戏的武器系统完成。

在以前的测试版开发中,对于Gene系统的动作切换是采用的clip pool方案,简单来说就是,把所有存在的动作动画clip全部都扔到玩家的动画控制器中,再对于每个动画clip进行编号,读取装备的Gene来改变调用参数数字来索引对应动画clip。

现在的实现方式,采用的是Animator Controller Override方式。具体的实现逻辑是,预制一个简单的controller来配置出基本的动画构造,然后在脚本中利用ACO实现实时在内存中新建并替换控制器中clip的方式来实现。

两种方式对比,各有优劣,对于小体量的动作模组来说,第一种无疑是最方便快捷的制作方式,但是如果动作模组过于丰富,则会导致animator pool的臃肿化,同时造成维护困难以及难以查看的问题。而新方法,由于采用的是实时替换方式,所以本质上的控制器还是只有那几个基础部分。直接替换clip无疑是最方便的,而且对于性能来说是损失最小的?可能。而且现在这套实现方法最关键的在于拓展性。如果未来我还制作其他的游戏,也许还能利用w。


第八周#

本周主要完成了DamageManager部分,其中部分可以分为

  • AttackTrigger事件
  • DamagePacket构造体
  • IDamageable接口
  • ApplyDamage函数

DamageManager#

DM是负责管理游戏全局中战斗事件相关的管理者,攻击伤害的计算,或者是相关状态异常的计算(可能单独分离出来)全部在这里完成。

外部使用ProcessDamage函数来向DM发送计算申请,然后同时记录攻击发起者。

AttackTrigger#

AT是在动画clip中开关碰撞箱使用的函数事件,记录一次开合中的所有发生碰撞的可伤害物体。

DamagePacket#

DP有两种,但是都是记录了和Damage相关数据的数据包

DamagePacket_Info#

DPI中记录了,初始攻击者发送的攻击伤害数据包,其中蕴含了伤害相关变量以及攻击者的信息

DamagePacket_Result#

DPR中记录了由DM计算完毕的最终伤害数据,发送至各对象的Status中,来对相关变量进行改变。

IDamageable#

IDble是供所有可以伤害物体使用的开放式接口,DM会检测这个接口。

ApplyDamage#

IDble接口中的函数,对于物体加上hurtbox,再检测相关status,死亡状态相关,来判断是否需要进行实际的受伤判断,同时管理受伤跳字。


第九周#

本周完成了背包系统和简单的UI相关,主要部分分为

  • Inventory功能
  • Backpack功能
  • UIManager
  • GeneSlotUI

Inventory#

玩家持有的所有道具数据全部采用列表的形式保存再这个单例物体上,记录物品的SO以及对物品数据进行删减更改,并通知Backpack。

Backpack#

玩家所持有的可拖拽物体,全部在背包中放置,尺寸是基于Inventory的最大容量大小进行设计并自动生成的,读取其中的SO并在Backpack中利用可拖拽物品的prefab来制作出搭载单独SO的可拖拽物品。

UIManager#

专门为了控制和UI相关事件以及操作的Manager

GeneSlotUI#

拥有三个槽位,分别对应实际脚本中GeneSlot的123(未来可扩展),将装载的可拖拽物品的SO读取,并发送信息到实际的GeneSlot脚本中。


第十周&第十一周#

由于准备koei tecmo的早期选考初次面试,导致缺席了一次zemi,所以两周的内容汇总到一起。

在第九周的最后部分,设想了接下来想做的事情,是制作掉落道具。

我们的掉落道具比较特殊,是拾取之后会跳出面板,是作为buff直接给加入status上作为buff存在,还是进入背包作为道具存在。

为了实现这一部分的想法。我们首先先制作出物品拾取系统。

我的想法分为这几部分

  • 构建新的player子对象,用于检测掉落物品
  • 构架掉落物品的脚本
  • 构建一个新的ui面板,左右分为两个大按钮,然后再在大按钮的基础上构建左右两边的ui显示
  • 构建一个新的Manager,用于控制掉落物的转变选择
同时在制作时发现一点,由于我们的选择页面是一个新的ui面板,ui的开关时交由新的manager控制管理,因此这个manager里面也有UImanager的逻辑,为了避免冗余以及添加无用的工作量。我决定对于所有UI新加一个新的接口,用于全局管理。

第十二周#

光荣的面试落选了很伤心,整体没有什么动力,但是意识到自己可能需要更加努力的把游戏作品做出来所有还是打算更加的拼一点吧。

本周对于buff系统的实现做了一些想法
由于我们要实现将buff从GeneSO中获取,然后计算堆叠层数以及交给manager实现最终buff增益计算再提交给玩家status,我们采用了新的方式
-将Gene中的StatBuffs分离成为一个新的cs,然后在Gene中引用
-StatBuffs里面实现数值的逻辑实现和堆叠计算
-新建一个BuffInstance,用于读取Gene中的buff,并判断是否为同一buff的堆叠,并调用方法实现堆叠计算。
-StatusManager中实现全部和Status相关的计算逻辑
-更新p_Status,让其中显示的Status均为实际操作时的数值
-新增一个BaseStatusSO,设置玩家的基底数值,如果有局外成长时则可以更新SO
-对于SO有一点简单的想法设计,我们每次对于SO进行更改,由于没有记录数据,所以是不可逆的,但是如果未来实现可自由分配的加点式局外成长逻辑的话,我们需要有所记录,对于那部分的想法,我觉得可以利用一个专门的SO或者是其他的记录方式来详细记录每一种对应加点的具体数值就好了。

这周的目标就是将buff系统做出来,同时做出一个简易敌人,让其能够实现完整的物品掉落,让我们整体的流程可以实现,战斗->掉落->选择->强化的一整套完整游玩。


第十三周#

本周制作完成之后就是最后一周的zemi了,没想到意外的很快。游戏整体大致框架其实都已经做好了,目前完成的部分有基本的攻击,GeneSystem,buffSystem,剩下的主要的部分就是怪物AI和地图相关的生成了。这两个部分打算寒假的时候继续制作,而且整个游戏项目其实是作为毕业作品来的,所以整体的周期会拉的很长,zemi结束后到下学期的部分如果有更新会先在这里作为番外更新,之后开学了的话就会新开毕业作品相关post来进行继续的更新。

那么废话不多说,现在就开始我们这周的主要制作想法。

目前打算的是把上周完成了的沙包敌人给拓展为真正可以动起来的敌人。暂时的想法就是这些,打算采用的构造方法依然是StateMachine + SkillPool的方式来进行。用SM来控制行为,SP来实现攻击想法,整体合在一起就是一个完整的敌人AI了。剩下的打算做一下补完,基本UI的制作还有想实现一下buff状态栏和在gene里面定义图标色彩的功能。

时间到了发表的时候了,尽力了但是可以游玩的demo还是没能实现,对于整体的敌人AI方面做了更新更完全的构思,只能说目标游戏的体量不一样,不想做出太讷的东西,所以没有办法,打好游戏基础框架才是重要的。从中也学习到了很多东西。


那么这篇博客其实到这里也就结束了,学期过的好快,感觉自己的时间越来越少,希望未来能够把这个游戏顺利在毕业前制作完毕吧,包括AI方面部分,双线进行,甚至三线?这个博客本身也是同步在制作的,所以自己的时间越来越不足够。

虽然课程结束了,但是制作会继续,假期中的制作部分我会在这篇博客追加新的番外篇。(2025/12/22)

连接中...

...

...

加载歌词中...

00:00 00:00

播放列表

(0)