unity实现GalGame式的人物关系链

写在开头:我参加了2021 Global Gamejam全球游戏设计比赛
经过全员讨论最后决定根据主题《Lost and Found》做一个失物招领处的游戏。大概是小清新风格的

游戏视频链接

游戏大概玩法就是顾客过来陈述自己的想法,玩家给予顾客物品,顾客会根据获得的物品解锁不同的分支剧情。下图是关系链:

是的,树状结构是非常复杂的一种关系链,以及未来可能会出现非二叉树的情况

那么,正片开始:
**

人物关系链的树状结构如何建立舒适的数据结构:

**
首先我们的游戏关系是以物品建立联系的,即玩家根据顾客的需求选择自己的物品然后给予顾客,给的东西不一样会解锁不一样的分支。

举个例子,第一个顾客是小孩,你可以在相册玩具中二选一 选择其中一个给顾客,如果给与相册则 会触发初恋的分支并且小孩会给你草戒指,,如果给玩具会触发青年的支线并且小孩会给你学生证

对的,上述关系错综复杂。
--------- --------------- 小孩 ------------------ ----------
【相册】 ----------------------------【玩具】
初恋【草戒指】 --------------青年【学生证】

那么问题来了,如何很好的建立连接,并且要考虑到未来如果树不是只是二叉的情况呢?

首先为了方便识别顾客和物品的说明我们先定义NPC枚举类型object物品枚举类型

    public enum object物品{相册=0,玩具,草戒指,结婚戒指,领带,学生证,练习册, 泫水密卷,NULL,领带结局, 结婚结局, 默认解决, 金榜题名}public enum NPC{小孩,青年,中年,初恋,End,高中生,初中生,NULL}

然后我们需要知道一个关系链,下一个npc玩家给与的物品玩家获得的物品,这三个是一个绑定的关系
比如:

故,可以定义一个包含这三个数据的类
【这里咱们称这个类叫获得物品以及下一个NPC】,这样可以知道下一个npc所需要的所有信息。

    public class 获得物品以及下一个NPC{public NPC NPC下一个 { get; private set; }public object物品 Object玩家给允 { get; private set; }public object物品 Object玩家获得 { get; private set; }public 获得物品以及下一个NPC(object物品 玩家给允, NPC nPC,object物品 玩家获得){Object玩家给允 = 玩家给允;NPC下一个 = nPC ;Object玩家获得 = 玩家获得;}}

如果要考虑多分支树的结构,即一个玩家可能有n个选择的物品的时候,那么存储玩家下一个npc触发支线的关系可以用字典来存储。
因为我们可以轻松的获取到玩家给与的顾客的物品是什么,
所以将玩家给予的物品获得物品以及下一个NPC 类作为值键对。
public Dictionary<object物品,获得物品以及下一个NPC> Dic物品对应关系;

这样一个完整的玩家信息类就包括
{
玩家自身的名字
和n个关系链的字典。
和通过当前给与物品直接返回字典里面的下一个npc的所有数据的公共方法。
就能实现一句话建一个NPC了
}

public class NPCInformation{public NPC NPCName;public Dictionary<object物品,获得物品以及下一个NPC> Dic物品对应关系;public CustomerLogic customerLogic;public NPCInformation(NPC npcName,List<获得物品以及下一个NPC> NPCs){Dic物品对应关系 = new Dictionary<object物品, 获得物品以及下一个NPC>();foreach(获得物品以及下一个NPC NPC in NPCs){Dic物品对应关系.Add(NPC.Object玩家给允, NPC);}}public 获得物品以及下一个NPC ShowResult(object物品 currentobject){if(Dic物品对应关系.ContainsKey(currentobject))return Dic物品对应关系[currentobject];else{Debug.LogError("找不到此物品的分支");return new 获得物品以及下一个NPC(currentobject,NPC.End,object物品.默认解决);}}}

然后初始化的时候只需要一条语句就能添加一个npc

public static void InitNPCInformation(){NPCInformations.Clear();//小孩NPCInformations.Add(NPC.小孩,new NPCInformation(NPC.小孩,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.相册,NPC.初恋, object物品.草戒指), new 获得物品以及下一个NPC(object物品.玩具,NPC.青年, object物品.学生证))));//初恋NPCInformations.Add(NPC.初恋,new NPCInformation(NPC.初恋,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.草戒指, NPC.End, object物品.结婚结局), new 获得物品以及下一个NPC(object物品.玩具, NPC.青年, object物品.学生证))));//青年NPCInformations.Add(NPC.青年, new NPCInformation(NPC.青年,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.相册, NPC.中年, object物品.领带), new 获得物品以及下一个NPC(object物品.学生证, NPC.高中生, object物品.练习册))));//中年NPCInformations.Add(NPC.中年, new NPCInformation(NPC.中年,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.领带, NPC.End, object物品.领带结局), new 获得物品以及下一个NPC(object物品.学生证, NPC.高中生, object物品.练习册))));//高中生NPCInformations.Add(NPC.高中生, new NPCInformation(NPC.高中生,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.练习册, NPC.初中生, object物品.泫水密卷), new 获得物品以及下一个NPC(object物品.相册, NPC.初恋, object物品.草戒指))));//初中年NPCInformations.Add(NPC.初中生, new NPCInformation(NPC.初中生,Add获得物品以及下一个NPC(new 获得物品以及下一个NPC(object物品.相册, NPC.初恋, object物品.草戒指), new 获得物品以及下一个NPC(object物品.泫水密卷, NPC.End, object物品.金榜题名))));}

最后说一下中英文适配的问题:

由于我们游戏的主要英文切换部分在于玩家的物品查看说明时显示的文字不一样,所以需要定义两个字典
public Dictionary<object物品, string> _物品中文说明;
public Dictionary<object物品, string> _物品英文说明;
来存放物品和说明的中英文,而其他的中英文其实是改变Image来切换所以没啥技术含量。哈哈哈

如果可以的话,非常希望读者可以试玩一下我做的
《Lost and Found》
源码链接:git

unity实现GalGame式的树状结构关系链相关推荐

  1. 数据的逻辑结构(线性结构、非线性结构;集合结构、树状结构、网状结构),数据的存储结构(顺序结构、链式结构、索引结构、散列结构)

    数据的逻辑结构 数据的逻辑结构指数据元素之间的逻辑关系(和实现无关). 分类1:线性结构和非线性结构 线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继. ...

  2. 数据的逻辑结构(线性结构、非线性结构;集合结构、线性结构、树状结构、网状结构),数据的存储结构(顺序结构、链式结构、索引结构、散列结构)

    数据的逻辑结构 数据的逻辑结构指数据元素之间的逻辑关系(和实现无关). 分类1:线性结构和非线性结构 线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继. ...

  3. Unity简单树状结构

    树状结构. 预制体 TreeView挂载TreeView脚本.Game是空物体.ShowItem是一张图片添加了Toggle组件,剩下的UGUI的Toggle物体. TreeViewControl控制 ...

  4. 树状结构大数据类型的高效支持

    树状结构大数据类型的高效支持 陈世敏 中国科学院计算技术研究所,北京 100190 摘要:传统的关系数据模型难以满足大数据应用日益丰富的数据表达和处理的需求,因此实践中涌现了多种非传统的大数据类型.其 ...

  5. mysql如何实现树状结构_实现树状结构的两种方法

    实现树状结构的两种方法 实现树状结构的两种方法 1.递归法 递归是指在函数中显式的调用它自身. 利用递归法实现树状结构的特点是写入数据速度较快,显示速度较慢(在树的分支/层次较多的情况下尤其明显).适 ...

  6. 从装备合成谈树状结构的应用

    源码下载: 链接: https://pan.baidu.com/s/1DucpIik596W1pkY09FjUew 提取码: n8mq 其中有个文件"类的功能介绍.txt",介绍了 ...

  7. 用中值排序基数法实现树状结构 (转)

    在BBS的编写中,经常有人问怎样实现树状结构?一个比较不负责任的回答是:使用递归算法.当然,递归是一个可行的办法 (二叉树的历遍也好象只能使用递归算法),但对于BBS来说,这样做势必要进行大量的Sql ...

  8. 递归查询树状结构某个确定的节点

    递归 递归算法在日常工作中算是用的比较多的一种,比如DOM树的遍历,多层级树状结构的生成,遍历寻找某个树节点等 1 先来看下数据结构 var result = {id:0,name:"张飞& ...

  9. 系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构...

    系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这 ...

最新文章

  1. 6.Verilog的always语句使用
  2. 【生成模型】关于无监督生成模型,你必须知道的基础
  3. sql server的密码采用自带什么密码技术存储_【技术分享】浅谈MYSQL 8.0新特性
  4. Fei Labs:FIP-5提案已通过
  5. Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
  6. 网页怎么调用云服务器资源,如何将网页资源放到云服务器
  7. JS 表单提交信息加密
  8. 微擎支付返回商户单号_ThinkPHP6对接实现微信H5支付
  9. 金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图
  10. 数据库表锁死的解决方法
  11. 【Linux】yum卸载恢复
  12. androidx指纹验证
  13. APP渗透—Android 7.0 抓包(教程)
  14. 销售 小姐姐 给买家打分系统,用 Python Django 又整了一个花活
  15. 琴生不等式(Jensen Inequality)
  16. 简单易懂ppi和dpi的本质和由来
  17. hiho1718(LIS)
  18. python分析比赛_实战项目练习 ---- 【2018世界杯】用python分析夺冠球队
  19. 在线问答“三重门”:知识、营销与服务直达
  20. 新产品开发的项目管理

热门文章

  1. OpenCV官方训练好的人脸识别器
  2. 自动化测试-单元测试
  3. vue 项目打包通过命令修改 vue-router 模式,修改 API 接口前缀
  4. kvm虚拟化二: 字符界面管理及 无人值守安装
  5. lateral view 和explode
  6. 从程序员创业谈起--对话周鸿祎
  7. 名帖209 赵孟頫 行书《千字文》
  8. 2023年腾讯云轻量服务器评测:2核2G4M、4核8G12M、16核32G28M
  9. python 神经网络原理_神经网络工作原理
  10. 死性不改【16Q4】ISO9000 Win7x64专业版、Windows Server 2008r2企业版下载