风神界:视频效果

创建日期:2024-12-13

更新日期:2025-03-03

阅读次数:209

视频参考

画面+解说。两分钟左右。开源,建粉丝群,以夸克盈利。 抖音生态缸解说:https://www.douyin.com/video/7412244657733684499 王老菊游戏解说:https://www.bilibili.com/video/BV1ux411d746/

视频文稿

种地太麻烦,找一个NPC来给我们种地。 怎么没有招募选项?不过倒是有提议选项:提议种地,可以给钱……先看看不给会怎样。 果然,他拒绝了。那重新提议……10铜币怎么样?哦他又拒绝了。这破游戏设计的不好,拒绝的话应该提议按钮灰色,实时告诉我需要多少价格。 我现在还要一个价格一个价格的试。 来吧,20铜币……卧槽,他骂我?给低了?那试试50……卧槽他又骂我?还打我?他这是提议烦了? 卧槽这个NPC设计的有点意思。不过敢打我,刁民,去死吧!库,库,库!(战斗声) 求饶?呵呵。诶等等,他对我发起了一个提议?卧槽,免费打工,要求只是我不打他?卧槽,这人好贱啊,给钱不干,被打就免费干。 哈哈,OK,收获一个劳工。不用自己种地了,爽!(Necesse画风,NPC正在种地) (黑底白字)一天后 刁民逃跑了!!!(无人的地,抖动的屏幕)

美术参考

格式主要参考第二个图:Mindustry。它使用纯方块、纯俯视角,开发方便且效果很好。 画风主要参考第一个图:Necesse。草地树木,墙壁床铺。 UI主要参考第三四个图:立体感。 Necesse Mindustry Factorio Factorio_Esc

任务内容

V1.0:角色在世界中移动(我的MVCE框架已完成此任务) 素材:沙地地图块,边墙地图块,虚空地图块,角色序列帧 新建unity项目、git公开仓库、QQ粉丝群。 2D,一个100×100的地图、边界是边墙、外面是100的虚空,一个角色。

玩家可以WASD移动、移速每秒五格,角色图会旋转与播放。按住Shift时移速翻倍。 摄像机跟随玩家。滚轮缩放,最远时同屏高200地块,最近不可负数。

V1.1:饥饿与农业(五天) 素材:种子图,树木图,枯树图,草地地块图,鼠标常规图,鼠标开采图,背包选中图 创世时,地图中随机一大片区域(40%面积)变为草地。树木在草地上随机生成,每个格子4%概率。 玩家右键点击树木时,树木颤抖(图标缩小一下后放大),点击五次后树木消失、且背包获得十个木头,60%概率获得一个种子。 角色有饱腹值100满,五分钟减为0(每3秒-1)。屏幕上角色信息区显示饱腹状态。饱食0时每秒扣1血,血0时游戏结束,100血满,血量也UI显示。 E键开关背包面板。背包是一个网格。对背包中的道具右键,有菜单:丢弃,点击后世界中出现此道具图标,任何角色点击世界的此道具后拾取。右键种子的菜单中多一项:食用。点击后,饱腹+10。(建议结构:创建IBagItem接口、其中有注册右键函数。种子实现它,并注册食用函数) 树木随机生长:每分钟每个草地有【初始百分之一;周围3×3每有一个树木则概率减半,3×3外周围7×7每有一个树木则概率再减20%】的概率变为小树。小树在五分钟后变为大树。大树在半小时后变为枯树,枯树在三小时后消失。砍小树获得两个木头,砍枯树获得四个木头;小树用缩小的图标,枯树用枯树图标。 种子属于建筑。对于背包中的建筑,点击后对应的背包格子变为背包选中状态,道具图跟随鼠标,此时,鼠标在地图块上移动时、地图块上显示半透明的建筑,点击鼠标时生效(背包道具-1、地图+建筑、角色播放种植动画)。放下种子时,效果如草地自动生长了一个种子。 当鼠标悬浮在树木上时,鼠标变化为开采状态。离开或树砍倒时变回。(库里有快捷设置鼠标函数)

V1.2:NPC交互(五天) 素材:铜币图、墙壁图、床铺图、大门图、谩骂图、夸赞图 创世时,除了玩家之外,再生成一个AI角色。玩家背包里有120到180随机铜币。依次在随机位置生成两个房间(墙壁+床铺+门)。 玩家右键AI,有【攻击】【跟随】【提议】【谩骂】【夸赞】选项。 当点击攻击时,播放动画,对目标造成10点伤害。 当点击跟随时,可以暂时无效,不做此功能。 当点击谩骂时,角色头上出现一个发言气泡,是一个表情图。夸赞是另一个图。 当点击提议时,出现提议面板。四列,从左到右:

  • 第一列:按钮们。铜币+1、铜币+10、铜币+100、承诺保护1天、承诺保护10天、帮忙种地1天、帮忙种地10天。
  • 第二列:空白。当点击第一列中元素时,添加一个对应元素到第二列里,非按钮。
  • 第三列:空白。对称第二列。
  • 第四列:对称第一列。对方的提议按钮。

右下角有确认按钮。玩家选好我方的付出(第二列)与获得(第三列)之后,点击确认,AI会给予反馈(弹窗:同意/拒绝) AI逻辑:

  • 如果记忆中没有房间,那么寻找一个房间,移动过去,记忆中标记房间。
  • 如果背包种子低于5,那么寻找最近的大树,前往并砍伐。
  • 如果饱食低于80,并且背包有种子,那么吃一个。
  • 如果空闲,那么种植一个种子在空地。
  • 如果面对提议,那么考虑价格:对方的保护1天价值10铜币,对方保护10天价值20铜币,对方帮忙种地1天价值10铜币,对方帮忙种地10天价值50铜币,自己的保护1天价值100,自己的保护10天价值1000,自己的帮忙种地1天价值100,自己的帮忙种地10天价值1000。
  • 当被打时,记忆中加入恐惧。五分钟后删除。
  • 当记忆中有恐惧时,对方的保护的价值翻一百倍。
  • 当生命低于50时,选择最近的人,提议被保护,付出自己认为等值的东西。如果无法足量付出,那么付出一切。
  • 当拒绝提议时,记忆中加入烦躁。
  • 当拒绝提议时,如果记忆中有烦躁,那么【谩骂】,并在记忆中加入厌恶。
  • 当拒绝提议时,如果记忆中有厌恶,那么【攻击】。
  • 当答应的提议包含自己给对方种地时:
    • 如果空闲,那么种植一个种子在对方门前的空地。
    • 如果背包种子大于8,那么丢弃高于8的种子在对方门口。
    • 当丢弃三次时,如果记忆中没有恐惧,那么视为自己不再答应种地。

当AI对玩家提议时,玩家会收到一个对话框介绍提议内容,两个按钮:同意与拒绝。

存档

  • I世界
    • 位面列表(位面类)
      • 位面名称:风神界/深渊界
      • 地块网格(地块类)
        • 土质层:沙地/草地(实体)
        • 矿物层:铜矿/无(实体)
        • 地板层:木地板/无(实体)
        • 建筑层:箱子/树木(实体)
        • 悬浮层:木头/无(实体)
      • 角色列表(角色类)
        • 角色名称:执悲今厄
        • 饱腹值:100/100
        • 生命值:100/100
        • 当前坐标
        • 当前旋转角度
        • 移动速度
        • 每秒执行(在此掉饱腹)
        • 背包
          • 芥子列表(芥子类)
            • 道具
            • 数量
          • 函数:增加道具
          • 函数:移除道具
        • 神魂
          • 价格衡量列表
            • 项目
            • 价格
          • 提案器(AI行为树。玩家此为null)
            • 枚举:规则优先级
            • 函数:添加规则-优先级-条件-行为
        • 未处理提议列表(提议类)
          • ID
          • 发起者
          • 接受者
          • 我方付出列表
          • 你方付出列表
        • 函数:攻击
        • 函数:提议-提议
        • 函数:发言-情绪(情绪枚举)
          • 赞美
          • 谩骂
        • 函数:处理提议-ID-bool
        • 当受到攻击时
        • 当受到提议时
        • 当受到发言时
  • I笔记(所有存档共用一个笔记。笔记作为单独的一个文件,与存档文件夹平级)
    • 背包面板开关状态
    • 摄像机缩放值
  • I设置
    • 分辨率
    • 是否全屏

背包道具

  • I道具
    • 名称:种子
    • 简介:可以吃,也可以种
    • 图片:【种子图】
  • I食物:I道具(种子是食物+建筑)
    • 饱腹值:10
  • I建筑:I道具
    • 尺寸:1×1
    • 生命:5
    • 当建造时-坐标(种子:在那个坐标创建一个树木实体、建筑为小树)
  • I树木:I建筑(小树大树枯树都继承自此,作为后台道具。后台道具:不出现在合成配方与商店等地方)
    • 掉落列表(掉落十个木头,并60%概率掉落一个种子)
      • 概率:100%
      • 产物:木头×10
    • 寿命:1600秒
    • 当寿终时-坐标(在那个坐标变化为新的建筑或消失。实现小树变大树)
  • I土质:I道具(草地是土质。土质作为后台道具)
    • 每秒执行-坐标(草地在此生成树木)

世界实体

  • 实体类(每种道具是一个类、多种道具是一个接口。每种实体是一个实例、多种实体是一个类)
    • 坐标:67-15
    • 图片:【树木图】
  • 建筑实体类:实体类
    • 建筑:大树
    • 当前生命:5
  • 树木实体类:建筑实体类
    • 当前年龄:561秒
  • 土质实体类:实体类
    • 土质:草地
  • 悬浮实体类:实体类
    • 芥子:木头×1

前端

  • 地块物体列表
  • 角色物体列表(角色物体)
    • 角色本身
    • 头顶文字
    • 头顶生命
    • 头顶气泡(用于显示发言)
  • 背包面板
  • 提议面板
  • 角色属性面板
    • 生命条
    • 饱食条

画面参考图 提议面板

指令(玩家鼠标键盘调用指令,或者AI神魂调用)

  • 存档写指令
    • 帧左移
    • 帧右移
    • 帧上移
    • 帧下移
    • 砍树 坐标
    • 食用 食物道具
    • 放置 建筑道具
    • 攻击(对周围3×3的建筑与角色造成伤害)
    • 发言 原子语言(情绪枚举)
    • 提议 XX+XX+XX XX+XX+XX
    • 回复提议 提议ID 接受/拒绝
  • 笔记写指令
    • 背包面板 开启/关闭
    • 视角 放大/缩小

事件(后台变化时需要局部刷新前台)

  • 存档事件
    • 当建筑放下时(刷新地块图片)
    • 当建筑消亡时(小树变大树,本质是小树消亡、大树放下)
    • 当角色移动时(刷新角色图片位置)
    • 当角色发言时(出现气泡)
    • 当角色攻击时(播放动画)
    • 当发起提议时(如果玩家是接受者,那么弹窗)
    • 当回复提议时(如果玩家是接受者,那么弹窗)
  • 笔记事件
    • 当视角变化时
    • 当面板开关时
  • 生命事件(库里的事件,跨项目生效)
    • 当每帧时
    • 当退出游戏时

流程(启动游戏)

  • 函数:读取存档
  • 函数:创建世界(当读档失败时执行)
  • 函数:绘制世界(这是我用代码生成UI。你们不使用的话可以不要此函数)
  • 函数:注册指令(让鼠标键盘生效)
  • 函数:注册事件(让前台会刷新、以及自动存档)

总结

以上是我设计的架构,包含:

  • 前台:世界、UI
  • 后台存档系统:世界、笔记、设置
  • 指令系统:前台调用后台
  • 事件系统:后台调用前台
  • 流程:一个Main函数启动游戏、干净利落