接着前面所讲的RPG数值系统,前面讲到怎么添加一些基本属性然后怎么通过可视化的方法给每个人物进行配置他们所有属性,接下来就是怎么知道我的属性它的值是多少,例如当角色进入攻击状态的时候我们需要知道角色的攻击力,暴击概率,攻击速度,及暴击倍数,同时当角色进入被攻击状态的时候,如果角色受到的是魔法伤害我们需要知道角色的魔法抗性是多少,当敌军是物理攻击的时候,我们需要知道角色的护甲是多少。最后计算出消耗多少血量,还有我们买了一把攻击力比较高的长剑或者买了一本魔法强度比较高的法典时,这些都会对我们原有的攻击力或者法术强度进行修改,当我们取值的时候插件会提供给我们方法。

            var t = rpgStatCollection.GetStat<RPGStatModifiable>(RPGStatType.Armor);Debug.LogError(t.StatValue);var t1 = rpgStatCollection.GetStat<RPGVital>(RPGStatType.Armor);Debug.LogError(t1.StatValue);Debug.LogError(t1.StatValueCurrent);var t2 = rpgStatCollection.GetStat<RPGAttribute>(RPGStatType.Armor);Debug.LogError(t2.StatValue);var t3 = rpgStatCollection.GetStat<RPGStat>(RPGStatType.Armor);Debug.LogError(t3.StatValue);

当属性的类型是RPGStatModifiable,RPGAttribute,RPGStat的时候我们只能拿到他得StatValue的值,当为RPGVital的时候我们可以拿到StatValueCurrent的值,这个值是有set方法的而所有的StatValue的值只有get方法,所以如果需要对StatValue值进行改变就需要通过其他的方法了。方法如下:

            var t = rpgStatCollection.GetStat<RPGStatModifiable>(RPGStatType.Armor);Debug.LogError(t.StatValue);  t.AddModifier(new RPGStatModBaseAdd(100));t.UpdateModifiers();

改变当前属性的值有几种方法,主要有RPGStatModBaseAdd,RPGStatModTotalAdd,RPGStatModBasePercent,RPGStatModTotalPercent这些,他们分别的意思是对基本值进行添加,计算完了之后的值进行加减,后面2个和前面2个意思基本保持一致,只不过后面是百分数而已,知道了怎么拿到属性的值还有怎么修改属性的值之后这个插件就基本没什么好讲的了,不过还存在一些小小的问题就是,假如角色买了一把无尽之刃,它既添加攻击力有增加暴击伤害,它同时对2个或者以上的属性的值就行了修改,所以我们把修改属性的值的这种东西称作一个Modifieritem,这个Modifieritem包含了对多个属性值得改变,所有他这里存在一个list然后每个list里面的单个list[i]包含对那个一个type值(这个值是一个枚举值,它可能是护甲,或者魔抗等等),同时也包含是那个具体的修改器是上面四种修改器的某一种。所以我们需要对RPGStatCollection写他的扩展方法。同样我们还存在一个问题就是当我们卖掉这个装备的时候,我们需要移除一些修改器,同样假如我们买了一些小的装备然后把这些小的装备合成一个大的装备的时候我们需要把这些小的装备的修改器移除掉同时又需要添加这个大的装备的修改器,所以扩展类的作用就完成这些作用,代码就直接贴出来 比较简单。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using StatSystem;public static class RpgCollectionExt
{public static Dictionary<int, RpgClollectionItem> ModifierDictionary; private static void AddStatModifier(this RPGStatCollection rpgStatCollection, RPGStatType rpgStatType,RPGStatModifier rpgStatModifier){rpgStatCollection.AddStatModifier((int)(rpgStatType), rpgStatModifier);}public static void AddCollectionItem(this RPGStatCollection rpgStatCollection, RpgClollectionItem modifier){if (ModifierDictionary == null){ModifierDictionary = new Dictionary<int, RpgClollectionItem>();}if (ModifierDictionary.ContainsKey(modifier.Id)){var modifieroitem = ModifierDictionary[modifier.Id];for (int i = 0; i < modifieroitem.Items.Count; i++){var item = modifieroitem.Items[i];rpgStatCollection.RemoveStatModifier((int)item.RpgStatType, item.RpgStatModifier);}ModifierDictionary.Remove(modifier.Id);}for (int i = 0; i < modifier.Items.Count; i++){var item = modifier.Items[i];rpgStatCollection.AddStatModifier(item.RpgStatType, item.RpgStatModifier);rpgStatCollection.UpdateStatModifer(item.RpgStatType);}ModifierDictionary.Add(modifier.Id, modifier);}}

里面有一个添加的方法同时肯定差一个移除的方法,所以这里如果有需要自行添加移除方法了。下面给出插件项目文件这个文件中包含了一些跟插件无关的东西,如果有需要大家自己把无关的移除就行了。如果有需要可以后面讲一个完整的RPG游戏(包含ui,主游戏逻辑和SDK等),项目地址:https://pan.baidu.com/s/1dEUOdUD,如果有需要可以联系本人,qq:1850761495

RPG 游戏数值系统—2相关推荐

  1. RPG 游戏数值系统—1

    今天讲一下做RPG游戏一个插件-RPGStatCollection,RPG游戏最主要的就是我们所谓的一些数值,就像英雄联盟一样,你选择每个角色的时候如果不带天赋和符文进去,每个角色都是存在基本的数值的 ...

  2. [转载]Unity的RPG游戏装备系统的实现

    原作者和链接: RPG游戏<黑暗之光>流程介绍与代码分析之(八):装备系统的实现 - s1314_JHC的博客 - CSDN博客 https://blog.csdn.net/s1314_J ...

  3. RPG游戏-道具系统

    (一)服务器端 在数据库结构中,一个角色对应多个道具物品. (1)道具类 1.道具定义: using SkillBridge.Message; using System; using System.C ...

  4. RPG游戏-小地图系统

    1.地图资源的制作 通常有三种方式: 1)实时渲染场景: 2)预渲染顶视图+润色 3)纯美术制作 这里采用第二种方式 (1)使用图片MASK方式设置小地图的蒙层,这里的Mask图片采用的是圆形的白色图 ...

  5. RPG游戏-小地图系统(二)

    这里对上次的代码做优化,当进入或者地图时,小地图UI也应该进行变化. 调用次序:MapController->MiniMapManager -->UIminiMap 1.MapContro ...

  6. RPG游戏-刷怪系统

    一.数据定义 (一).刷怪规则定义: namespace Common.Data {public class SpawnRuleDefine{public int ID { get; set; }pu ...

  7. 游戏商店系统定时限购玩法设计是否合理

    今天在重写一个商店系统的服务端,并且对整套商店系统进行了一个结构性优化,新加了一个叫按时间限购的功能.这个功能的存在是否合理呢? 玩家操作游戏产生价值,如获得物品,价值货币,通过物品或者价值货币进行消 ...

  8. 游戏的数值系统的实现和演化

    在游戏的战斗系统中,数值系统是很重要的模块之一.对策划来说,数值策划是一个非常重要的分类,关于数值从策划的角度介绍的比较多.但是对于程序来说,可能是这一块和需求比较密切,实现起来也没有特别复杂,关于数 ...

  9. Silverlight 2.5D RPG游戏技巧与特“.NET技术”效处理:(十一)AI系统

    谈到人工智能(AI),这个话题就太大了:大学里有<人工智能教程>专门讲这方面的知识,什么大名鼎鼎的人工神经网络.遗传算法等等均可一窥究竟,这里如赘述似乎有些班门弄斧,我们暂且丢它一边去吧. ...

最新文章

  1. [祝]微软山西DotNet俱乐部(高校行系列)山西大学公益讲座
  2. 使用Visual Studio 2010开发和调试Html5项目
  3. 软考-信息系统项目管理师-信息文档管理与配置管理
  4. 通配符在泛型中的应用
  5. mysql 5.6 初始化_MySQL 5.6 关于登陆的初始化设置
  6. java scrollpane源码_JScrollPane用法 Java实例
  7. kotlin 查找id_Kotlin程序查找圆柱体区域
  8. 银行业DevOps状态:来自DOES 2018伦敦大会的报告
  9. TCP IP通讯三次握手四次挥手
  10. Atitit aop的一些资料 目录 2. AOP(面向切面) 1 2.1.   切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等 2 2.2.   通知(Advice
  11. mysql安装包5.7.17.0_mysql-5.7.17-winx64压缩版的安装包下载和安装配置
  12. PS个人证件照片更换背景颜色
  13. 中国移动OMS操作系统厂商播思获1740万美元风投
  14. 达梦数据库表被锁住后解锁方法
  15. ABAQUS INP文件详解
  16. NVIDIA英伟达又发布了哪些黑科技?
  17. Java程序员春招三面蚂蚁金服,1-3年Java开发工程师面试经验分享
  18. 关于图像处理分析的一些理解
  19. 【JavaScript】分享一个定时到网站上签到/签退的JS脚本
  20. 用计算机描点法画方程函数图像,函数的三种表示方法及用描点法画函数图像.——青夏教育精英家教网——...

热门文章

  1. 一个投资者想要的真正的DAO-Revolution DAO
  2. 无锁队列的实现 | 酷壳 - CoolShell.cn
  3. PAT (Advanced Level) Practice 题解代码 - II (1051-1100)
  4. 141.如何个性化推荐系统设计-1
  5. 无线防静电手环腕带拆解
  6. JS实现网站声音提示,兼容IE与chrome,附谷歌chrome浏览器无法自动播放声音解决方法
  7. matlab算地形坡度,自然地形坡度分析、坡向分析的作用
  8. 解决win7电脑无法打开此计算机组策略对象的问题
  9. Beats:Beats 在 Kibana 中的集中管理
  10. if判断中的true和false