战棋战略制作组

创建于:2022-06-27

创建人: mioku

16 信息 15 成员
海量的小元素汇聚成巨大的历史流向,一只蝴蝶扇动翅膀。在庞大的世界框架中纵横捭阖,与偶然的随机性和必然的历史对抗,这就是大战略的魅力!
mioku@战棋战略制作组 的内容(查看所有内容
[策略][战棋]地标和提示图标!基于兴趣开发的策略战棋游戏开发日志~ 十三
mioku 2023-05-11

又是拖了好久好久的更新日志,最近一段时间优化了一些数据的结构,制作了重要地标的功能以及单位和地标的提示。

首先是地标建筑内容,现在只制作了村庄和城堡两种建筑

村庄与城堡

玩家可以在占领的地标建筑处招募单位,同事不同的地标也会提供不同的资源收入以及防御加成(等待后续进一步细化)。

进攻城堡

同时也加入的敌对单位攻击和夺取地标建筑的AI行为,在玩法上,地标建筑将会是玩家和敌人争夺的重点。


随后要介绍的是一个提示模块,单位和建筑地标将会显示一个对应的图标,以便玩家直接观察(图标是随便找的免费资源,有些奇怪还请见谅,要是有什么做图标的建议欢迎评论哦!)

图标展示

目前计划图标会显示三个关键内容即:标志、阵营颜色、血量。当出些各种情况单位或地标建筑发生变化时,图标也会相应改变。

敌方占领了一个村子!

这就是近期制作的一些便于展示的内容了,在下最近发生了人生重大事件,不住沉迷其中,开发进度十分缓慢。不过项目会努力制作下去的,敬请期待!要是有交流建议或是协作意向欢迎联系我哦!! QQ:2763686216

(转发自:原日志地址
[策略][战棋]敌对AI行动!基于兴趣开发的策略战棋游戏开发日志~ 十二
mioku 2023-02-14

    首先介绍一下使用的功能库ReGoap(仓库地址:https://github.com/luxkun/ReGoap),ReGoap是可用于Unity的一个Goap库。Goap(Goal Oriented Action Planning)即[以目标为导向进行行动计划],简单理解就是给出一个目标,Goap会根据可采取的行动制定出实现目标的计划。虽然说起来很简单,上手还是需要做不少理论准备和实践测试的。有空我可能会写个ReGoap库内主要内容的使用介绍(先埋个坑)。

    接下来我会根据Goap制定计划的两大关键词来介绍一下目前实现的功能。这两大关键词即:Goal(目标),Action(行为)

    从一个战棋游戏角度来看,单位的Action(行为)总结来说主要是移动和攻击(休整、撤退等作为扩展类的策略先不考虑)。而单位的Goal(目标)大概可以归纳为防守,进攻,巡逻等等。通过调整目标之前的优先度,从高到底计算目标是否可行,计算出实现优先级的最高目标的计划。一轮Goap就算是完成了。

例如:

我们为红方步兵设置守卫营地目标的优先级为5,而攻击敌人的优先级为10。

而红方骑兵则设置守卫营地目标的优先级为10,攻击敌人的优先级为5。

行动逻辑展示

红方步兵行动时,攻击敌人的优先级更高,因而采取了攻击目标.Goap会为其制定计划:移动至蓝方步兵身旁->攻击蓝方步兵->完成目标。

红方骑兵行动时,守卫营地的优先级更高,所以采取守卫任务.Goap会为其制定计划:移动至营地->完成目标。

通过补充更多的行动和目标,处理好目标的优先级,一个简单的AI系统就完成了!!

此外,行动也具有Cost(花销),细化行动的花销可以使Goap制定出相对更优的计划。例如在移动这个行动中,移动的距离,目标点的地形都可以成为花销的计算参考。

除了AI行为,在长期断更的过程中顺便简单实现了游戏存档,回合控制等等周边功能,没什么好看的就不作展示啦。


    本次展示的AI功能还十分简陋,只有少数几个行为和目标,好在支撑更多扩展内容的框架已经搭好了。上手REGOAP真是花了不少时间(这个库的文档写的太简略了,上手使用走了不少弯路),在断更的两个月里无数次的调试和啃源码真是很头疼。晚些我会试着写篇使用介绍看看能不能帮上其他感兴趣的人的忙。

    已经是2023年啦!这个尚未命名的策略游戏也缓慢的制作了近半年的时间,虽然依旧很简陋,但我会继续制作下去的!要是对开发有什么建议,或者有兴趣合作的话(好想要美术和数值策划队友呀!)欢迎联系我! QQ:2763686216






(转发自:原日志地址
[策略][战棋]面向机制与单位行动优化!基于兴趣开发的策略战棋游戏 开发日志~ 十一
mioku 2022-12-13

    之前的日志中,已经初步实现了单位的移动功能,但移动路径的计算十分死板,也没有多段移动的功能。于是就添加一下移动的中转功能。现在移动可以通过中转命令多步计划了。鼠标右键则可以撤销上一步选择的路径。
多步移动

    在为单位下达移动命令的同时,也可以通过一个六向按键来调整单位的面向,这就是面向机制的基础呈现啦。(转向效果粗糙至极,原谅我,以后会慢慢优化的 ><||)

单位转向


    单位会转向之后。就要详细讲一讲面向的区别了。单位的面向方向当然就是一个六边形单元格的某一边。对于一个单位而言,其正面以及该面相邻两面的方向就是“正面”,单元格的另外三面方向就是“背面”,此外在两个区域之间有一个中间区,就是“侧面”了。

单位方向


    之后的战斗机制中,不同方向的攻击所造成的伤害会有很大的区别。机动性强的单位将会具有相当的威胁,将单位集中部署组成一定的“阵型”,互相掩护脆弱的侧后方也就变的必要了。


    制作面向机制时,我发现使用两个坐标描述六边形网格的单元格并不十分方便,于是引入了第三个坐标。描述起来还是有一些理解成本的,简单的来说就是将闯过六边形各两面的三条轴线看作是坐标轴,将原来二维的坐标稍作一定的计算就能转换为下图的样式。(这个转换过程完全照抄了第一篇日志分享过的文章,站内也有翻译:https://indienova.com/indie-game-development/hex-map-part-1/)

三维坐标的六边形网格


    这种三维的坐标系有一个极好的性质,就是 X+Y+Z=0 ,即单元格的三个坐标之和必为0。这就给寻找单元格的邻居、判断单元格在单位的哪个方向、判断两个单元格直接的间隔数量等等常用的单元格逻辑处理提供了方便。比如可以通过一下公式判断两个单元格A与B的距离:(|A.x-B.x|+|A.y-B.y|+|A.z-B.z|)/2。根据这个公式也可以通过(|A.x-B.x|+|A.y-B.y|+|A.z-B.z|)/2=distance来获取A单元格在distance范围内的邻居B们的坐标。


以上就是近期的开发内容了。最近看到了许多玩法十分独特的游戏日志,让我不禁有种选择了一个笨重的制作题材的想法。不过,开发本来就是做自己喜欢的游戏嘛!随着游戏基础流程的逐渐实现,我也会加入更多独特的机制,来制作一个稍显“独特”的策略游戏!许多效果的实现粗糙简陋,十分感谢你能看到这里!最近一段时间很忙,摸鱼时候看了不少敌人AI的实现方式,但愿不要多久就能发出下篇敌人AI的日志吧!

要是对这个项目有兴趣,或者有什么建议的话,欢迎联系我哦! QQ:2763686216

(转发自:原日志地址
[策略][战棋]近期小结与开发目标!基于兴趣开发的策略战棋游戏 开发日志~ 十
mioku 2022-12-03

首先必须重新描述一下现在的开发目标:

    在最早的时候,我的开发目标是制作一个策略模式类似(欧陆风云/十字军之王),用SRPG玩法表述一场战役的大策略与局部战略并存的游戏。很可惜,我要反悔了。大战略和SRPG在玩法上的缺乏很强的关联感,反复权衡以后,开发目标将会以SRPG为重心。策略内容有了新的想法,会在之后阐述。

游戏概述:

    背景 塔林吉亚王国曾盛极一时,然而由于近十年的内战与外部介入,王国已然四分五裂。首都【洛伦堡】也已落入强领法伦帝国之手。王国的灭亡似乎已经是事实。然而,有一支不起眼的队伍从未受战火摧残的南部山区而来。发誓要驱逐一切分裂者与侵略军,光复王国,或是在废墟上重塑秩序!

    策略流程 在游戏流程中,玩家将会扮演队伍的领军者(一位军头/老将/甚至是公主),带领部队从南方出发,逐步向首都【洛伦堡】推进,沿途会有许多随机性的分支事件需要玩家选择。当进入战斗时,玩家会带领少量近卫军进入战斗,在当地招兵买马直到实现作战目标,获取胜利光复该区域。

    战斗流程 战斗则会以六边形网格地图的SRPG玩法呈现,玩家需要夺取地区内的资源点来征召更多部队。谨慎的使用有限的部队实现战斗目标.

往期开发内容:

地图风格

    在最早的两篇日志中,我实现了游戏地图生成以及地图编辑器功能。地图模型风格以Low Ploy为主,地块分为地貌和地形两个特点,地貌决定了单元格的贴图外观,以适应不同地区的颜色风格,而地形则是一块地形特殊效果的主要决定因素。

开发日志:https://indienova.com/u/mioku/blogread/31552

    地图数据将会以文件格式存储在本地持久化存储,可以方便地图设计,也可以在日后实现玩家自己编辑地图的功能。

  开发日志:https://indienova.com/u/mioku/blogread/31588

    随后的日志集中在开发作战单位相关的功能。作战单位需要初步准备的内容非常多。首先我制作了一版数据导入工具,以将用xlsx文档编辑的数据导入编辑器中 。

开发日志:https://indienova.com//u/mioku/blogread/32954

    在准备好初期的单位数据后,制作了允许玩家选择不同兵员,以及选择配置的装备以应对作战情况的单位招募功能。

开发日志:https://indienova.com/u/mioku/blogread/32972

单位招募


    随后制作了单位移动与攻击功能,并在过程中完善了伤害计算公式,数值策划模型等等单位数值相关的细节实现。

开发日志:https://indienova.com/u/mioku/blogread/33049

Image title


近期目标:

  1. 玩家操作反馈非常简陋。游戏内有大量的内容使用的UI十分简陋,或是缺少UI的提示。在接下来的开发过程中会逐步优化,同时很多动画和玩家的操作反馈十分单板,在我熟悉Feel插件后,会有进一步的细化。
  2. 敌对方单位的行动。玩家操作单位的功能基本处理完毕后。就得让敌人动起来了。笔者目前打算使用行为树(Behavior Designer)来制作敌对单位的AI行为。事实上笔者对这类内容还未接触过,很欢迎dalao给出一些介意!
  3. 数值平衡优化。数值已经设计出了第一版,但平衡性非常差劲。很感谢一位策划朋友的帮助。接下来我会试着制作一版数据模型,制作一版平衡性更高的数值。

    到写本篇小结的时候为止,我已经开发这个项目3个多月了。由于是摸鱼或空闲时制作,开发速度还算在预期内。制作过程中,遇到许多从未接触,或无力解决的问题,很感谢许多朋友的帮助。独立游戏开发的社群真是有许多热心给与帮助的朋友!非常感谢!!接下来的一段时间便会着手推进近期目标中提到的内容。但愿在第20篇日志的时候,能够初步完成SRPG内容的玩法雏形。

    尽管实际开发过程大多时候很费脑子。但着手解决许多问题,丰富自己的技术力。结识一些兴趣相投的朋友。或是看着往期开发日志,逐步堆积起来的项目内容。都有相当不错的正向反馈。我也因而乐此不疲,还要继续加把劲啊!要是你也有想要制作的内容。可以着手试试哦!

最后要是对开发的项目感兴趣或者有建议的朋友,欢迎联系我! QQ:2763686216。

(转发自:原日志地址
[策略][战棋]攻击机制!基于兴趣开发的策略战棋游戏 开发日志~ 八
mioku 2022-11-26

最近一段时间的完成内容大概如下:

  1. 制定数据模型,完成第一版装备数据.
  2. 完成单位的动画控制,方便及时调用
  3. 实现了一个初期的伤害计算公式
  4. 制作了单位移动攻击的简单呈现

让我们一个一个来讲:

1.第一版的装备数据已经策划完成了.尽管数值平衡相当糟糕.不过总算能将攻击机制推进下去了,在完成了数值策划后,单位可选的武器也明显变多了.

来个铁罐头骑兵!

重装斧骑兵还是很有压迫力的吧!

2.本人对动画控制器(Animator)的了解很浅,在之前的制作过程中已经做过好几版的动画控制器,但在切换控制状态时始终有些不顺手.最近在深入了解了一下Animator相关的参数后,采用了Any State大法,控制机制果然简单很多.


AnyState大法

在策略类游戏这种单位动画切换已频繁,也几乎没有过渡要求的类型中,Any State方法还是蛮不错的,不过我对Animator的实施方法所知还是有限,欢迎有dalao给出建议!

3.在之前的一段时间里,我反复纠结于伤害计算的公式类型.查看了一些资料后决定使用 基础伤害*(1+伤害影响) 的这种类型,目前只是简单的实现了一下,伤害公式F大致为:

F=基础伤害*[1+D(守方专项加成,功方专项加成)*防守效果系数]*[1+攻防能力加成*进攻效果系数]

其中函数D(x,y)  在(x-y<=0)时结果为0   在(x-y>0)时结果为x-y.即若防守方的防御加成大于攻防的专项加成时伤害将会被减免.而攻方溢出的专项加成并不会有进一步的伤害增益.因此在面对具体局势时,玩家需要好好考虑武器的专项能力.

这只是伤害公式的初版,还有很多影响内容没有加入,后续随着制作内容的细化,也会同步跟进.

4.最后就是攻击效果的呈现了,以下是移动并攻击的动画.

移动并攻击动画

现在单位在计划行动时的路线提示被替换为了逐渐向红色递进的样式.

单位移动过程直接使用了匀速,后续在移动开始和结束时会考虑设置一定的加速度,效果应该会好一些.

当单位攻击时会有一个还有些粗糙的伤害数字反馈.这是用Unity的一个名为Feel的插件实现的,最近半价(仍然好贵!),能实现相当不错的反馈效果,后续的各种玩家输入,以及UI呈现都会试着使用这个插件来优化反馈效果.


以上就是最近一段时间完成的攻击相关机制了,接下来会对攻击机制进行一定的细化,也会补充一些UI提示.呈现的内容并不多,不过也亏最近比较清闲,摸鱼时努力制作总算在今天能发出日志.近两周的开发内容完成后,很多内容就能开始着手开发了!(各类地形,兵种的设计,建筑/经济内容等等).

莫名有种拨开云雾的感觉,这种逐步实现目标内容的感受真是相当不错!要是你脑海里也有想要制作的游戏,恰好有些闲暇时间的话.很推荐试试哦!

内容还是略显粗糙,很感谢你能看到这里!要是有合作的兴趣(好想要美术/数值策划相关的队友啊!!),或者有什么建议的话欢迎联系我!  QQ:2763686216





(转发自:原日志地址
[策略][战棋]新单位招募界面!基于兴趣开发的策略战棋游戏开发日志~ 八
mioku 2022-11-11

这回日志总算能有一些能够展示内容(尽管UI简陋异常),现在玩家可以在招募页面中进行兵源,以及各种装备的选择搭配。直接上图吧:

Image title


兵源:左边的列表中列出了可选择的部队兵源,不同兵源的身体素质和护甲会有很大的区别。一些低级的兵源甚至无法使用部分武器/盾牌,以及无法驾驭马。

武器:选择兵源后,可以选择部队配备的武器,如果选择双手才能使用的武器,将无法使用盾牌。

盾牌:盾牌是相当实用的装备,佩戴盾牌可以很好保住你士兵的小命。

点击招募就能在指定单元格招募出选择的单位啦!

Image title


马匹:较高级的兵源可以选择马匹,选择马匹后,单位就会以骑兵的身份进入战斗,机动能力和作战方式也会有很大的不同。

数据栏:右边粉色的数据栏会显示当前所选择的兵源,以及装备的属性,为玩家提供一定参考。

事实上目前单位招募相关的内容只完成了最基础的功能,还有大量的内容需要制作:

    装备/地形/单位数据的策划(目前只做了几个样例数据)、

    UI界面设计(默认UI组件的样式真是太简陋了!)、

    动态反馈效果(现在的内容毫无反馈感,冰冰冷冷的!)等等。

简陋的内容还请大家多多包涵!

开发日志写到第8篇,但游戏基础玩法的内容也还没实现多少,在计划制作很多内容时,正式投入实现,才发现还有那么多基础内容没有准备好。不过一点点的成果是在积累的,我已经在很多目标前半途而废,这次一定要走到终点呀!

如果你对开发内容有建议,或是对策略游戏开发有兴趣的话,很欢迎联系我!QQ:2763686216

(转发自:原日志地址
游戏数值策划太难了吧!!
mioku 2022-11-07

最近开发内容到了,不做数值策划不可的阶段了,但对于伤害计算公式的设计,以及各色装备、单位的数值平衡都毫无概念。空穴来风的数值感觉在设计了好几种物品后就迅速崩溃了!!数值策划太难了吧!!!

于是,在被困难打倒后,我入手了维多利亚3。把几乎所有资源作为商品驱动的经济逻辑真是太妙了!我已经沉迷在平衡工序关系中不可自拔,堕落在了游戏之海。大脑运转变慢后,只能在这里问问大家:请问,大家都是这么进行数值策划的呢?

[策略][战棋]武器系统与新的数据导入功能!基于兴趣开发的策略战棋游戏的开发日志~ 七
mioku 2022-11-05

        大家好啊!好久没有写日志了,在前端时间基本完成移动功能以后,攻击相关的机制就谈上日程了。我没想到是,在此之前有大量的单位属性相关的内容需要敲定。所以这两周基本没有什么可以直观展示的新内容,本期就介绍一下已经大概策划好的装备系统与新的数据导入功能吧!

       在原来的制作过程中,玩家在招募时,直接选择某个单位,花费资金就能招募。现在则是为单位加入了装备选择的功能,玩家选择的兵源决定了单位的基础护甲以及体能能基础属性,装备则会给予兵员自己的特殊优势。

装备系统:在招募单位时,现在需要为单位选择一套装备,不同的装备会在很大程度上影响单位的职能。装备分为武器、盾牌和马匹(骑兵使用),一下将会一一介绍:

    武器:单位的武器决定了单位的基础攻击能力,以及对付某些敌人的专长(比如反骑兵,重甲敌人等等),大概会分为剑、斧、矛、长柄刀、战锤、弓、弩等等。

    盾牌:如果单位使用的武器只需要单手就能操作,那么也可以再佩戴一面盾牌,盾牌会有对面向敌人方向的防御加成。

    马匹:如果选择了马匹,单位就会以骑兵姿态进入战场,其移动力会大幅提升,但是单位的护甲会取兵员与马匹的平均值,贵族老爷记得骑一匹好马哦!


        这么多新的数值表格,当然也需要导入到系统内,在之前的日志中我介绍过将csv数据文件导入到Unity编辑器内,存储为ScriptObject资源文件。随着数据量的变大,以及在修改单位的数值策划时,原来将csv文件当字符串处理的粗暴方法修改起来十分麻烦。于是我索性写了一版新的数据导入功能。

        现在,数据文件由csv改为xslx类型,也就是Excel表格啦。我随便搜了搜,用了名为EPPLUS的一个插件来读取xslx文件,然后就大概介绍一下处理数据的函数吧。

/// <summary>
    /// 通过键值对生成asset
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="fieldsPairValue">列名Pair值</param>
    /// <param name="assetPath">存储路径</param>
    /// <returns></returns>
    public static T GenerateScriptableObject<T>(Dictionary<string,string> fieldsPairValue,string assetPath) where T :  ScriptableObject
    {
        //根据Name来找到实体
        T obj = AssetDatabase.LoadAssetAtPath(assetPath + fieldsPairValue["Name"] + ".asset", typeof(T)) as T;
        bool isExist = (obj != null);
        if (obj == null) obj = ScriptableObject.CreateInstance<T>();

        try
        {
            //遍历键值对 通过反射将值写入对应的字段
            foreach (var field in fieldsPairValue.Keys)
            {
                var fieldType = obj.GetType().GetField(field)?.FieldType;
                if (fieldType == null) 
                {
                    Debug.LogWarning($"资源'{obj.GetType()}'不包含'{field}'字段!");
                    continue;
                }
                //字段可能为处理枚举类型
                if ( fieldType.IsEnum)
                {
                    obj.GetType().GetField(field).SetValue(obj, System.Enum.Parse(fieldType, fieldsPairValue[field]));
                }
                else 
                {
                    obj.GetType().GetField(field).SetValue(obj, Convert.ChangeType(fieldsPairValue[field], fieldType));
                }
            }
        }
        catch (System.Exception e)
        {
            Debug.LogError($"使用Excel生成失败,错误内容:{e.Message}");
        }
        //如果生成的实体在本地文件中不存在,就创建对应的实体文件
        if (!isExist)
        {
            AssetDatabase.CreateAsset(obj, WeaponAssetPath + fieldsPairValue["Name"] + ".asset");
            return obj;
        }
        //应用修改
        EditorUtility.SetDirty(obj);
        AssetDatabase.SaveAssets();
        return obj;
    }

可以通过读取表格文件的一行数据与表格的列名拼成一个键值对(列名需要与对应类的字段名相同),来调用这个函数。

由于是通过反射实现的,列之间顺序变化也一样可以使用,同时还支持写入枚举类型的值,这个函数很好的满足了我现在需要导入的数据的功能,我个人觉得这个函数功能还是相当方便的,写好的时候得意了一阵嘿嘿。不过其实本身没有什么复杂的逻辑,欢迎提一些实现逻辑的建议。

需要一提的是,生成的资源文件名是取决于传入的“Name”键字段,不同的命名需求可以修改。

最后体现在编辑器里,就是这样:

Image title

Image title

Image title


以上就是本次日志的内容啦,最近的开发内容集中在,底层的一些数据修改,以及策划大量的装备数据,真是相当的乏味呐!接下来还有伤害计算和数值平衡性要考虑,真是想想就头大。如此乏味的内容,感谢您能看到这里!

如果对这个项目有兴趣,或者有什么建议的话,欢迎联系我哦! QQ:2763686216


(转发自:原日志地址
[策略][战棋]单位命令(展示移动范围优化/单位移动)!基于兴趣开发的策略战棋游戏的开发日志~ 六
mioku 2022-10-23

首先是优化了一下移动范围反馈的颜色,让提示变得顺眼一些.

现在蓝色的板块提示就是可移动范围,黄色的是友军,红色所在的是敌人,黑色则是移动范围的尽头.

然后是整理了一下角色操控逻辑的设计模式,把原来混杂了大量控制逻辑的不同状态下的控制逻辑堆在一起的垃圾堆,改用状态机的模式重构了一下,的确清爽不少,接下来加逻辑也会省事不少.不过是比较简单的逻辑整理就不作展示了.

接下来就是单位的移动了,我们选中单位后,只要鼠标在可移动砖块上移动就会显示一个移动线路来展示单位移动至该处的路径.

Image title

线的样式十分简陋,凑合着看啦.接下来有空会给加上一些提示色以及节点序列的内容.

随后点击一格可行动单元格单位就会移动过去了,移动的过程用了Dotween来简单的实现了一下,不过感觉很奇怪,晚些应该也会再写一版.

Image title

其实还尝试些了一些UI的内容,不过留到下次展示吧,在放弃UIToolKit后,我转用了熟悉的UGUI,很多基础内容的制作无趣异常,大家有什么推荐的GUI组件库么,欢迎在评论里推荐一下!

以上就是最近的开发内容了. 前段时间去贵阳出差了一段时间,开发内容就相对比较少,内容也很简陋还望谅解,

呀~贵阳真是座美丽的城市,山峦和高楼并立的城市我作为一个江南人还真是头一回见.我还第一回亲眼见到了大熊猫还是很开心的^_^.回来的高铁上看了川端康成的《山音》,情感相当细腻的一本书,推荐一看哦!


要是有志同道合的美术和策划就好啦~~如果你对开发项目有什么建议的话,欢迎与我交流哦! QQ:2763686216


(转发自:原日志地址
[策略][战棋]项目逻辑结构(依赖注入)!基于兴趣开发的策略战棋游戏的开发日志~ 五
mioku 2022-10-16

首先是项目大概会有的主要场景:

1.开始场景:进行游戏设置,管理存档的功能场景。

2.策略场景:策略场景会贯穿整剧游戏的始终,玩家在策略地图上决策,已尽可能优势的进入作战场景,并取得最终的胜利。

3.作战场景:游戏主要的玩法集中在这里,六边形单元格组成的网格地图,回合制的战棋策略玩法,也是目前日志一直在分享的开发内容。每场作战的结果会反馈到策略场景,影响全局策略的执行。

作战场景概览


本次日志主要内容就是介绍一下作战场景的逻辑结构(是很偏程序的内容,要是内容晦涩难懂还望体谅,如果有什么建议,也请一定提出):

首先要介绍一下DI(依赖注入):这是我在后端开发工作中常用的一种设计模式,在我们编写某个逻辑对象A时(比如某个类实例),我们会需要调用另一个逻辑对象B的功能,就可以称作A是依赖于B的,这时我们一般会自己去实现逻辑对象B(比如实例化一个B,或是调用B的单例等等),这是十分麻烦的。DI则是替代了我们自己实现依赖的过程,我们只需要决定那些逻辑对象被需要,就将其注入

简单来说,DI会准备好我们可能会依赖到的对象,当我们需要使用这些对象时,直接通过DI来注入,就能实现调用了。这个过程中省去了我们创建依赖的需要,因此DI也被叫错控制反转。


在我的开发项目中DI功能的实现是依靠名为Vcontainer的类库,这是它的网站:https://vcontainer.hadashikick.jp/

在整个逻辑的入口是一个Entry类,这个类在项目中就负责准备好我们会依赖的对象。

Image title


上图中的Configure方法内,我们将依赖一一注册准备。

RegisterInstance会将我们在场景中已经准备好的实例注册。

RegisterComponentInNewPrefab可以在注册实例的同时,在场景中创建对应的物体。

RegisterEntry注册的实例则可以实现Start,Update等Unity生命周期函数。

Refister则用于注册我们普通的逻辑类。

在注册时,注册的对象会有一个生命周期(LifeScope)的概念,它决定了当我们注入依赖时,这个依赖对象的留驻时间,这里不作具体介绍,大家可以参考类库的文档。

依赖都注册准备好后,随后就是注入依赖了。例如在游戏过程中,玩家选择单元格相关的管理逻辑需要知道,网格地图相关的信息,那么就需要将网格信息注入进来。


Image title

上图时最常用的注入方式,构造体注入。在注入后外面就能直接调用_hexGrid来实现依赖了。注入的方式也有很多,理解上需要一些对DI的概念基础,这里就不深入说明了。

最后说说,使用DI后一些的好处:

1.在以前我会通过单例,在场景中放置大量的xxxManager来管理一个逻辑模块,在项目复杂以后,大量的Manager真是让人看的头大,改用DI后,就再也看不到这些Manager啦。

2.通过将很多原来需要实现MonoBehaviour才能在场景中使用的逻辑,通过RegisterEntry来注册不需要继承自MonoBehaviour并放在场景中,可以节约不少资源使用。


以上就是本次十分乏味的逻辑结构分享日志,很欢迎大家进行建议和评价,在下才学疏浅可能会有一些概念介绍的疏漏,还望见谅。如果你对Vcontainer感兴趣可以看看这个视频:精选Unity-Github开源库分享 最实用的依赖注入框架VContainer DI && IOC_哔哩哔哩_bilibili


项目仍然在缓慢开发中,要是有感兴趣的伙伴也可以联系我哦!QQ:2763686216









(转发自:原日志地址
[策略][战棋]单位命令(招募/展示移动范围)!基于兴趣开发的策略战棋游戏的开发日志~ 四
mioku 2022-10-07

首先介绍一下命令菜单,简单来说就是为玩家展示当前可选的命令的面板.

对于玩家来说他所要做的就是不断的选中某个单元格,以执行作战策略,命令菜单则会显示当前单元格可以采取的命令.

Image title例如在单元格为空时,目前就只有招募单位的功能.
Image title

而在单元格上有己方单位时,命令则显示了当前单位可以执行的命令.

当我们点击招募按钮,招募面板就会呼出.

招募面板

招募面板目前还很简陋,不过够用就行嘛!计划在实现游戏的基础逻辑后会好好细化~~ 先提前说一下计划,每条单位信息的蓝色图片会是单位的头像,而右边巨大的空白会用来预览单位的外形.

点击标着价格的按钮,单位就会在所选的单元格生成了!

招募单位

最后就是改了老半天bug,终于初步实现的展示移动范围的功能了!

Image title

在选中红框单位后,就会展示其移动范围,蓝色为可移动区块,红色为地方区块,森林等地形则会有移动惩罚.目前的区块提示还十分简陋,晚些改成有些透明的样式应该会好不少.

OK!这就是本次日志的开发内容了!虽然实现内容展示十分简单,但实现的逻辑还是挺复杂的.

为了保证项目结构的清晰,很多逻辑在开发时,就会考虑到很多后续开发的扩展性,以及努力降低各个模块的耦合度,减少修改难度.

开发过程总是想的很多,能够实现的内容确相当有限,移动相关功能制作需要不少时间.下一回就来介绍介绍偏程序的项目结构吧!

要是你有什么好想法或者建议也可以联系我哦!QQ:2763686216.


写日志的时候,假期已经是最后一天了!你会觉得怅然若失么?反正我还没缓过来哈哈.要是迷惘的话,就着手创造些什么吧!加油!

(转发自:原日志地址
想要招募一起参加ldJam的队友!!!(美术/策划)
mioku 2022-09-25

国庆假期当然要找点充实的事情啦!现在才招募队友是不是有点晚?

心血来潮不如参加一下ldJam嘛,虽然想要获奖的思想很激烈,不过能够制作出可以发布的作品就很值得高兴了!创作的快乐~~

欢迎感兴趣的朋友联系我哦~~ QQ:2763686216

[策略][战棋]作战单位!基于兴趣开发的策略战棋游戏的第三篇开发日志~
mioku 2022-09-25

首先介绍一下使用的素材包:

Image title

是在Unity Asset Strore买的一个RTS类型素材包,主要内容是一套骑兵模组和步兵模组,另外还有一些建筑和工程器械.骑兵和步兵的模组已经预制了很多的骨骼动画和装备组件,内容很丰富,打折入手还是挺值的.

接下来就要上手了,先介绍一下对于战斗单位的大致策划:

  1. 作战单位分为骑兵和步兵两类--骑兵机动力强,有冲锋能力,步兵则价格实惠,地形适应能力更强.
  2. 作战方式会有近战,远程两类(是否加入魔法犹豫中),主要有作战单位的武器决定.
  3. 武器装备是每个作战单位的最主要特征,大概可分为双手武器(大锤,大剑,弩等),单手武器(剑,长矛等),盾牌.

然后是处理单位数据.为了方便处理各个单位的数值,我用了一个csv表格文件来存储数据,csv文件格式很简单,可以看作逗号分隔的文本文件,处理起来很方便,随后我又编写了一个编辑器扩展方法,快速的将表格内容生成为编辑器内的asset资源.

以下是随手编辑的初版单位数据,以及转换后的Asset文件.

CSV表格数据

生成的Asset数据

(虽然只用两张图就阐述了操作内容,但其实中间出了不少小问题,费了很多时间==)

随后为作战单位的预制体添加好单位信息,作战单位的前期准备就完成了,现在战士们已经登记在册,准备踏入战场啦!

Image title

战场之花--枪骑士已经等不及了

接下来有大量的工作等着完成:单位生成,移动,作战,招募.伴随着相应的动画,音效的设置.已经开始头疼啦!下一篇日志应该会着手于单位在地图上的移动.应该会有一个稍微复杂的路径算法,我已经干劲满满准备动手啦.

不过,最近国庆假期要来了,打算先参加ldJam换换口味.目前有我和一个程序伙伴,要是有感兴趣的美术/策划类型的观众也想参加的话,欢迎联系我! QQ:2763686216

顺便分享一下正在播放的歌曲:[[https://music.163.com/song?id=865863]]

假期就要来了,大家加油呀!






(转发自:原日志地址
[策略][战棋]地图编辑器!基于兴趣开发的策略战棋游戏的第二篇开发日志~
mioku 2022-09-03

这次制作地图编辑器真是费了不少辛苦,尝试使用了Unity新的UIToolkit来做一个简单的页面结果踩了不少坑,最近也是很忙,努力忙里偷闲总算是大致完成了,以下就是编辑器的面板了.

编辑器概览

嘛~UI样式是默认的,十分简陋,大家体谅.其实这么简单的页面制作起来也费了不少劲.第一次使用新的UI方案,很多问题都很难解决.尤其是组件的布局,还有一些输入框的显示问题.

编辑器的功能还是很直观的,这里稍微介绍一下.

地形/地貌下拉框:玩家选择了地貌/地形后,点击地图中的单元格就能改变单元格样式了.单元格编辑操作

横向/纵向滑条:滑动可以改变整个地图在横向和纵向的单元格数量,然后点击修改尺寸就会应用到地图.

(这里笔者遇到了一个解决不了的问题:滑动条右边会有个显示当前值的文本框, 玩家也可以直接在其中输入值来应用值修改.但是在运行时文本框的值不会显示出来十分奇怪.欢迎有熟悉UIToolKit的朋友解答)


新建/保存按钮:就是将当前地图数据保存到本地,或者重新生成一个空地图啦.

要提一下的是保存,在编辑器运行时,我们可以通过AssetDatabase来在本地处理Asset资源,但当要发布游戏时,就会有一下问题.

Image title

AssetDatabase只能在编辑器模式使用!!!

于是,要实现在游戏发布后玩家也可以使用编辑器保存地图数据,还需要一个可行的数据持久化存储方案.笔者直接使用了JsonUtility将地图数据存储为了Json,这方面功能还没有到应用的时候,还有待丰富,就先不分享啦!


这就是本周完成的地图编辑器的大致情况啦!内容十分简陋,望大家见谅.

作为一个后端工作者,即使是制作这么简单的一个UI窗体也费了不少事,甚至还存在不少问题.让我一度怀疑:难道,我真的做不好前端内容么?哎,但愿会随着经验的丰富越来越好吧!

接下来笔者要出差半月,下一次日志要晚些出炉了,祝大家生活顺利吧!

顺便分享一下现在正在播放的音乐:[[https://music.163.com/#/song?id=21429888]]


要是对历史策略游戏制作感兴趣的朋友也很欢迎联系我哦!(QQ:2763686216)

(转发自:原日志地址
[策略][战棋]基于兴趣开发的策略战棋游戏的第一篇开发日志~
mioku 2022-08-28

本次日志要展示的就是网格地图的生成了.

    首先描述一下我要实现的地图结构,一个网格地图要由大量单元格组成,单元格则有地形,地貌两个特征.

一个小村庄

    如上图↑,一个单元格的颜色可以理解为地貌,而单元格上的小村庄就是一个地形.

    为了方便处理,将他们定义为Unity中的Scriptable类型存储在本地,多说一句,自从有了Scriptable,很多数据的存储真的方便不少,拖几下就能完成存储,再也不用考虑路径之类的问题了,大家在自己制作时更偏爱那种持久化存储呢?

地貌数据


地形数据

    如上图,地貌负责存储一个材质,地形则存了一个物体对象,这样,在生成时给单元格加上对应的地形地貌,一个单元格就组成了.

接下来我们也为整个地图网格设置一个存储数据,

网格数据

    整个地图的网格数据要存储地图的规模(长和宽),以及网格肚子里每个单元格对应的地形和地貌.然而在实际处理过程中,每个单元格的地形地貌拖起来实在是太辛苦了,看来制作一个地图编辑器是很必要的(算是挖以后日志的坑了).

    接下来的内容就是比较简单的代码阶段了,生成width*height个单元格,并把对应的地形地貌数据设置给它,一个简单的六边形地图就完成了,稍微编辑一下地图数据,下图就是成品啦!森林和花海里的营地~(似乎和历史策略题材不太搭 ++')

Image title

这就是本篇日志的全部内容啦!实现内容是不是太简单了><,望多多包涵.

尽管看来十分简单,但稚嫩的我也是看过了许多文章才会自己实现的,这里分享一篇十分出色的网格地图生成的教程:https://catlikecoding.com/unity/tutorials/.

顺便分享一下正在播放的歌曲吧 [[https://music.163.com/#/song?id=461518667]]

接下来也会继续更新日志的.


顺带一提,要是有对历史策略游戏感兴趣的朋友也很欢迎联系我,QQ:2763686216.



(转发自:原日志地址
想在闲暇时间制作自己的策略游戏的爱好者看过来~
mioku 2022-06-27

本人是P社游戏重度爱好者,也是个后端开发社畜。全面战争、欧陆风云、十字军之王、文明等等游戏玩了一圈以后心痒痒的。想和志同道合的人一起制作一个架空历史背景的策略游戏,如果你也是策略游戏爱好者、创造之心也痒痒的,欢迎联系我(QQ:2763686216),欢迎有以下标签的人:

1.对策略游戏有独到的见解,擅长规划独特的机制。

2.了解战争、历史,擅长编写架空历史故事。

3.有不错的美术能力,了解独特的文化风情。(非常欢迎!)

4.对数字敏感,可以在大量的加成中维持住平衡。

说白了就是缺策划和美术啦,一切才刚刚开始,要做好心里准备哦!

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册