【UI界面开发】背包系统一般思路

文章目录

  • 摘要
  • 从数据库概念基础出发
  • 从数据库到游戏
  • 游戏中的广义背包系统
    • 概念
    • 意义
    • 交互逻辑
  • 总结

摘要

  • 背包系统作为游戏中常见的一个系统,它的实现基本有迹可循。相比于其他内容它的实现思路具有较大的普适性。
  • 在平时的开发练习中,曾用过许多种设计思路去实现背包系统。根据这些练习的经验总结,可以知道各种背包系统设计的基本思路都是大相径庭的。
  • 因此打算就一般思路进行一次总结

从数据库概念基础出发

  • 其实很多程序,不止游戏,也包括网站等。它们都会使用数据库功能。
  • 一般来说,程序中大量的数据都会存储在数据库的一张张表中。而对于数据库操作,大体上可以分为查询和更新两部分。而在更新中,又有增、删、查、改四种基本操作。
  • 一般来说,如果要将网站上的某个数据存储到用户个人账户上,例如收藏文章。那么就会使用“增加”功能,将该文章的id加入到用户自己的专门存储收藏栏的表中。
  • 这就是数据库的基本操作。

从数据库到游戏

  • 虽然不同设计模式或者程序框架下,对于“数据表”有着不同的设计和对接要求。但说到底,每一个可以存储”物品“的对象都存在一张”数据表“用于存放物品的id或者对象引用。
  • 就游戏而言,一般会将所有的物品数据存储在内置数据库或者实例化对象的字典或列表中。这些表通常存储着物品的共同信息和特定信息。共同信息包括id,名称,描述,价值,是否可堆叠等。而特定信息一般用于存储装备、道具等的特殊信息。
  • 而背包系统则是存储持有道具的id或对象引用以及数量等。
  • 而游戏中的任何物品的存储和转移行为,如掉落物,采集物,购买,出售。在后端都可以按照增删逻辑来实现,只不过一般来说商店的存储方式和玩家背包的存储方式不同。

游戏中的广义背包系统

概念

  • 我个人认为,游戏中各种具有物品存储和转移性质的系统或对象,都可以称之为背包系统。而这些背包系统和传统的玩家背包有所不同,因此我称之为广义背包系统。
  • 广义背包系统可以分为值背包系统和引用背包系统。这里我借用了编程语言中的”值“和”引用“的概念。
  • 值背包系统即与数据库分开存储和管理的背包系统,如玩家背包,通常它不仅仅是存储一个物品的引用,还包括其他与”实例化“相关的信息,例如持有数,如果有诸如能量损耗,则还包括当前能量存储值。
  • 引用背包系统则是与数据库相关联的背包系统,它仅仅保存对数据库中物品的引用,例如只有存储了物品id的列表。如商店,怪物掉落物等。

意义

  • 从显示的角度上看,无论是值背包还是引用背包,都可以采用同一套前端逻辑进行显示(特殊需求除外)
  • 一般来说,值背包是动态的,引用背包是静态的。当然实际开发中的需求比较复杂,可能不能对系统的性质进行二值判断。不过在开发中也不需要太过在意它是”值“类型的背包还是”引用“类型的背包。
  • 一般来说,引用背包只会和值背包进行交互,而值背包则可以和引用或值背包交互

交互逻辑

  • 从对方获取物品时,如果自己背包没有,就拷贝一份,并设置计数量,否则计数+N,同时付出代价。
  • 给予对方物品时,如果自己物品数大于需求,则计数-N,若物品数等于需求,则移除物品。否则不可给予。给予成功时,则得到回报。

总结

  • 以上主要阐述了对背包系统的后端逻辑的观点。而前端交互则需要具体问题具体分析。一般前端交互涉及很多手感、体验上的非业务需求。因此不在这里赘述。

你可能感兴趣的:(#,UI界面开发,ui,c#,unity)