风神界:视频效果
创建日期: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主要参考第三四个图:立体感。
任务内容
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秒
- 当寿终时-坐标(在那个坐标变化为新的建筑或消失。实现小树变大树)
- 掉落列表(掉落十个木头,并60%概率掉落一个种子)
- I土质:I道具(草地是土质。土质作为后台道具)
- 每秒执行-坐标(草地在此生成树木)
世界实体
- 实体类(每种道具是一个类、多种道具是一个接口。每种实体是一个实例、多种实体是一个类)
- 坐标:67-15
- 图片:【树木图】
- 建筑实体类:实体类
- 建筑:大树
- 当前生命:5
- 树木实体类:建筑实体类
- 当前年龄:561秒
- 土质实体类:实体类
- 土质:草地
- 悬浮实体类:实体类
- 芥子:木头×1
前端
- 地块物体列表
- 角色物体列表(角色物体)
- 角色本身
- 头顶文字
- 头顶生命
- 头顶气泡(用于显示发言)
- 背包面板
- 提议面板
- 角色属性面板
- 生命条
- 饱食条
指令(玩家鼠标键盘调用指令,或者AI神魂调用)
- 存档写指令
- 帧左移
- 帧右移
- 帧上移
- 帧下移
- 砍树 坐标
- 食用 食物道具
- 放置 建筑道具
- 攻击(对周围3×3的建筑与角色造成伤害)
- 发言 原子语言(情绪枚举)
- 提议 XX+XX+XX XX+XX+XX
- 回复提议 提议ID 接受/拒绝
- 笔记写指令
- 背包面板 开启/关闭
- 视角 放大/缩小
事件(后台变化时需要局部刷新前台)
- 存档事件
- 当建筑放下时(刷新地块图片)
- 当建筑消亡时(小树变大树,本质是小树消亡、大树放下)
- 当角色移动时(刷新角色图片位置)
- 当角色发言时(出现气泡)
- 当角色攻击时(播放动画)
- 当发起提议时(如果玩家是接受者,那么弹窗)
- 当回复提议时(如果玩家是接受者,那么弹窗)
- 笔记事件
- 当视角变化时
- 当面板开关时
- 生命事件(库里的事件,跨项目生效)
- 当每帧时
- 当退出游戏时
流程(启动游戏)
- 函数:读取存档
- 函数:创建世界(当读档失败时执行)
- 函数:绘制世界(这是我用代码生成UI。你们不使用的话可以不要此函数)
- 函数:注册指令(让鼠标键盘生效)
- 函数:注册事件(让前台会刷新、以及自动存档)
总结
以上是我设计的架构,包含:
- 前台:世界、UI
- 后台存档系统:世界、笔记、设置
- 指令系统:前台调用后台
- 事件系统:后台调用前台
- 流程:一个Main函数启动游戏、干净利落