This commit is contained in:
2023-06-29 11:55:02 +08:00
commit 36e95249b1
1236 changed files with 464197 additions and 0 deletions

1
05-SDHGame/.keep Normal file
View File

@@ -0,0 +1 @@
this file is created for keeping the folder after git.

View File

@@ -0,0 +1,47 @@
## 道家手诀
- 道教手印示范https://zhuanlan.zhihu.com/p/61527767
- 道家九字真言手印教程https://www.zhihu.com/zvideo/1421205441016205312
## 符箓
清代道教手抄全符秘本https://zhuanlan.zhihu.com/p/48983252
也可以参考图书馆。
## 施法Pose
山西玉皇庙彩塑
《道士下山》《绣春刀》《禁武令之九幽》动画片《功夫小子》
## 呼吸吐纳法
《武当九式吐纳养生法》《传统武术答疑解惑录》
修炼步骤:
- 两脚平衡分开与肩同宽
- 脚十趾轻轻抓地
- 脚掌心微空
- 涌泉穴有上吸之意
- 双腿微弯曲
- 双手掐腰大拇指朝后(或双手相互叠加于小腹关元穴前)
- 双肘微微前扣,胸微含,肩打开
- 舌抵上腭双唇紧闭牙齿松开
- 下颚微微内收,顶劲领起
- 眼平视或略微向下
- 立身中正
- 鼻呼鼻吸
**呼吸动作**
>逆腹式呼吸(吸气时收腹,吐气时小腹鼓起),吸气时提肛收阴,同时收腹向前上方送出胯部。吐气时小腹鼓起同时开档泛臀(向上轻轻翘臀),吸气要深吐气要长,吸和呼用时一致,即吸多少呼多少,气息绵绵不断呼吸和动作完全保持致习练十几分钟做到320次吐纳。吐纳完毕收功三次结束。
**力度掌握**
>视练功情况和练功者身体状况而定,一般前期用文火吐纳(力度小,且大部分朋友的身体情况太差了),待身体逐渐恢复健康后,想练功亦或者养生,由学员自行选择,文火武火吐纳,选择一种持续学习。一般要根据体质的差异和练功阶段制定不同的练习计划,季节不同、地域不同、时辰不同也有所变化。具体细节要在学习过程中。由专业的教练把控指导。
**意金导入**
>练功前期:意守关元,即呼和吸时意念想着关无穴的地方(肚脐下四指),丹田处,学前先找到属于自己的丹田位置!
>练功中期:吸气时,意守长强,长强穴得气,清气沿督脉上升,气冲百会;呼气时,气沿任脉下降,气沉会阴,一吸一呼一周天,即循小周天。
>练功后期:循大周天,这里不详述。
## 参考电影
林正英系列:

View File

@@ -0,0 +1,107 @@
## 角色类
逻辑位于BP_PlayerCharacter中通过按键事件执行ActivateAbilitiesWithTags定义于ARPGCharacterBase本质上是执行AbilitySystemComponent的TryActivateAbilitiesByTag函数、ActivateAbilitiesWithItemSlot定义于ARPGCharacterBase本质上通过查询ItemSlot来激活对应的Ability使用了AbilitySystemComponent的TryActivateAbility函数来施放“Ability”。
## Ability类
在ActionRPG中攻击Ability以PlayMontageAndWaitForEvent为主这个节点是一个GameplayTask具体的介绍可以参考我之前的文章。攻击Ability的基类为Abilities/Shared/GA_MeleeBase。
一种是武器攻击判定在Ability类中通过PlayMontageAndWaitForEvent节点播放Montage之后通过在Montage中设置的AnimNotifyWeaponAttackNS调用对应角色的WeaponActor的EventBeginWeaponAttack来开启WeaponActor的碰撞判定。之后将碰撞的Actor信息通过SendGameplayEventToActor发送给角色。
另一种是范围技能直接通过AnimNotifyRangeAttackNS向对应角色发送EventTag来触发SendGameplayEventToActor
### PlayMontageAndWaitForEvent事件处理
PlayMontageAndWaitForEvent之后会接收到信息本质是角色的AbilitySystemComponent接收到事件之后再广播委托Event会包含发起者与目标对象之后调用ApplyEffectContainer函数将Ability类中设置的GameplayEffect应用到与之对应的target上通过设置对应的URPGTargetType派生类
### URPGTargetType
在GA_MeleeBase中默认使用的目标对象获取类为URPGTargetType_UseEventData。可以看得出是直接使用了EventData。
```
void URPGTargetType_UseEventData::GetTargets_Implementation(ARPGCharacterBase* TargetingCharacter, AActor* TargetingActor, FGameplayEventData EventData, TArray<FHitResult>& OutHitResults, TArray<AActor*>& OutActors) const
{
const FHitResult* FoundHitResult = EventData.ContextHandle.GetHitResult();
if (FoundHitResult)
{
OutHitResults.Add(*FoundHitResult);
}
else if (EventData.Target)
{
OutActors.Add(const_cast<AActor*>(EventData.Target));
}
}
```
除了c++ 实现的URPGTargetTypeActionRPG还使用蓝图实现了TargetType_SphereTrace其他皆只为参数修改。本质上还是碰撞判断所以个人还是推荐使用C++来实现,以获得较好的性能。
## WeaponActor
其中攻击判断逻辑位于WeaponActor中的ActorBeginOverlap事件其他逻辑主要为开启与关闭碰撞判定。
Instigator为Actor中伤害系统Damage中的组成部分可以理解为伤害的发起对象。在WeaponActor中即为装备了该武器的角色类。
攻击判定逻辑大致为:
1. 判断碰撞到武器是否为武器本身。
2. 如果不是且处于攻击过程中就向WeaponActor发送GameplayEvent通过
[WeaponActor蓝图](http://blueprintue.cn/render/-9q3fr9h)
## ActionRPG中的Combo实现
官方的ActionRPG是将连击逻辑中跳转控制放在Character类中。
在播放Montage的过程中触发AnimNotifyAnimNotify会设置BP_PlayerCharacter类中的JumpSectionNotify引用还会设置一个Bool变量。并在需要跳转MontageSection时读取SectionName以进行跳转。
DoMeleeAttack中的逻辑为如果符合若干前置条件并且没有施放GA_MeleeBase及其子类能力就施放指定Melee能力。如果正在施放Melee能力则进行Montage跳转调用AnimInstance的MontageSetNextSection
具体的实现请参考ActionRPG案例中的Blueprints/AnimNotifies/JumpSectionNS与Blueprints/BP_PlayerCharacter中的DoMeleeAttack函数。
## 本人尝试的方法
本人想把所有逻辑都写进Ability中尝试了以下几个思路
>通过AbilityActorInfo获取AnimInstance之后绑定AnimationInstance中的OnPlayMontageNotifyBegin与End委托来获取Notify信息。
这个方法因为OnPlayMontageNotifyBegin与End委托没有暴露给蓝图并且还需要所以需要编写c++有点麻烦。另外我还写了个AnimNotifyState类重写若干虚函数以绑定这两种委托。因为默认只有UAnimNotify_PlayMontageNotifyWindow与UAnimNotify_PlayMontageNotify会触发这两种委托。这里先介绍一下
**ActorInfo**
是一个包含各个组件指针的类换句话说就是一个GAS组件拥有者的相关组件指针类应该是在Component初始化时填充数据
```
/** Cached off data about the owning actor that abilities will need to frequently access (movement component, mesh component, anim instance, etc) */
TSharedPtr<FGameplayAbilityActorInfo> AbilityActorInfo;
```
你可以在Ability蓝图类中调用GetActorInfo获取,之后再通过ActorInfo获取AnimInstance操作Montage。
```
UAnimInstance* AnimInstance = AbilityActorInfo.IsValid() ? AbilityActorInfo->GetAnimInstance() : nullptr;
```
当然也可以使用
```
/** Returns the avatar actor for this component */
AActor* GetAvatarActor() const;
```
进行获取。
但上面介绍的方法依然需要将Montage跳转逻辑写在角色类中这主要是因为调用TryActivateAbilityByClass函数会重复创建Ability实例。所以
>我写了个新的TryActivateAbilityByClassOrReturnInstance函数当存在指定类型的Ability实例就不会创建新的实例而是返回这个实例。
这样我们就可以把所有逻辑都写在Ability类中了。但是这个方法需要编写若干c++代码比如增加GamplayAbility存在实例时的事件、增加若干TryActivateAbility系列函数这对只会蓝图的开发开发者不太友好。所以下面我将介绍另一种方法
## 使用GameplayEvent控制
这个方法的好处在于不用写c++代码能把技能相关代码都写进Ability类中。在外部使用Event对Ability进行控制易于观察与控制同时也进行了解耦。
1. 在AnimNotify中使用GetOwner获取Character后作为SendEventToActor的参数使用并在SendEventToActor的参数中填入对应的GameplayEvent标签与所需的Payload结构体。
2. 在角色类中对应的输入事件中首先判断是否存在对应标签的Ability参考Blueprints/BP_Character中的IsUsingMelee之后根据结果执行TryActivateAbilityByClass构建Ability或者调用SendGameplayEventToActor发送Combo事件。
3. 在对应Ability中RPGAbilityTask_PlayMontageAndWaitForEvent节点的RecivedEvent下判断接收到EventTag并执行对应的逻辑比如接收到ComboEvent则进行Montage跳转接收到HitEvent则将DamageEffect应用到目标上。
如果你有强迫症想把所有逻辑都写进Ability中那就把这个方法与上一种方法合起来使用吧。
### 有关SendGameplayEventToActor
1.~~SendEventToActor所用的GameplayEventTag必须是Event的子标签。~~ 其实是因为ActionRPG的PlayMontageAndWaitForEvent节点加了过滤事件EventTag形参
2.SendEventToActor的Payload形参中的OptionalObject可以用来传递自定义的UObject以此来达到传递自定义数据的目的。具体操作为使用ConstructObjectFromClass节点对自己定义的UObject在UObject中定义各种数据变量进行实例化C++好像是NewObject再对实例进行修改后修改变量或者调用函数操作连入OptionalObject。之后就可以在RecivedEvent委托中获取这个UObject。
3.SendEventToActor的目标Actor必须继承IAbilitySystemInterface接口。
## 结语
以上就是ActionRPG与本人Demo的攻击判断逻辑但有一些还是需要改进例如对于使用骨骼模型的PhysicalAsset进行攻击判断的方案这套逻辑容易造成重复判定。
在看源码的时候发现了个不错的GameplayAbility文档
[https://github.com/tranek/GASDocumentation](https://github.com/tranek/GASDocumentation)配合最近挺火的https://www.deepl.com/translator翻译效果更佳。
除了文档之外它还包含了一个小项目我大致看了一下推荐在学习过ActionRPG后在学习这个项目。
这个项目使用AbilityInput绑定与GameplayCue使用Tag进行技能施放与阻止施放判断同时有更多的c++代码对于ActionRPG是一个很好的补充。
另外我还找到一个中文版(然而并不全),大致看了一下应该是学习了这个项目后写的笔记,英语不太好的可以参考下:
https://tianqi.li/2020/02/29/gas-document.html

View File

@@ -0,0 +1,54 @@
## ActionRPG中的文件夹结构
```
Ability
|——DataTables (数据表)
|——Enemies (敌人的能力)
|——Player (玩家的能力)
└──Shared 继承c++父类的基础蓝图类)
```
## 需要实现的基础能力类
GA_MeleeBase
GA_PotionBase
GA_Skill
GE_DamageBase
GE_DamageImmune
GE_HealBase
GE_MeleeBase
GE_RangedBase
GE_StatsBase
## 武器类实现
其中主要的攻击逻辑位于WeaponActor中。(ActionRPG中是WeaponActor引用DataAsset)
基础的DataAsset用于设置数据GameplayAbility以及关联需要加载Asset。
### 攻击判定
OverlapBegin:
对进入判定区域的Actor发送hit信息也就是GameplayEventData里面带有事件类型攻击类型、施放者与目标。
OverlapEnd用于重置OverlapBegin中的DoOnce判断。
BeginWeaponAttack设置初始相关变量设置IsAttacking为true开启碰撞判断
EndWeaponAttack设置IsAttacking为false关闭碰撞判断。
### 伤害以及队伍判定
队伍判定可以使用GameplayEffect做成Buffer进行判断之后再使用计算类或者修改类进行伤害计算。
### 关于GA_MeleeBase部分
执行PlayMontage And Wait for EventGameplayTasks播放Montage
如果在执行过程中发生了事件则会执行应用GameplayEffect事件。如果发出的Gameplay事件与传入的 EventTags 匹配,将使用标记和有效负载激活 EventReceived 执行引脚,然后调用 ApplyEffectContainer 函数。
GA_MeleeBase的EffectContainerMap会设置EventTag与GameplayEffect的map。PlayMontage And Wait for Event会根据接收到EventTag对目标对象赋予GameplayEffect.
这些EventTag是从Montage中的AnimNotify中赋值给WeaponActor之后再调用WeaponActor的BeginAttack事件。
### RPGtargetType类
从武器类中得到的GameplayEventData数据中提取到目标的Actor指针。
## 角色类与敌人类的实现
### 连击逻辑
如果处于能施放能力状态下再进行是否处于连击状态判断之后选择激活武器能力或者跳转MontageSection。
个人觉得连击的逻辑与变量还是放在武器类中比较好。
AnimNotiy里控制下一个MontageSection变量与偏移事件。相关的变量与计时在武器类中。
## GameMode与GameInstance逻辑
GameMode编写控制游戏开始与结束的逻辑对于Demo可以编写角色重生与死亡后的逻辑。

View File

@@ -0,0 +1,119 @@
```
Ability能力类型使用物品、连击、随机数值技能、技能
|——item √
|——Melee √
|——Ranged
|——Skill √
| └──GA_QuickStep √
Cooldown技能冷却存在即代表技能处于冷却状态
| └──Skill
EffectContainerGameplayEffect容器用于将所有Effect应用到目标
| └──Default
Event事件
| └──Montage
| |——layer
| | |——Combo
| | |——BurstPound
| | |——ChestKick
| | |——FrontalAttack
| | |——GroundPound
| | └──JumpSlam
| └──Shared
| |——UseItem √
| |——UseSkill √
| └──WeaponHit √
Status状态
| └──DamageImmune
AttackType
| └──Physical
| | |——Chop
| | |——Hit
| | └──Stab
| └──Magic
| |——Fire
| |——Ice
| |——Shadow
| └──magic
DefensiveType
| |——NoArmor
| |——LightArmor
| └──HeavyArmor
Team
| |——Monster
| └──Player
```
## 角色属性
生命、最大生命值
符文、最大符文值
体力、最大体力值
攻击力、防御力
移动速度
韧性
## 武器属性
冲击力 分为5个等级Light中是normal大是heavy击趴击飞是massive 强制force。
攻击类型
## 防具属性
其中,将物理防御力,防打击,防斩击,防突刺统称为物理抗性
将法术防御力,火防御力,雷防御力统称为属性抗性
将出血抵抗力,毒抵抗力,诅咒抵抗力统称为异常状态抗性
强化防具时,所有物理抗性与所有属性抗性的变化是一样的,而异常状态抗性则是另外的变化规律。
剩余三项:韧性,耐久和重量不会因强化而发生改变
## AttackType
物理攻击:斩、打、刺
魔法:火、冰、暗、法术
## DefensiveType
无甲、轻甲、重甲
## 物品
### c++定义的物品类
RPGPotionItem 放在地上的buff或者药水什么的
RPGSkillItem 技能
RPGTokenItem 凭证或者货币,钱或者魂
RPGEquipmentItem 装备
## 各种倍率
抗性
无 极少 少 中 高 极高 免疫
0% 12.5% 25% 50% 75% 87.5% 100%
被攻击有效程度
70% 85% 100% 135% 150%
强 较强 中 较弱 弱
## 各种状态
# actionRPG原始表
```
Ability能力类型使用物品、连击、随机数值技能、技能
|——item
|——Melee
|——Ranged
|——Skill
| └──GA_PlayerSkillMeteorStorm
Cooldown技能冷却存在即代表技能处于冷却状态
| └──Skill
EffectContainerGameplayEffect容器用于将所有Effect应用到目标
| └──Default
Event事件
| └──Montage
| |——layer
| | |——Combo
| | |——BurstPound
| | |——ChestKick
| | |——FrontalAttack
| | |——GroundPound
| | └──JumpSlam
| └──Shared
| |——UseItem
| |——UseSkill
| └──WeaponHit
Status状态
└──DamageImmune
```

View File

@@ -0,0 +1,67 @@
# 搜索
scorched、scorch、burnt wood、charcoal
# 推荐合集
TUTORIAL
FANTASY FORT
魔兽世界场景
TUTORIAL
FOREST PATH
森林
TUTORIAL
SCI-FI LANDSCAPE
COMMUNITY
FOREST RUINS
COMMUNITY
GEODOME
COMMUNITY
SHORELINE REMAINS
COMMUNITY
THE FOREST STAIRWAY
# ENVIRONMENT
ICELAND
灰白色的沙地与石头都很适合
CASTLE RUINS
北欧风格城堡
ROMAN EMPIRE
里面的石柱与石砖较为合适
WILD WEST
欧洲乡村,里面的轮子、水桶会比较合适
LIMESTONE QUARRY
UE5演示中的神庙
RUBBLE
里面的碎石堆挺不错
# ESSENTIAL
JUNGLE FLOORS
丛林地面贴花
MEDIEVAL TOOLS
中世纪工具,锤子、榔头、铁砧、镰刀、铁链
MOSS
苔藓
NATURAL SCATTER DEBRIS
这个集合中的鹅卵石,碎屑和枯叶填充您的场景。
Sands
沙地
Wear-and-tear
破损以及刮痕
Wooden-decorative
木头装饰物

View File

@@ -0,0 +1,50 @@
## RPGGameplayAbility使用说明
### AnimNotify
- ANS_SendGameplayEventToSelfTwice
- ANS_AddGameplayEffectToSelf
### GameplayAbility
/** Gameplay标签与GameplayEffect Map */
ActionRPG框架使用
- TMap<FGameplayTag, FRPGGameplayEffectContainer> EffectContainerMapTag与Effect的对应关系Map根据接收到的Tag应用对应的GE。
- FGameplayTagContainer ActivateEffectTag存储被激活的EffectTag。
- MakeEffectContainerSpecFromContainer()根据EffectContainerMap构建EffectContainerSpec。
- MakeEffectContainerSpec()构建EffectContainerSpec。
- ApplyEffectContainerSpec()对指定目标应有GE。
- ApplyEffectContainer() 调用MakeEffectContainerSpec生成FRPGGameplayEffectContainerSpec再对指定目标应用GE。
- TMap<FGameplayTag, FActiveGameplayEffectHandle> ActivateEffectMapTag与ActiveEffectHandle的Map.
- BP_ApplyGameplayEffectToOwnerAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- ApplyGameplayEffectToOwnerAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- K2_ApplyGameplayEffectSpecToOwnerAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- ApplyGameplayEffectSpecToOwnerAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- BP_ApplyGameplayEffectToTargetAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- ApplyGameplayEffectToTargetAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
K2_ApplyGameplayEffectSpecToTargetAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- ApplyGameplayEffectSpecToTargetAndSaveHandle()往ActivateEffectMap添加Tag与Handle的版本。
- RemoveActiveGameplayEffectByContainer()根据指定Tag查询ActivateEffectMap之后根据Tag对应的Handle移除对应自身的GE,不指定就移除所有Map存储的GE。
### AttributeSet
具体请参考RPGAttributeSet.h中注释。
#### 基础属性
- 生命值 FGameplayAttributeData Health;
- 最大生命值 FGameplayAttributeData MaxHealth;
- 精力值 FGameplayAttributeData Energy;
- 最大精力值 FGameplayAttributeData MaxEnergy;
- 魔法值 FGameplayAttributeData Rune;
- 最大魔法 FGameplayAttributeData MaxRune;
- 攻击力 FGameplayAttributeData AttackPower;
- 防御力 FGameplayAttributeData DefensePower;
- 移动速度 FGameplayAttributeData MoveSpeed;
- 韧性 FGameplayAttributeData Tough;
### GameplayTag
具体请参考Config目录下的GameplayTag.json文件。
### AsyncTasks
- AsyncTaskAttributeChanged异步检测属性集中的属性变化。
- AsyncTaskCooldownChanged异步检测冷却变化。
- AsyncTaskEffectStackChanged异步检测GE堆叠变化。
- URPGAbilityTask_PlayMontageAndWaitForEvent播放Montage并且执行对应回调事件。

View File

@@ -0,0 +1,100 @@
战斗类似3d dnf
游戏时间一周目20~30小时熟练玩家可以10小时通关。
## 创建新档
捏脸、名字、roll属性点
## 锻体
- 动作参考风格:普通的武器攻击,攻击招式比较基础与僵硬(普通人级别的招式)
- 设计目的与时间游戏开始讲述开场剧情完成开场事件后进行教学关卡会出现一位师傅NPC传授基础操作。完成后会以一段动画游戏OP之后进入练气期间最后主角成功能放出对应属性的气
- 游戏时间时间会在5~30min。
## 练气
- 该阶段可以做的事情:可以学习基础武器攻击招式(流畅的连招,江湖中人级别的招式),基础法术(提升状态)
- 动作参考风格黑魂初期10h与中期
- 作战对象:初级门派中的弟子,后门派外围区域妖兽。
- 增加系统:门派贡献与兑换系统(藏经阁、炼丹房、药园等)、增加门派每周任务与挑战、关系系统(门派里的关系)。
- 设计目的与时间:熟悉游戏的具体设定,让玩家准备大致的修炼方向;可以去门派外围历练。
- 游戏时间2~3H。
## 筑基
- 该阶段可以做的事情:可以学习中级武器攻击招式(带有些许轻微特效,武侠顶级招式),基础攻击法术与若干实用法术(隐身、金钟罩等具有实用效果的),但通过法力限制使用量。修仙之路正式开启。
- 动作参考风格:黑魂后期(法师) 只狼
- 作战对象:野外与秘境遇到外围门派人士与妖兽。
- 增加系统:秘境(副本)、联机(在门派里召唤其他玩家)、炼丹系统、野外临时洞府系统、关系系统(世界关系)。
- 设计目的与时间:正式开始游戏,玩家可以体验大部分修炼系统;可以去大地图历练,积累基础资源以及基础秘籍心法。
- 游戏时间3~5H
## (结晶)金丹
结晶为其他小说的伪金丹
- 该阶段可以做的事情:可以学习高级武器攻击招式(带有微量中量特效<视招式品质与等级决定>,传说中的传奇武侠高手级别招式),中础攻击法术与升级版实用法术。可以把法术作为常规攻击手段,但依然可以被耗死。
- 动作参考风格绯红结系、鬼泣、旧战神3
- 作战对象碰到的一切敌人。出现XX阶妖兽、出现XX魔修。
- 增加系统:大秘境(高难度副本)、带有特写的大招、野外永久洞府系统(你的家,家园系统,内有修炼设备、可以用于召唤其他玩家)、大地图开放新的探险区域、更多的势力、做符、法宝。
- 设计目的与时间:探索更多的区域,了解基础的世界秘密;积累中级础资源以及中级秘籍心法。
- 游戏时间5~8H
## (具灵)元婴
具灵为其他小说的伪元婴
- 该阶段可以做的事情:可以学习顶级武器攻击招式(好看就好,想怎么做就怎么做),高础攻击法术与高级实用法术。大招用得多会空蓝。
- 动作参考风格:猎天使魔女、尼尔机械纪元 驱动妖精(黄游)
- 增加系统开放空岛区域随机生成RougeLike、增加空战、器灵。
- 作战对象:大型怪物、超大型怪物(猎天使魔女)、一切让你感觉不爽的修士。
- 设计目的与时间:让玩家体验完全的系统,探索所有区域,了解大部分的世界秘密;该阶段的设计游玩时间会是最长的。
- 游戏时间8~15H
## 化神(悟道)——羽化(登仙)
- 该阶段可以做的事情突破成仙干死最终Boss。
- 动作参考风格:阿修罗之怒
- 增加系统:仙人模式,招式效果增强,回蓝回血加强。
- 作战对象:大型怪物、超大型怪物(猎天使魔女)、一切让你感觉不爽的修士。
- 设计目的与时间:最终结局,让玩家爽爽,同时解释世界秘密。
- 游戏时间1~2H
## 内容扩充
- 完成基础战斗框架
- 完善1个武器、拳法、法术战斗内容
- 完善世界系统,关系、事件、奇遇。
- 添加法宝、器灵、添加各种大秘境。
## 动作风格
我玩过的动作游戏
鬼泣1345 DMC、猎天使魔女1一半、忍者龙剑传2开头
与ARPG游戏有
黑暗之魂23、怪物猎人世界、刺客信条12345、噬血代码、绯红结系、噬神者3
# 制作目标
制作类似3D DNF
## 玩家游玩动力
鬼谷八荒:
怪物猎人:
血源诅咒、黑魂、噬血代码、绯红结系:
DNF
【游戏设计室】游戏玩家动机模型你属于哪类玩家https://www.bilibili.com/video/BV1e7411c7L7
【游戏设计室】游戏是如何控制你的游戏成瘾机制的心理学解释https://www.bilibili.com/video/BV1Ca411c7JG
【游戏设计室LITE】LOL技能设计的10个原则如何设计优秀的技能https://www.bilibili.com/video/BV1YA41177vi
## 游戏主要玩法模式
联机:
迷宫探索与刷副本:
## 采用机制
## 模仿游戏
我们没有特多精力进行具体的设计,只能先从成熟的游戏中选取精华成分进行套用。
## 动作风格与武技数量
每种武器包含
### 后续DLC更新

View File

@@ -0,0 +1,45 @@
## 经营类参考
修仙经营类《一方灵田》
## 通用
【理科魂学家】魂系列战斗系统的迭代式演进https://www.bilibili.com/video/BV1F4411c7Lg
【理科魂学家】魂系列PVE战斗逻辑分类https://www.bilibili.com/video/BV1F4411c7Nz
## 仁王2
仁王中伤害计算的一些简单结论https://tieba.baidu.com/p/6664515040
【仁王2】真正的半妖都是用头脑战胜敌人https://www.bilibili.com/video/BV1tA411v7Rv
【仁王2】七分钟教你压制人类敌人的最强打法AI状态机分析https://www.bilibili.com/video/BV1cV411r7Hd
【仁王2】从敌人机制设计出发的打法原理概述https://www.bilibili.com/video/BV1g5411t7gY
【仁王2】部分人类boss习性探究与汇总https://www.bilibili.com/video/BV1HK411J7BV
仁王2-对人战术学[关于对战人形boss你所需要知道的一切]-完结https://www.bilibili.com/video/BV1Po4y127CJ/?spm_id_from=333.788.videocard.0
### 精力回复
【仁王2】逐帧比对精力回复速度的机制分析https://www.bilibili.com/video/BV1fr4y1w7uE
【仁王2】精力恢复速度的机制分析https://www.bilibili.com/video/BV1pZ4y1V7ii/?spm_id_from=333.788.videocard.8
## 血源
魂系列之殇——你不该轻视的圣杯地牢前言https://www.bilibili.com/video/BV1Nx411b7p1
(亮度修正版)【血源诅咒】金杯地城&圣杯地牢——积分理论https://www.bilibili.com/video/BV1Ex411u7xW
柯南讲堂【血源诅咒】迷宫基础知识问答https://www.bilibili.com/video/BV1kx411j79L
【血源诅咒】金杯地城全面攻略-战前准备https://www.bilibili.com/video/BV1jW411a7TL
【血源诅咒】金杯地城全面攻略-陷阱认知与破解https://www.bilibili.com/video/BV16W41187qH
【血源诅咒】宝石篇-入门https://www.bilibili.com/video/BV1Ws411p7Dr
【血源诅咒】宝石篇-负面词条研究https://www.bilibili.com/video/BV12s411E7zg
印象破灭【黑暗之魂2】堆怪研究https://www.bilibili.com/video/BV1xW411f7uM
## 黑魂3
印象破灭【黑暗之魂2】堆怪研究https://www.bilibili.com/video/BV1xW411f7uM
黑暗之魂3【柯南讲堂】第二讲化身薪王暂定版https://www.bilibili.com/video/BV1Ex411U7G1
黑暗之魂3【柯南讲堂】第三讲化身余灰续15项https://www.bilibili.com/video/BV1Cx41127LW
【深入理解魂系列】计算伤害时为什么一定要有防御力https://www.bilibili.com/video/BV1SB4y1N7Pi
### 韧性与冲击力
【黑暗之魂3】韧性冲击力谁才是弟弟https://www.bilibili.com/video/BV17t411p7bT
【黑暗之魂3|世界的真相】基础系统讲解一 攻击力与伤害计算https://www.bilibili.com/video/BV1e7411v7Hg
【黑暗之魂3|世界的真相】基础系统讲解二 冲击力-韧性机制https://www.bilibili.com/video/BV1e7411v7wn
【黑暗之魂3|世界的真相】基础系统讲解三 硬直类型总结https://www.bilibili.com/video/BV1i7411v7u2
## 只狼
【理科魂学家|只狼】成功的实验品只狼整体系统的设计理念https://www.bilibili.com/video/BV1ix411f7kq/?spm_id_from=333.788.videocard.1
【理科魂学家|只狼】只狼中忍义手与部分道具的设计理念https://www.bilibili.com/video/BV1Tx411f7E4
## 绯红结系
【绯红结系】二次元ACT大作如何才能打得爽https://www.bilibili.com/video/BV1RU4y1g7ao/?spm_id_from=333.788.videocard.1

View File

@@ -0,0 +1,60 @@
## 动画状态机
总状态
Normal
Fighting
Dead
非战斗状态
Normal
Pickup
Falling可能不需要以后删去
战斗状态
Normal
Attack
Step滑步
Stun 昏迷陷入Debuff
Damage 受到伤害
KnockDown 被击倒
Block 格挡
kick 踹
## 动画蓝图大致逻辑
```
OutputPose
MovementState: 融合 RagdollStates 状态机 通过CharacterBP中的RagdollEnd函数捕捉Pose。
Foot IK: 动画层
Hand IK: LocalToComponent=>TwoBoneIkhand_l=>TwoBoneIkhand_r=>ComponentToLocal
AimOffset And Manual Spine RotationApplyMeshSpaceAdditive BasePostLayering AdditiveAimOffsetBeHaviors动画层
Blend根据Enable_SpineRotation融合B输入为ComponentToLocal《=根据SpineRotation变量旋转各个Spine骨骼《=LocalToComponent《=PostLayering
Post Layering LayerBlending《=BaseLayer、OvelayLayer、BasePose
```
BasePoses为基础Pose里面均为一帧资源。
OverlayLayer为几个不同运动状态的基础Pose。
动画主要的状态都集中在BaseLayer中。观察这个层可以学到以及技巧你可以在层内制作多个状态机并将结果缓存到Pose中。之后再在一个主状态机中进行切换。
### BaseLayer
层中分为大致3个部分普通状态机、AdditiveTransition动画状态机与最终结果合并状态机。
#### (N)Locomotion States
NotMoving主要使用了基础Pose。
RotateLeft与RotateRight主要为控制角色转身时的脚部动画主要使用了ALS_N_Rotate_L90与ALS_N_Rotate_R90 Asset。
Moving状态则使用了(N)Locomotion Detail状态机
#### (N)Locomotion Detail
Walking使用了LocomotionCycles状态机
```
graph BT
A[Walking] --条件-->E(Run)
E(Run)--条件-->B[RunStart]
E(Run)--条件-->C[Walk->Run]
B[RunStart] --条件-->D[Running]
C[Walk->Run] --条件-->D[Running]
D[Running] --条件-->A[Walking]
```
#### (N)Locomotion Cycles

View File

@@ -0,0 +1,30 @@
# □
左边
# ○
○=>L:Confirm
确定
# ∆
∆=>I:UseItem
# ×
X=>K=>AQuickStep
# L1与L2
L1=>E=>LBDefense
L2=>Q=LT>SpecialSkill
# R1与R2
R1=>U=>RBLightAttack
R2=>O=>RTHeavyAttack
# 左摇杆与L3
# 右摇杆与R3
# 方向键
# pad
# Select与Share
Select=>ESC=>StartShowMenu

View File

@@ -0,0 +1,17 @@
Start菜单 Esc
Back
左摇杆按下:
左摇杆运动:移动视角 方向键
左按键(上下左右):切换法术、物品、左右手武器 1234
LT1
LT2
右摇杆按下:锁定敌人 空格
右摇杆运动:角色移动 WASD
Y切换单持/双持/双手
X使用物品
B取消/
A确定/加速跑:
RT1
RT2

View File

@@ -0,0 +1,68 @@
## InputBufferConponent
绑定输入。输入命令队列。
IsTransitimtCache如果有Pool里有对应命令就会切换到下一个State。
### SDHInputCommandActionMap
- Has Order解析Command是否按键顺序。
- InputActionCommandType在LCMDates.h定义。
- ButtonAction在LCMDates.h定义。
## StateMachine
Transition每帧都会检测。
- EnableButtonActionBufferBlockMap该状态可以启用的命令
- ResetButtonActionBufferBlockMapState将所有命令都设置为禁止。
- CacheCommandTransmitter将命令加到Pool中。
## 我的想法
因为大部分StateMachine都和GAS会有关联GASTag与GAS属性判断所以我希望
1. 在OnStartStateMachine中先获取GAS组件。
2. 在编辑器模式下检测StateGraph中的StateABility是否都已经想GAS组件注册。有的时候会忘记
3. 监控Ability是否结束以及控制Ability结束。BP_SDHSkillStateIns
4.
5.
6. 之后使用 FGameplayAbilityEndedDelegate OnAbilityEnded;。
```c++
/** Allow events to be registered for specific gameplay tags being added or removed */
FOnGameplayEffectTagCountChanged& RegisterGameplayTagEvent(FGameplayTag Tag, EGameplayTagEventType::Type EventType=EGameplayTagEventType::NewOrRemoved);
/** Unregister previously added events */
void UnregisterGameplayTagEvent(FDelegateHandle DelegateHandle, FGameplayTag Tag, EGameplayTagEventType::Type EventType=EGameplayTagEventType::NewOrRemoved);
/** Register a tag event and immediately call it */
FDelegateHandle RegisterAndCallGameplayTagEvent(FGameplayTag Tag, FOnGameplayEffectTagCountChanged::FDelegate Delegate, EGameplayTagEventType::Type EventType=EGameplayTagEventType::NewOrRemoved);
/** Returns multicast delegate that is invoked whenever a tag is added or removed (but not if just count is increased. Only for 'new' and 'removed' events) */
FOnGameplayEffectTagCountChanged& RegisterGenericGameplayTagEvent();
/** Executes a gameplay event. Returns the number of successful ability activations triggered by the event */
virtual int32 HandleGameplayEvent(FGameplayTag EventTag, const FGameplayEventData* Payload);
```
1. 监听StateAbility的Ability结束。方法有21、绑定GAS组件的OnAbilityEnded委托。2、重写EndAbility函数。
```c++
bool UAbilitySystemComponent::TryActivateAbilityByClass(TSubclassOf<UGameplayAbility> InAbilityToActivate, bool bAllowRemoteActivation)
{
bool bSuccess = false;
const UGameplayAbility* const InAbilityCDO = InAbilityToActivate.GetDefaultObject();
for (const FGameplayAbilitySpec& Spec : ActivatableAbilities.Items)
{
if (Spec.Ability == InAbilityCDO)
{
bSuccess |= TryActivateAbility(Spec.Handle, bAllowRemoteActivation);
break;
}
}
return bSuccess;
}
bool UAbilitySystemComponent::TryActivateAbility(FGameplayAbilitySpecHandle AbilityToActivate, bool bAllowRemoteActivation)
```
```
void UAbilitySystemComponent::NotifyAbilityEnded(FGameplayAbilitySpecHandle Handle, UGameplayAbility* Ability, bool bWasCancelled)
```

View File

@@ -0,0 +1,300 @@
## 前言
ActionRPG在RPGType.h定义了各个类型在RPGControllerBase类中定义背包逻辑。存档逻辑写在RPGGameInstance与RPGSaveGame中。
个人建议如果你打算制作个人项目这里的代码基本不用改直接就可以用。当然最好还是将共用部分封装成插件这样后续Ue4项目也可以使用。这也是官方GameplayAbility视频教程中所建议的。
## 物品
### RPGItem.h
FPrimaryAssetType ItemType物品类型。其中这些类型都定义在URPGAssetManager类中<br>
其他还有物品名称、描述、图标、价格、最大数量、最高等级、附带的Ability等级变量。
TSubclassOf<URPGGameplayAbility> GrantedAbility:物品附带的Ability的对象
FString GetIdentifierString()返回主资源的Id字符串
FPrimaryAssetId GetPrimaryAssetId()返回主资源的Id
### RPGType.h
#### RPGItemSlot
FRPGItemSlot位于RPGType.h中比如黑魂里的快捷物品栏、装备武器栏。你可以给Slot指定类型来进行区分。因为他通常表现为放置特定类型物品的格子所以之后我就将其翻译成物品格子了。
FPrimaryAssetType ItemType物品类型
int32 SlotNumber该格子所在容器的索引值
#### FRPGItemData
int32 ItemCount背包中的物品数量
int32 ItemLevel物品等级
UpdateItemData函数物品发生变动时的容错处理。
#### 委托
```
//背包物品发生变化时
FOnInventoryItemChanged, bool, bAdded, URPGItem*, Item
FOnInventoryItemChangedNative, bool, URPGItem*
//背包物品格子的信息发生改变
FOnSlottedItemChanged, FRPGItemSlot, ItemSlot, URPGItem*, Item
FOnSlottedItemChangedNative, FRPGItemSlot, URPGItem*
//打包背包系统加载Asset与数据时
FOnInventoryLoaded
FOnInventoryLoadedNative
//加载游戏存档
FOnSaveGameLoaded, URPGSaveGame*, SaveGame
FOnSaveGameLoadedNative, URPGSaveGame*
```
### RPGPlayerControllerBase.h
个人不太喜欢把背包逻辑都写在控制类中还是倾向于封装成一个Component。所以本人通过继承UActorComponent来移植Inventory方面的代码。
#### 变量
```
/** Map of all items owned by this player, from definition to data */
//玩家所拥有物品的Map
TMap<URPGItem*, FRPGItemData> InventoryData;
/** Map of slot, from type/num to item, initialized from ItemSlotsPerType on RPGGameInstanceBase */
//物品格子Map保存物品的类型与数量数据使用RPGGameInstanceBase中的ItemSlotsPerType Map初始化。
TMap<FRPGItemSlot, URPGItem*> SlottedItems;
```
#### 函数
```
//当背包发生变化时,会调用这个函数,并且通知所有委托
void InventoryItemChanged(bool bAdded, URPGItem* Item);
/** Called after an item was equipped and we notified all delegates */
//当物品被装备时,会调用这个函数,并且通知所有委托
void SlottedItemChanged(FRPGItemSlot ItemSlot, URPGItem* Item);
//往背包中增加物品
bool AddInventoryItem(URPGItem* NewItem, int32 ItemCount = 1, int32 ItemLevel = 1, bool bAutoSlot = true);
//从背包中移除物品
bool RemoveInventoryItem(URPGItem* RemovedItem, int32 RemoveCount = 1);
//返回背包中指定类型的所有物品,如果没有指定类型将会返回所有物品
void GetInventoryItems(TArray<URPGItem*>& Items, FPrimaryAssetType ItemType);
//返回这个背包实例的物品数
int32 GetInventoryItemCount(URPGItem* Item) const;
/** Returns the item data associated with an item. Returns false if none found */
//返回指定物品的数据
bool GetInventoryItemData(URPGItem* Item, FRPGItemData& ItemData) const;
//将物品移动到指定物品格子
bool SetSlottedItem(FRPGItemSlot ItemSlot, URPGItem* Item);
/** Returns item in slot, or null if empty */
//返回指定物品格子中的物品指针
URPGItem* GetSlottedItem(FRPGItemSlot ItemSlot) const;
/** Returns all slotted items of a given type. If none is passed as type it will return all */
//返回物品格子中指定类型的物品,如果没有指定类型,将会返回所有物品
void GetSlottedItems(TArray<URPGItem*>& Items, FPrimaryAssetType ItemType, bool bOutputEmptyIndexes);
//填充空的物品格子
void FillEmptySlots();
//保存背包数据
bool SaveInventory();
//载入背包数据
bool LoadInventory();
```
#### 委托
因为本人制作的Demo为魂like游戏所以Token类型的Item会作为“魂”来定义。魂并不会影响UI显示所以本人的项目里会多加一个委托FOnInventoryItemChanged OnInventoryTokenItemChanged;
并且在通知函数FillEmptySlotWithItem中进行判断如果是Token类型就只会对OnInventoryTokenItemChanged进行多播。
```
//背包物品增加或者减少
FOnInventoryItemChanged OnInventoryItemChanged;
//本地版本在BP委托之前执行
FOnInventoryItemChangedNative OnInventoryItemChangedNative;
//当物品格子发生改变时
FOnSlottedItemChanged OnSlottedItemChanged;
//本地版本
FOnSlottedItemChangedNative OnSlottedItemChangedNative;
//背包数据载入时调用委托
FOnInventoryLoaded OnInventoryLoaded;
//本地版本
FOnInventoryLoadedNative OnInventoryLoadedNative;
```
#### 接口
```
// 实现IRPGInventoryInterface
virtual const TMap<URPGItem*, FRPGItemData>& GetInventoryDataMap() const override
{
return InventoryData;
}
virtual const TMap<FRPGItemSlot, URPGItem*>& GetSlottedItemMap() const override
{
return SlottedItems;
}
virtual FOnInventoryItemChangedNative& GetInventoryItemChangedDelegate() override
{
return OnInventoryItemChangedNative;
}
virtual FOnSlottedItemChangedNative& GetSlottedItemChangedDelegate() override
{
return OnSlottedItemChangedNative;
}
virtual FOnInventoryLoadedNative& GetInventoryLoadedDelegate() override
{
return OnInventoryLoadedNative;
}
```
#### 通知
```
/** 给物品格子指定物品如果返回True则代表成功指定物品 */
bool FillEmptySlotWithItem(URPGItem *NewItem);
/** 物品系统数据更新回调函数 */
void NotifyInventoryItemChanged(bool bAdded, URPGItem *Item);
void NotifySlottedItemChanged(FRPGItemSlot ItemSlot, URPGItem *Item);
void NotifyInventoryLoaded();
/** Called when a global save game as been loaded */
void HandleSaveGameLoaded(URPGSaveGame* NewSaveGame);
```
## 存档
### RPGSaveGame.h
它本质上就是个用于存储游戏数据的存储对象。
```
/** 两个存储物品信息的map */
TMap<FPrimaryAssetId, FRPGItemData> InventoryData;
TMap<FRPGItemSlot, FPrimaryAssetId> SlottedItems;
/** 用户独立id */
FString UserId;
protected:
/** 存储废弃物品,这些物品将不会被保存 */
TArray<FPrimaryAssetId> InventoryItems_DEPRECATED;
/** 最后的保存版本 */
int32 SavedDataVersion;
```
### RPGGameInstanceBase.h
主要的存档逻辑都写在这里最主要的就是HandleSaveGameLoaded、WriteSaveGame、LoadOrCreateSaveGame、HandleAsyncSave函数。
#### 变量
```
/** 给新玩家的默认物品 */
TMap<FPrimaryAssetId, FRPGItemData> DefaultInventory;
/** 每个物品格子数目 */
TMap<FPrimaryAssetType, int32> ItemSlotsPerType;
/** 存档槽名称 */
FString SaveSlot;
/** 系统指定的用户序号 */
int32 SaveUserIndex;
/** 当前的存档对象 */
URPGSaveGame* CurrentSaveGame;
/** 是否需要保存 */
bool bSavingEnabled;
/** 是否处于保存中 */
bool bCurrentlySaving;
/** 在保存过程中是否出现了新的保存请求*/
bool bPendingSaveRequested;
```
#### 函数
```
/** 增加新玩家的默认物品 */
void AddDefaultInventory(URPGSaveGame* SaveGame, bool bRemoveExtra = false);
/** 判断物品格子是否有效 */
bool IsValidItemSlot(FRPGItemSlot ItemSlot) const;
/** 返回当前的存档对象 */
URPGSaveGame* GetCurrentSaveGame();
/** 设置当前是否可以保存 */
void SetSavingEnabled(bool bEnabled);
/** 载入或者创建存档对象 */
bool LoadOrCreateSaveGame();
/** 存档的载入流程控制(如果存档类型符合则,加载物品,不符合创建新的存档对象并且加入默认物品) */
bool HandleSaveGameLoaded(USaveGame* SaveGameObject);
/** Gets the save game slot and user index used for inventory saving, ready to pass to GameplayStatics save functions */
/** 取得存档槽名称与用户序号 */
void GetSaveSlotInfo(FString& SlotName, int32& UserIndex) const;
/** Writes the current save game object to disk. The save to disk happens in a background thread*/
/** 将存档写入磁盘,此为异步操作 */
bool WriteSaveGame();
/** 将存档数据清空 */
void ResetSaveGame();
/** 当异步存储进行时调用(为了处理当存档过程中有了新的存档需要的情况) */
virtual void HandleAsyncSave(const FString& SlotName, const int32 UserIndex, bool bSuccess);
```
#### 委托
```
/** 当存档载入或者重置时 */
UPROPERTY(BlueprintAssignable, Category = Inventory)
FOnSaveGameLoaded OnSaveGameLoaded;
/** 本地版本 */
FOnSaveGameLoadedNative OnSaveGameLoadedNative;
```
## 备注
这个游戏中ItemSlot的设置与魂系列游戏不太一样。所以这里建议删除所有自动填充ItemSlot的逻辑重写SetSlottedItem、FillEmptySlots、FillEmptySlotWithItem等函数。
ActionRPG首先会在继承RPGGameInstanceBase的BP_GameInstace中初始化默认存档数据以及加载各个Slot类型的物品Asset。
ARPGPlayerControllerBase::FillEmptySlotWithItem(URPGItem* NewItem)
{
## UMG逻辑
该物品系统是把 消耗品、装备、技能物品都做在一起的。
主要的Asset位于Blueprints-WidgetBP-Inventory
对于背包系统我们只需要看:
### WB_Equipment
#### 设计界面
将5个WB_EquipmentSlot拖到界面中并且将其中3个的ItemType设置为WeaponMinEquippedItems为1。最后按顺序将SlotNumber设置为0~2。
另外两个将ItemType分别设置为Skill与Potion。
#### Construct
取得所有的WB_EquipmentSlot对象并以此构造EquipmentListSlot TArray变量
### WB_EquipmentSlot
主要的逻辑都写在这里
#### Construct
执行刷新RefreshItem事件=》绑定OnSlottedItemChanged事件=》设置控件上Label显示显示为ItemType
#### RefreshItem
从控制类中执行GetSlottedItem获取Slot信息来初始化Item变量=》再以这个信息设置Brush=》并根据Item是否获取成功来设置PotionNumberLabel是否可见。=》设置PotionNumberLabel文字
## 本人设计思路
### ItemType
CanBeUseItemType 可使用物体
SkillItemType 技能
TokenItemType 货币
EquipmentItemType 装备
KeyItemType 钥匙
RubbishItemType 垃圾

View File

@@ -0,0 +1,58 @@
## 受击系统
### 相关属性
- 韧性:通过穿戴装备(功法)从而获取的一种属性。在该属性>0时角色不容易出现硬直属性<=0时容易出现硬直。
- 削韧:武器附带的一种属性。在武器攻击到目标后,会削减目标的韧性。
黑魂还存在以下属性,以此对不同武器对应不同类型怪物的产生硬直关系进行更加精准的控制,暂不考虑属性:
- 强韧度怪物抵抗硬直产生能力的等级。分为等级0~3。最高等级应该为`冲击力最高等级-1`。该属性的设计目的是为了保证高攻速的轻武器无法打出中重硬直。
- 冲击力武器能够造成硬直的能力等级。分为等级0~4分别对应不同的空手、轻武器、重武器、巨大武器。黑魂中一共13的等级其中最高等级指代强制打出硬直、击倒、击飞
但如果考虑到越阶打怪,比如`筑基打金丹`,那使用冲击力系统,`冲击力-1`即可,光使用韧性比较难。
### 运行规则
黑魂的硬直产生使用`冲击力等级-强韧度等级`进行判断(如果韧性打空强韧度-1
- `=`0产生小硬直
- `>`0产生中硬直
- `>`1产生大硬直
我们对此进行简化,在受到攻击后:
- 角色韧性>100不会出现硬直。
- 0<角色韧性<100产生小硬直
- -100<角色韧性<0产生中硬直
- 角色韧性<-100产生大硬直
产生硬直后角色就会恢复所有韧性如果产生了大硬直就可以进行`处决`
## 受击状态
产生硬直会播放对应的动画并且打断当前动作攻击施法互动动作除此之外
- 小硬直人形生物可使用翻滚等移动技能强制解除该硬直怪物摇晃一下
- 中硬直人形生物可使用一些强行受身技能强制解除该硬直怪物摔倒
- 大硬直人形生物无法使用技能解除硬直怪物长时间瘫痪
特殊受击状态会得到`易伤debuffer`根据类型
- 击飞可追加空中追击技能持续浮空落地后会有落地保护。(PVP需要
- 击倒持续时间比中硬直长
## 其他说明
### 武技与蓄力攻击
在黑魂中武技与蓄力攻击都给附带临时的冲击力提升
我们对此进行简化为附带临时的削韧提升
### 霸体
黑魂中的霸体是直接提高强韧度等级来实现的
对此我们简化为直接提升临时的韧性
## GAS实现
- 添加Debuffer.ReduceTough标签与GEGE中Tough的计算使用GameplayEffectExecutionCalculation考虑到功法武器对其的影响
- 添加一个名为RecoverTough的GE使用OriginTough属性来overrideCurrentTough
- 修改Status.Stiffness标签分为成Status.Stiffness.ActionUnderAttackAttacked3种硬直硬直大小使用等级表示0代表无硬直1代表小硬直2代表中硬直3代表大硬直。(做这步时最好git Commit因为修改标签会知道一些Asset引用失效这些标签主要引用在连击GA受击GA硬直GE
目前有2种实现当角色Tough削减至一定数目后给角色添加硬直Debuffer
### 属性集PostGameplayEffectExecute()实现
在PostGameplayEffectExecute()中对Tough进行监视在函数中写编写判断公式当符合条件时对角色应用对应等级硬直GE同时在动画蓝图通过监视GameplayTag函数UAsyncTaskGameplayTagAddedRemoved来设置变量以起到播放动画的目的
### 使用GA实现
因为受击系统主要逻辑都写在GA中所以将硬直逻辑写在GA里或许会更好
在GA激活时使用AsyncTaskAttributeChanged可能再做个AbilityTasks会比较好来监视Tough属性的变化如果达到指定情况就应用对应的硬直GE同时在动画蓝图通过监视GameplayTag函数UAsyncTaskGameplayTagAddedRemoved来设置变量以起到播放动画的目的

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

View File

@@ -0,0 +1,983 @@
血源和魂系列其他作品的硬直系统基本相同。区别就是在魂系列里边韧性这个概念更加明显,而血源里冲击力的概念更加明显,因为攻略本里只写了但是很详细的写了冲击力(impact)但实际上两个都在起作用。关于韧性和冲击力的关系可以参见B站【黑暗之魂3】韧性冲击力谁才是弟弟 这个视频。
血源里的硬直大概可为分为三类
一类是和韧性有关的,但冲击力也作用其中,也是本帖的主要内容。
一类是只和冲击力有关的,也就是敌人无韧性但一定的霸体只能用较高的冲击力来打破。
一类是和伤害有关的,积累伤害出的破坏部位。
第三种就不涉及了,第一种是主要内容。如果以后有心情可能把二种也包括进去因为第二种相当于第一种的特殊情况。
主楼里主要说一些基础内容,具体敌人例子放在后边。
先说说冲击力这块这个在攻略本里边也可以查到虽然里边也有写错的比如锯肉刀变形斩。本文涉及到的主要是以下几种冲击力击趴击飞这几种。和攻略本相对应小微推在攻略本里是Light中是normal大是heavy击趴击飞是massive。其中微是慈悲之刃的一些攻击推是石锤圣剑后撤步r1以及其他一些工作会出现的推动作但这两个不多见并往往和小没区别。
削韧这块,一个很重要的问题是敌人韧性重置速度很快,体感大概三四秒不受攻击之后就会重置回满,因此如果敌人韧性很高的情况下中间中断了就会重头来。
削韧具体数值可参考下图里的文件冲击力也在里边。但电锯L2的削韧肯定是错的。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/AAFFF666BB93460F8DA2F523587AE58F.png)
但大致上轻武器的轻攻击在十几点蓄力重攻击二十多重武器的轻攻击的三十点左右蓄力重攻击多可到六七十。比较快速打韧性的手段斧子大风车是45+39葛拉提亚之拳一拳50如果是跑步滑步接一拳75。下面具体敌人的例子虽然我都试过但是难免会漏掉一些具体情况在敌人某些特殊的霸体情况下可能打不出应该打出硬直也并不奇怪。
15780181.90297
送TA礼物
回复
1楼2019-12-23 07:06
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/9B3B770E5AEE4B33A53A88DB46B72A8F.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=452fc515073853438ccf8729a313b01f\/4a96a063f6246b607c36840dfcf81a4c510fa22b.jpg\")
\u5723\u804c\u8005\u91ce\u517d\/\u52b3\u4f26\u65af
\u97e7\u6027200\uff0c\u4f46\u7834\u97e7\u7684\u4e00\u51fb\u65f6\u7528\u5c0f\u5fae\u63a8\u4e09\u79cd\u51b2\u51fb\u529b\u65e0\u6548
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=ae89a3a51ffa513d51aa6cd60d6d554c\/55144cd6277f9e2f380e2b710830e924b899f334.jpg\")
\u795e\u7236\u517d\u5f62\u6001
\u97e7\u602735 \u7834\u97e7\u65f6\u5c0f\u3001\u5fae\u3001\u63a8\u65e0\u6548\u679c\uff0c\u4e0d\u51fa\u62db\u65f6\u7528\u5927\u4ee5\u4e0a\u51b2\u51fb\u529b\u4e0d\u7834\u97e7\u4e5f\u6709\u786c\u76f4\u4f46\u51fa\u62db\u65f6\u4e0d\u884c\uff1f
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=a9d3b0559001a18bf0eb1247ae2f0761\/03a964c379310a55911ee88da04543a982261034.jpg\")
\u767d\u7f8a
\u97e7\u6027110 \u7834\u97e7\u51b2\u51fb\u529b\u4e0d\u9650
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=0be8758fb0efce1bea2bc8c29f51f3e8\/243dc7f431adcbefed0e487fbbaf2edda3cc9f35.jpg\")
\u6e34\u8840\u517d \u97e7\u602735 \u4e0d\u51fa\u62db\u53ef\u4ee5\u7834\u97e7\u3002\u51fa\u62db\u65f6\u57fa\u672c\u65e0\u6548\uff0c\u53ef\u80fd\u662f\u5bf9\u51b2\u51fb\u529b\u7684\u514d\u75ab\uff0c\u53ef\u80fd\u662f\u4e34\u65f6\u989d\u5916\u4ed8\u4e0e\u4e86100\u621690\u7684\u97e7\u6027\uff0c\u4f46\u65e0\u8bba\u5982\u4f55\u5f88\u96be\u6253\u7834\u3002","post_no":2,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":1,"pb_tpoint":null}}" data-pid="128975407431" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/74538F2B44B642A1ABA07F6FEDFECEBE.jpeg)
圣职者野兽/劳伦斯
韧性200但破韧的一击时用小微推三种冲击力无效
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/8282BDCA670C486CB37529DBC3BD5540.jpeg)
神父兽形态
韧性35 破韧时小、微、推无效果,不出招时用大以上冲击力不破韧也有硬直但出招时不行?
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/422E73BF207C4D4982D2F9EE685694F8.jpeg)
白羊
韧性110 破韧冲击力不限
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/E00D189E4E2D441593283B6549F159F4.jpeg)
渴血兽 韧性35 不出招可以破韧。出招时基本无效可能是对冲击力的免疫可能是临时额外付与了100或90的韧性但无论如何很难打破。
回复
2楼2019-12-23 07:06
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/77E130513EE14005B6BA1FB62C9F7462.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=eacaa4a6d91b9d168ac79a69c3deb4eb\/f86bfaadcbef7609d73aafe639dda3cc7cd99e32.jpg\")
\u9ed1\u517d \u97e7\u6027150 \u4e2d\u4ee5\u4e0b\u7834\u97e7\u65e0\u6548\u3002\u4e2d\u6216\u4ee5\u4e0a\u7834\u97e7\u6709\u786c\u76f4\uff0c\u521a\u51fa\u653e\u7535\u52a8\u4f5c\u65f6\u53ef\u6253\u65ad\u653e\u7535\u3002
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=de5f9b6b650e0cf3a0f74ef33a46f23d\/8f6bc1d162d9f2d319211296beec8a136327cc33.jpg\")
\u4e9a\u5f25\u8fbe\u62c9 \u97e7110 \u7834\u97e7\u540e\u51fa\u4e00\u4e2a\u5927\u8e09\u8dc4\uff08\u51b2\u51fb\u529b\u4e0d\u9650\uff09
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=6704b0978b82d158bb8259b9b00a19d5\/82596cefce1b9d164bf7ac18e4deb48f8c546433.jpg\")
\u5929\u754c\u4f7f\u8005\uff08\u5927\uff09 \u97e760 \u7834\u97e7\u51b2\u51fb\u529b\u4e0d\u9650
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=ae81a3a51ffa513d51aa6cd60d6d554c\/55144cd6277f9e2f38062b710830e924b899f33c.jpg\")
\u5b87\u5b99\u4e4b\u5973 \u97e7\u6027300 \u5c0f\uff0c\u5fae\uff0c\u63a8\u51b2\u51fb\u529b\u7834\u97e7\u65e0\u6548\uff0c\u5176\u4ed6\u7834\u97e7\u540e\u51fa\u4e00\u4e2a\u534a\u4f4e\u5934\u7684\u786c\u76f4\u3002","post_no":3,"type":"0","comment_num":1,"is_fold":0,"props":null,"post_index":2,"pb_tpoint":null}}" data-pid="128975443210" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/0B5C9112D6D04187A15CBCC5ABDF2713.jpeg)
黑兽 韧性150 中以下破韧无效。中或以上破韧有硬直,刚出放电动作时可打断放电。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/AA7BB41760454271A02B285874007B69.jpeg)
亚弥达拉 韧110 破韧后出一个大踉跄(冲击力不限)
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/0871AB0D6BA849209242D15E231AC8D6.jpeg)
天界使者(大) 韧60 破韧冲击力不限
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/660BDEBE89FE46E199715273BC97F50D.jpeg)
宇宙之女 韧性300 小,微,推冲击力破韧无效,其他破韧后出一个半低头的硬直。
收起回复
3楼2019-12-23 07:12
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/B909F1B5CDBD49F5BCCCC6E4DED4779F.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=343084ddb3c27d1ea5263bcc2bd5adaf\/6395fb4e251f95ca31c7a4cfde177f3e6709523d.jpg\")
\u517d\u6a21\u5f0f \u97e760 \u7834\u97e7\u51b2\u51fb\u529b\u4e0d\u9650\uff0c\u4e00\u4e9b\u52a8\u4f5c\u6216\u65e0\u6cd5\u6253\u65ad
\u5251\u6a21\u5f0f \u97e7110 \u7834\u97e7\u51b2\u51fb\u529b\u4e0d\u9650\uff0c\u4e00\u4e9b\u52a8\u4f5c\u6216\u65e0\u6cd5\u6253\u65ad
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=5f366199e003918fd7d13dc2613d264b\/7f4b781c8701a18bbbc72436892f07082838fe3f.jpg\")
\u4e0d\u6b7b\u5de8\u4eba \u97e7\u6027120 \u5c0f\uff0c\u5fae\uff0c\u63a8\u51b2\u51fb\u529b\u7834\u97e7\u65e0\u6548\u3002\u51fa\u62db\u4e2d\u4ec0\u4e48\u51b2\u51fb\u529b\u7834\u97e7\u8c8c\u4f3c\u90fd\u65e0\u6548\u3002
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=0c0589cbae014a90813e46b599773971\/fbbb89a7d933c895c351ae02c61373f08202003f.jpg\")
\u706b\u72d7 \u97e7150 \u5bf9\u540c\u4e00\u90e8\u4f4d\uff08\u5934\uff0c\u56db\u80a2\uff09\u5feb\u901f\u7834\u97e7\u540e\u4f1a\u539f\u5730\u505c\u6b62\u5e76\u5df2\u543c\u53eb\u7ed3\u675f\u8be5\u786c\u76f4\u3002
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=0f1cdab0c02a60595210e1121834342d\/ad71f66d55fbb2fb1d056e6b584a20a44623dc39.jpg\")
\u65e0\u60c5\u7684\u770b\u5b88\u8005\uff0c\u672a\u7834\u97e7\u65f6\uff1a\u51b2\u51fb\u529b\u5927\u51fb\u5012\u51fb\u98de\u5747\u51fa\u5c0f\u786c\u76f4\uff0c\u4ee5\u4e0b\u65e0\u6548
\u7834\u97e7\u65f6\uff1a\u51fa\u51b2\u51fb\u529b\u76f8\u7b26\u7684\u786c\u76f4\uff0c\u4f46\u51fa\u62db\u65f6\u7528\u5c0f\u65e0\u6cd5\u786c\u76f4\u3002","post_no":4,"type":"0","comment_num":1,"is_fold":0,"props":null,"post_index":3,"pb_tpoint":null}}" data-pid="128975489406" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/B0D11C67BEC648B2B0FA6B7CC50D29D9.jpeg)
兽模式 韧60 破韧冲击力不限,一些动作或无法打断
剑模式 韧110 破韧冲击力不限,一些动作或无法打断
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/381313AC792341859CFC4EA6C629A3E0.jpeg)
不死巨人 韧性120 小,微,推冲击力破韧无效。出招中什么冲击力破韧貌似都无效。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/868EF48D1E4C42D3A648A78A2240210C.jpeg)
火狗 韧150 对同一部位(头,四肢)快速破韧后会原地停止并已吼叫结束该硬直。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/573B506C27444FEC8D389A7D2D2B28E4.png)
无情的看守者,未破韧时:冲击力大击倒击飞均出小硬直,以下无效
破韧时:出冲击力相符的硬直,但出招时用小无法硬直。
收起回复
4楼2019-12-23 07:19
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/72C3456A0B9445EBA7227544F74C8F7A.jpeg)
- 埃勒洛
- 重生古神
8
不愧是汉尼拔大佬
回复
来自Android客户端5楼2019-12-23 07:27
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=6e4155078558d109c4e3a9bae158ccd0\/11422c1190ef76c614facd528a16fdfaaf51673b.jpg\")
\u65e0\u5934\u6709\u5934\u653e\u8840 \u97e7110 \u7834\u97e7\u540e\u539f\u5730\u601d\u8003\u4eba\u751f\uff08\u51b2\u51fb\u529b\u4e0d\u9650\uff09
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=0f18dab0c02a60595210e1121834342d\/ad71f66d55fbb2fb1d016e6b584a20a44723dcc5.jpg\")
\u91cd\u751f\u53e4\u795e \u97e7250 \u624b\u6216\u4e0b\u534a\u8eab\uff0c\u9664\u63a8\u4ee5\u5916\u7834\u97e7\u51fa\u4e00\u4e2a\u534a\u4f0f\u8eab\u7684\u786c\u76f4","post_no":6,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":5,"pb_tpoint":null}}" data-pid="128975547107" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/902A887E9D064D4E822E480772659985.jpeg)
无头有头放血 韧110 破韧后原地思考人生(冲击力不限)
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/2F09B5390BF64DAB9CB2E42D5CB289A3.jpeg)
重生古神 韧250 手或下半身,除推以外破韧出一个半伏身的硬直
回复
6楼2019-12-23 07:28
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/4D2511F30CA14F9D864A11638BE455F4.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=b2256440de3d70cf4cfaaa05c8dcd1ba\/29cb9d4e9258d1097ec59fcbc658ccbf6d814dc1.jpg\")
\u97e780 \u5fae\uff0c\u5c0f\uff0c\u63a8\u65e0\u6548\uff0c\u4e2d\u53ca\u4ee5\u4e0a\u9020\u6210\u4e00\u6b21\u786c\u76f4
\u6700\u5feb\u524a80\u97e7\uff1a\u65a7\u5b50\u5927\u98ce\u8f66\uff0c\u5723\u5251L2*2
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=5defd4836ccb0a4685228b315b63f63e\/064c9c2c11dfa9ecdb0f606e75d0f703908fc1c2.jpg\")
\u97e770 \u51fa\u62db\u4e2d \u4f3c\u4e4e\u6ca1\u6cd5\u786c\u76f4
\u4e3e\u65a7\u9632\u5fa1\u4e2d \u4f1a\u88ab\u7834\u76fe\uff0c\u4f46\u4e0d\u4f1a\u88ab\u7834\u97e7\u786c\u76f4
\u65e2\u4e0d\u51fa\u62db\u4e5f\u4e0d\u9632\u5fa1\u65f6 \u524a\u7a7a\u51fa\u76f8\u5e94\u51b2\u51fb\u529b\u7684\u786c\u76f4\uff0c\u4e0d\u524a\u7a7a\u65f6\u5927\u4ee5\u4e0a\u53ef\u51fa\u5c0f\u653b\u51fb\u786c\u76f4
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=842a9443274e251fe2f7e4f09786c9c2\/48ae976034a85edf48afc85a5e540923dc5475cc.jpg\")
\u97e735 \u7834\u97e7\u65f6\u9020\u6210\u4e0e\u51b2\u51fb\u529b\u76f8\u7b26\u7684\u786c\u76f4\u6216\u4f4d\u79fb
\u672a\u7834\u97e7\u65f6\uff0c\u5927\u53ca\u4ee5\u4e0a\u7684\u51b2\u51fb\u529b\u9020\u6210\u4e00\u4e2a\u5c0f\u653b\u51fb\u7ea7\u786c\u76f4
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=864f3663d15c1038247ececa8211931c\/068075096b63f624047f0f7a9044ebf81b4ca3cd.jpg\")
\u97e725
\u672a\u7834\u97e7\u65f6\u9ad8\u51b2\u51fb\u529b\u4e5f\u65e0\u6cd5\u786c\u76f4\uff08\u4f8b\uff0c\u952f\u77dbR2\u84c4\u529b\u7b2c\u4e8c\u4e0b\uff09
\u7834\u97e7\u7684\u4e00\u51fb\u9700\u8981\u4e2d\u4ee5\u4e0a\u51b2\u51fb\u529b","post_no":7,"type":"0","comment_num":5,"is_fold":0,"props":null,"post_index":6,"pb_tpoint":null}}" data-pid="128975596309" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/A49E430559B64105B146C52670581F01.jpeg)
韧80 微,小,推无效,中及以上造成一次硬直
最快削80韧斧子大风车圣剑L2*2
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/D0874106A05944BD87F5A7214423B4DD.jpeg)
韧70 出招中 似乎没法硬直
举斧防御中 会被破盾,但不会被破韧硬直
既不出招也不防御时 削空出相应冲击力的硬直,不削空时大以上可出小攻击硬直
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/50C3AB74E0584199BEBFC5E8A22902D1.png)
韧35 破韧时造成与冲击力相符的硬直或位移
未破韧时,大及以上的冲击力造成一个小攻击级硬直
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/FEDFA763A9214B7DAD995C5D6C165877.png)
韧25
未破韧时高冲击力也无法硬直锯矛R2蓄力第二下
破韧的一击需要中以上冲击力
收起回复
7楼2019-12-23 07:34
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/334E47C36DB9435B95086C1B1364C493.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=e01070c4be773912c4268569c8198675\/25dc664bd11373f0941159e6b30f4bfbfbed0438.jpg\")
DLC\u65a7\u5927\u70ae\u54e5 \u672a\u7834\u97e7\u65f6\uff1a\u51b2\u51fb\u529b\u5927\u51fa\u5c0f\u786c\u76f4\uff0c\u51fb\u5012\u51fb\u98de\u51fa\u4e2d\u786c\u76f4\uff0c\u4ee5\u4e0b\u65e0\u6548
\u7834\u97e7\u65f6\uff1a\u51fa\u4e8e\u51b2\u51fb\u529b\u76f8\u7b26\u7684\u786c\u76f4\uff0c\u4f46\u5fae\u51b2\u51fb\u529b\u65e0\u6cd5\u7834\u97e7\uff08\u5c0f\u53ef\u4ee5\u7834\uff09
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=a73ebd407c63f6241c5d390bb744eb32\/7e8ca82762d0f703c4aea3a51ffa513d2797c5cf.jpg\")
DLC\u730e\u4eba \u97ad\uff0c\u7206\u70b8\u9524 \u97e735
\u97ad\u7cbe\u82f1 \u97e765 \u7206\u70b8\u9524\u7cbe\u82f1 \u97e775 \u66f2\u5200\u7cbe\u82f1\u97e755 \uff08\u6389\u866b\u7684\uff09
\u5c0f\uff0c\u4e2d\u51b2\u51fb\u529b\u60f3\u6253\u65ad\u9700\u7834\u97e7
\u5927\u51b2\u51fb\u529b\u65e0\u9700\u7834\u97e7\u53ef\u6253\u65ad
\u51fb\u5012\uff0c\u51fb\u98de\u65e0\u9700\u7834\u97e7\u53ef\u6253\u65ad\u653b\u51fb\uff0c\u4f46\u9700\u7834\u97e7\u624d\u80fd\u51fb\u5012\u51fb\u98de
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=bf3ae88da04543a9f51bfac42e178a7b\/2098fefae6cd7b8992720cfa182442a7d8330ec8.jpg\")
DLC \u66f2\u5200\u666e\u901a\u730e\u4eba \u7406\u8bba\u4e0a\u97e735 \u5b9e\u9645\u8868\u73b0\uff1a\u65e0\u52a8\u4f5c\u53ef\u4ee5\u7528\u5c0f\u51fa\u786c\u76f4\uff0c\u653b\u51fb\u52a8\u4f5c\u65e0\u6cd5\u7528\u5c0f\u6253\u65ad\uff0c\u4f46\u4e2d\u4ee5\u4e0a\u53ef\uff0c\u97e7\u6027\u6ca1\u7528?","post_no":8,"type":"0","comment_num":1,"is_fold":0,"props":null,"post_index":7,"pb_tpoint":null}}" data-pid="128975628006" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/1D727CAFB2964547813BEE6B0FB43BD5.png)
DLC斧大炮哥 未破韧时:冲击力大出小硬直,击倒击飞出中硬直,以下无效
破韧时:出于冲击力相符的硬直,但微冲击力无法破韧(小可以破)
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/CBF7A1F58C7746C9B469FA798BB51B77.png)
DLC猎人 鞭,爆炸锤 韧35
鞭精英 韧65 爆炸锤精英 韧75 曲刀精英韧55 (掉虫的)
小,中冲击力想打断需破韧
大冲击力无需破韧可打断
击倒,击飞无需破韧可打断攻击,但需破韧才能击倒击飞
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/BD82C4F18A40489BA0D80B2B8B791684.png)
DLC 曲刀普通猎人 理论上韧35 实际表现:无动作可以用小出硬直,攻击动作无法用小打断,但中以上可,韧性没用?
收起回复
8楼2019-12-23 07:39
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/842B15E03B9E414889C5255EF03DDF50.jpeg)
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=44d2931b8f22720e7bcee2f24bcb0a3a\/f697b0f40ad162d9bff6546506dfa9ec8b13cdcb.jpg\")
\u5927\u9c7c\u4eba \u97e780 \u65e0\u51b2\u51fb\u529b\u9650\u5236
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=ed399683c6c8a786be2a4a065709c9c7\/aa4046b1cb134954c105de1d414e9258d0094ad4.jpg\")
\u97e734
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=2aeb7f909a1001e94e3c1407880e7b06\/1dcffe2ac65c1038da64f8bba5119313b17e89d5.jpg\")
\u7406\u8bba\u4e0a\u97e7\u602735 \u5b9e\u9645\u8868\u73b0\uff1a\u5fae\uff0c\u5c0f\uff0c\u63a8\u65e0\u6548\uff0c\u4e2d\u53ca\u4ee5\u4e0a\u9020\u6210\u4e00\u6b21\u786c\u76f4\uff0c\u51fb\u98de=\u5927\uff0c\u4f46\u53ef\u51fb\u5012\uff0c\u97e7\u6027\u65e0\u7528\uff1f
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=3937427d800a304e5222a0f2e1c8a7c3\/6dba77315c6034a89af78ef8dc134954082376d6.jpg\")
\u97e725 \u5c0f\uff0c\u5fae\uff0c\u63a8\u51b2\u51fb\u529b\u65e0\u6cd5\u7834\u97e7
\u672a\u7834\u97e7\u65f6\u9ad8\u51b2\u51fb\u4e5f\u65e0\u6cd5\u786c\u76f4\uff0c\u4f46\u9ad8\u51b2\u51fb\u5f88\u5c11\u4f1a\u6253\u4e0d\u7834\u8fd9\u4e2a\u97e7\u6027","post_no":9,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":8,"pb_tpoint":null}}" data-pid="128975675793" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/EC7CAF1590DE4AC093F9094732A24D3E.png)
大鱼人 韧80 无冲击力限制
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/FA578AF9057B429989E88BBFA1A12602.png)
韧34
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/DBACDD0BDD254A3EBCF19ACDA06D3C0F.png)
理论上韧性35 实际表现:微,小,推无效,中及以上造成一次硬直,击飞=大,但可击倒,韧性无用?
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/0A1932A347094B888BCCC92B375C8347.png)
韧25 小,微,推冲击力无法破韧
未破韧时高冲击也无法硬直,但高冲击很少会打不破这个韧性
回复
9楼2019-12-23 07:45
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/78B721D7A5F4456DB208C144216669A8.jpeg)
- hannibal125
- 乌鸦猎人
9
暂时是这些。
回复
10楼2019-12-23 07:49
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/357C5618690B431CA04DD6BC0FC7BAAD.jpeg)
![](\"https:\/\/gsp0.baidu.com\/5aAHeD3nKhI2p27j8IqW0jdnxx1xbK\/tb\/editor\/images\/client\/image_emoticon13.png\")
","post_no":11,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":10,"pb_tpoint":null}}" data-pid="128975718133" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- 上帝求赐名
- 乌鸦猎人
9
回复
来自Android客户端11楼2019-12-23 07:50
","post_no":12,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":11,"pb_tpoint":null}}" data-pid="128975822087" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- 埃勒洛
- 重生古神
8
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/EB7304D61E1A4AE4A35723BB55837856.gif)
回复
来自Android客户端12楼2019-12-23 08:02
- polly_24
- 罗姆
7
35这个数据设置的太恶意了刚好就是锯肉刀r1+l1无法出硬直不过鉴于锯肉刀性能已经够强了倒也不意外
收起回复
13楼2019-12-23 08:23
- 岸灬海的媚眼
- 乌鸦猎人
9
很神秘
回复
来自iPhone客户端14楼2019-12-23 11:03
- 药店的虎皮猫
- 乌鸦猎人
9
想请教下驴德头感觉不管几周目多少伤害好像都是两刀头一个小硬直就是必定出一次动作打断而不是爆头。这种多部件的boss各部件韧性是分开算的吗
收起回复
来自Android客户端15楼2019-12-23 13:18
- 药店的虎皮猫
- 乌鸦猎人
9
说起来,迷宫吸脑哥的蓄力擒抱,遇到过一次斧子两段全中仍然不破韧直接被抱的情况。还没试过击倒招数能不能击倒。
回复
来自Android客户端16楼2019-12-23 13:21
","post_no":17,"type":"0","comment_num":1,"is_fold":0,"props":null,"post_index":16,"pb_tpoint":null}}" data-pid="128985043713" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- LEMONed_Fish
- 重生古神
8
汉尼拔大人你把我宝可梦世界拉回亚楠了。我开进进迷宫去重新感受san值
收起回复
来自iPhone客户端17楼2019-12-23 17:28
- 幻耶
- 血月之神
12
问个不相干的问题:加公开伤害的词条会增加内脏暴击的伤害吗?
收起回复
来自Android客户端18楼2019-12-23 18:25
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=03ce4fae21d12f2ece05ae687fc2d5ff\/678c7b7eca80653874f58a6a80dda144ac3482c8.jpg\")
\u739b\u5229\u4e9a
\u666e\u901a\u72b6\u6001\u65e0\u97e7\u6027\uff0c\u4e00\u4e9b\u52a8\u4f5c\u4e2d\u97e7\u602740\u3002\u5927\u4ee5\u4e0a\u51b2\u51fb\u65e0\u9700\u7834\u97e7\u53ef\u6253\u65ad\uff0c\u4e2d\u5c0f\u9700\u7834\u97e7\u624d\u80fd\u6253\u65ad\uff0c\u5fae\u4e0e\u63a8\u7834\u97e7\u4e5f\u65e0\u6cd5\u6253\u65ad\u3002
![](\"http:\/\/tiebapic.baidu.com\/forum\/w%3D580\/sign=46714d078558d109c4e3a9bae158ccd0\/11422c1190ef76c63ccad5528a16fdfaae5167cb.jpg\")
\u79d1\u65af\u5b64\u513f
\u4e0d\u51fa\u62db\u65f6\u4e00\u9636\u6bb555\u97e7\u6027\uff0c\u4e8c\u9636\u6bb565\u97e7\u6027\u3002
\u51fa\u62db\u4e2d\u96be\u4ee5\u51c6\u786e\u63cf\u8ff0\u3002\u4f46\u731c\u6d4b\u5982\u4e0b\uff1a\u4e00\u4e9b\u52a8\u4f5c\u4e2d\u524a\u97e7\u672c\u8eab\u65e0\u6548\u7684\u53ef\u80fd\u6027\uff0c\u4f8b55\u97e7\u6027\u5728\u4e0d\u51fa\u62db\u65f6\u653b\u51fb\u4e00\u6b2155-28=27\uff0c\u8fd9\u65f6\u654c\u4eba\u51fa\u62db\u4e2d\u653b\u51fb\u4e00\u6b21\u97e7\u6027\u4ecd\u4e3a27\uff0c\u52a8\u4f5c\u4fdd\u62a4\u7ed3\u675f\u540e\u518d\u653b\u51fb\u4e00\u6b21\u524a\u7a7a\u97e7\u6027\u51fa\u786c\u76f4\uff0c\u7c7b\u4f3c\u8fd9\u6837\u60c5\u51b5\u8f83\u4e3a\u591a\u89c1\u3002\u4e00\u4e9b\u62db\u5f0f\u9644\u6709\u97e7\u6027\uff08+30\uff0c+50\uff09\u7684\u53ef\u80fd\u6027\u4e5f\u5b58\u5728\uff0c\u4f46\u5047\u5982\u662f30\u5c31\u4f1a\u53d8\u6210\u8fd9\u6837\u9996\u514855-28=27\uff0c\u51fa\u62db\u4e2d\u53d7\u653b\u51fb\u4e00\u6b2127+30-28=29\uff0c\u90a3\u4e48\u51fa\u62db\u7ed3\u675f\u540e\u5e94\u8be5\u65e0\u6cd5\u752828\u76f4\u63a5\u786c\u76f4\uff0c\u4f46\u5b9e\u9645\u4e00\u822c\u90fd\u662f\u53ef\u4ee5\u76f4\u63a5\u518d\u752828\u786c\u76f4\u3002\u5982\u679c\u786c\u8981\u89e3\u91ca\u7684\u8bdd\u5c31\u662f\u989d\u5916\u9644\u6709\u7684\u97e7\u6027\u5982\u679c\u6ca1\u524a\u5b8c\u4e5f\u4f1a\u6d88\u5931\u3002\u4f46\u4e0d\u51ed\u501f\u5916\u90e8\u5de5\u5177\u5f88\u96be\u5224\u65ad\u5b9e\u9645\u60c5\u51b5\u3002
\u8fd9\u56de\u662f\u771f\u5b8c\u4e86\uff0c\u6d4b\u8fd9\u4e00\u5806\u6211\u5927\u6982\u5df2\u7ecf\u79ef\u7d2f\u4e86\u4e09\u5468\u4e0d\u60f3\u73a9\u8840\u6e90\u7684\u538c\u5026\u5ea6\u3002","post_no":19,"type":"0","comment_num":3,"is_fold":0,"props":null,"post_index":18,"pb_tpoint":null}}" data-pid="129013933209" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/56594FC16E3C4E609DC29173FC09B879.png)
玛利亚
普通状态无韧性一些动作中韧性40。大以上冲击无需破韧可打断中小需破韧才能打断微与推破韧也无法打断。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/E9D2AC428F3F4D85AFD1B975CCDE5067.png)
科斯孤儿
不出招时一阶段55韧性二阶段65韧性。
出招中难以准确描述。但猜测如下一些动作中削韧本身无效的可能性例55韧性在不出招时攻击一次55-28=27这时敌人出招中攻击一次韧性仍为27动作保护结束后再攻击一次削空韧性出硬直类似这样情况较为多见。一些招式附有韧性+30+50的可能性也存在但假如是30就会变成这样首先55-28=27出招中受攻击一次27+30-28=29那么出招结束后应该无法用28直接硬直但实际一般都是可以直接再用28硬直。如果硬要解释的话就是额外附有的韧性如果没削完也会消失。但不凭借外部工具很难判断实际情况。
这回是真完了,测这一堆我大概已经积累了三周不想玩血源的厌倦度。
收起回复
19楼2019-12-25 02:03
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/13C7451BE7D945ED9431DF024CA2208A.png)
\u5f53\u7136\u80fd\u6253\u51fa\u8fd9\u4e24\u79cd\u51b2\u51fb\u529b\u7684\u672c\u5c31\u5f88\u5c11","post_no":20,"type":"0","comment_num":0,"is_fold":0,"props":null,"post_index":19,"pb_tpoint":null}}" data-pid="129156865588" style='font-size:13.3333px;font-style:normal;font-weight:400;color:rgb(51, 51, 51);'>
- hannibal125
- 乌鸦猎人
9
能把枪反后孤儿打智障的大概是微和推两种冲击力,大概。
当然能打出这两种冲击力的本就很少
回复
20楼2020-01-02 06:55
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/1AD71D8F9B974CCAA34570459BB0C3BD.jpeg)
皇冠身份
- 发贴红色标题
- 显示红名
- 签到六倍经验
更多定制特权
赠送补签卡1张获得[经验书购买权]
我在贴吧
blueroseslol
0[获取]
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
- 1回力鞋可致儿童性早熟1728632
- 2学生欠校园贷不上失信名单1519896
- 3阿尔兹海默疫苗新突破1177119
- 4暗恋时有回应吗1124344
- 5直播业平均月薪9423元810500
- 6391万买一个手机号707664
- 7cp粉求张翰郑爽复合677580
- 8李铁出任中国男足主教练349087
- 9张柏芝斥偷拍263916
- 10喝全脂牛奶超重可能性低40%195347
- 贴吧页面意见反馈
- 违规贴吧举报反馈通道
- 贴吧违规信息处理公示
- 45回复贴共1页
<返回血源吧
发表回复
发贴请遵守贴吧协议及七条底线贴吧投诉
保存至快速回贴
©2020 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示

View File

@@ -0,0 +1,37 @@
步枪矛跟散弹枪同样都是共计15发子弹水平方向上分成5束发散角总共是24度。垂直方向分成三束间隔是3度。总共是5*3的阵列。全程不受重力。散弹枪每颗子弹就是【除固伤外的血质面板+固伤】计算伤害,骨髓灰后是【除固伤外的血质面板*1.4+固伤】。步枪矛每颗子弹的伤害是 【除固伤外的血质面板*0.8+固伤】的值计算伤害,计算伤害后*0.1这样做的目的就是为了修正固伤的BUG这样固伤就只能打出1.5倍而不是15倍伤害了。
从上方的视角左边是散弹右边是普通手枪。射程一半以内可以枪反。最大射程理论上是9.2米但因为射击角度之类的问题一般会感觉更短一些手枪约12.25米约9.25米以内可以枪反。这里的米是游戏单位并不一定和现实感觉一样。比如可能游戏的人物都是2.5米这样1米就实际很短了。目测游戏中的1米或者说1长度单位是慢步走约1步的距离。
路德维希步枪散弹的发散程度和普通散弹是一样的但是射程理论上是13.75米红色部分7+灰色部分6.75
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/0FEB0E80D1C649EE912D36EBECC3CFFE.png)
手枪威力随距离递减,散弹不变。手枪子弹在前边不受重力,在灰色部分开始受重力,轨迹偏转就不画了
侧面
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/B928814B37CF4387881692760A0E444A.png)
图中和人偶妹这个距离大约是游戏中的9米9长度单位因为有一定高低差实际上水平距离应该略少但是连线的距离是9米左右。是步枪矛散弹枪的最远射程和手枪85%威力范围的边缘。
![](D:/youdaonote-pull-master/youdaonote/youdaonote-images/F3A92A554655431BB822473E8C7C8812.jpeg)

View File

@@ -0,0 +1,29 @@
---
title: Inventory设计
date: 2022-08-12 14:18:31
excerpt:
tags: SDHGame
rating: ⭐
---
## 设计方案
直接使用Lyra的 **Entry - Instance - Definition - Fragment**结构以及FFastArraySerializer/FFastArraySerializerItem网络同步结构。并针对一些设计做出改动。
### 宝石/词条
- 宝石的基类现在统一改名成Attachment词条命名为Word。
- 两者数据存储在ItemInstance中。实现专门的Fragment用来设置ItemInstance的里存储数据。
### 可使用物品
考虑到需要便捷的自定义Use()逻辑,思路有二(目前倾向于第二个):
1. ~~在ItemDefinition里编写对应的几个BlueprintNativeEvent()并根据需要进行Overrider。之后ItemInstance的对应接口函数调用ItemDefinition中的函数即可实现。~~
2. 在ItemInstance里放置几个行为的Delegate。创建几个对应行为的Fragment在创建时将内部的函数函数绑到Delegate上。
## 物品列表
- CanBeUse
- Weapon
- Equip
- Material
- Token
- 灵石
- Attachable
- 生命宝石

View File

@@ -0,0 +1,4 @@
# Widget_InGameMenu
Widget_TabbedMenu 顶部Tab栏。
内部控件:

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -0,0 +1,93 @@
# 合作计划与制作项目清单
个人目前是先建议
第一步使用一些Vroid模型进行进一步的卡通渲染测试好处有
1. 可以与Unity的VRM 卡通渲染效果进行对比。
2. 这些模型有商业授权,没有后苦之忧。
3. 大部分模型都是有表情的,会方便很多。
4. 商城中还有其他的配套的衣服与饰品,可以给角色进行更换。
第二步是找一些舞台与卡通场景这类资源地编应该也会有积累类似Colin以前制作视频的那种。
第三步制作视频上传到B站待我案例关卡以及文档OK了再上传油管。
第四步编写VRM插件以及打包ShowCase测试项目并且制作相关介绍用网页。
## VRM模型
Vroid官方免费模型
- https://hub.vroid.com/en/characters/1248981995540129234/models/8640547963669442173
- ![](https://vroid-hub.pximg.net/c/600x1200_a0_g5_u0/images/artwork_images/7272958678402122157.jpg)
- https://hub.vroid.com/en/characters/2843975675147313744/models/5644550979324015604
- ![](https://vroid-hub.pximg.net/c/600x1200_a0_g5_u0/images/artwork_images/4818848968015469563.jpg)
其他Booth商场购买模型
https://booth.pm/zh-cn/browse/3D%20Characters
- https://booth.pm/zh-cn/items/3443188
- ![](https://booth.pximg.net/8a7426aa-ba62-4ef0-9e7d-2c8ea96e7c9b/i/3443188/0d655d88-23b0-4e23-a2ab-0e42244abd03_base_resized.jpg)
- https://booth.pm/zh-cn/items/3681787
- ![](https://booth.pximg.net/ed52788c-0b3b-4e38-9ded-1e5797daf0ef/i/3681787/a8b7d4c9-a3ff-4041-b953-9ece327e9836_base_resized.jpg)
- https://booth.pm/zh-cn/items/3470989
- ![](https://booth.pximg.net/61a3b2d7-b4b1-4f97-9e48-ffe959b26ae9/i/3470989/494346a4-a57f-4c51-8d8a-9eb28e6f4dbd_base_resized.jpg)
- https://booth.pm/zh-cn/items/2780069
- ![](https://booth.pximg.net/f420c992-4225-4ce0-b751-3a4acdceaab6/i/2780069/a0d71d5b-1d07-49ae-a2d3-1bb655ff9424_base_resized.jpg)
- https://booth.pm/zh-cn/items/2736146
- ![](https://booth.pximg.net/4e6e372d-f626-416b-beec-b0f50d2c2743/i/2736146/f3dba3e5-c86b-47c0-a2f0-b5a25a757f7b_base_resized.jpg)
- https://booth.pm/zh-cn/items/3224415
- ![](https://booth.pximg.net/e3843aaf-9232-4a4c-9d6e-e0a09646f417/i/3224415/11ec3a23-4d0a-4d8f-a572-db306628e137_base_resized.jpg)
- https://booth.pm/zh-cn/items/4035411
- ![](https://booth.pximg.net/8a7426aa-ba62-4ef0-9e7d-2c8ea96e7c9b/i/4035411/1562e40c-2ac8-4a10-b6ab-3523039783f9_base_resized.jpg)
- https://booth.pm/zh-cn/items/2198694
- ![](https://booth.pximg.net/3ebd0bda-1d47-4315-b0b4-6acd6f8cdd7c/i/2198694/3a933a93-d454-40fc-89ef-9c37a5b48f4d_base_resized.jpg)
- https://booth.pm/zh-cn/items/4431242
- ![](https://booth.pximg.net/4070a768-9c1e-45b7-855d-ec99ead655ec/i/4431242/c45a4645-dfe6-4ca3-9c4a-4cbefd4dce77_base_resized.jpg)
- https://booth.pm/zh-cn/items/3667065
- ![](https://booth.pximg.net/1c35c496-0283-4684-8543-7149d9a7eb62/i/3667065/457be213-5050-4a76-8731-1da57da8d136_base_resized.jpg)
- https://booth.pm/zh-cn/items/4358123
- ![](https://booth.pximg.net/a8591f3a-a029-42e5-a769-a738c143f354/i/4358123/2a097e75-762f-4c89-8e1e-48fd0c84724b_base_resized.jpg)
- https://booth.pm/zh-cn/items/995244
- ![](https://booth.pximg.net/aca730df-46b8-404d-b7cd-6d73723845a4/i/995244/ec790c61-54c3-4096-8b90-f624661cd09b_base_resized.jpg)
- https://booth.pm/zh-cn/items/2830083
- ![](https://booth.pximg.net/8ffc7807-7b2a-484d-adeb-766daf56eff4/i/2830083/dcb07769-d046-4b54-9bf9-cddd4ab2d9b0_base_resized.jpg)
## 卡通渲染提供的各类解决方案
首先Colin的Unity卡通渲染试用版仅仅是一个打包过Demo仅为展示效果。因为Unity的管线是脚本不能像UE那样编译成dll。
因此UE可以根据需求使用多种试用方式
| 需求 | 主要需求功能 | 引擎版本与功能 | 额外服务 |
| --------------------------- | ------------------------------------------------------------- | ------------------------------- | ---------------------------------------- |
| Vtuber面部捕捉个人试用 | 面部捕捉单双摄像头、推流虚拟摄像机推流到OBS、挂件系统 | 打包游戏版本 | github issus |
| Vtuber全身捕捉个人试用 | 全身捕捉与面部捕捉、推流虚拟摄像机推流到OBS、舞台场景系统 | 打包游戏版本 | github issus |
| Vtuber面部/全身捕捉(公司) | 包括个人版内容、全身捕捉与面部捕捉(多摄像头) | 打包引擎版本不能打包与Debug | github issus、定制服务开发 |
| MMD制作需求 | | 打包引擎版本不能打包与Debug | github issus |
| 番剧制作 | 暂不考虑 | | |
| 游戏制作要求 | | 打包版引擎 | github issus、定制服务开发、完整技术支持 |
| 游戏制作要求(源码) | | 源码版引擎 | github issus、定制服务开发、完整技术支持 |
基于UE的面部软件竞品
- VActor没有提供源码
- [https://github.com/endink/VActor](https://github.com/endink/VActor) 本软件基于我的 UE 动补插件 MediaPipe4U 制作
- [https://github.com/endink/Mediapipe4u-plugin](https://github.com/endink/Mediapipe4u-plugin)
## ~~Shader代码加密~~
使用之后shader直接报错了。
~~VSCode怎么把代码转换成一行选中想要合并的行按Ctrl + Shift + P 调出命令窗口输入join lines确认执行就可以合并多行了。~~
>PS.打包后的引擎可以通过RenderDoc截帧并且看到对应Pass名称与结构。
## Git流程管理
- Brance
- ToonDevelop用于合并Release与各个版本分支。
- 各个版本分支:比如 UE5.0 UE5.1 UE5.2等,方便后续给低版本移植之后开发的渲染功能。
- ToonRelease稳定版本的引擎用于触发自动化打包流程。
- 额外出钱定制引擎分支:部分公司可能会额外出现定制功能,但这些功能不能随着版本一起发布。
- 标签用于标记可以Release的Commit当合并新版本的Release分支以及调试之后在指定Commit上添加
- 标记引擎版本UnrealEngine-Toon 5.0.1、UnrealEngine-Toon 5.0.2
- 标记卡通渲染功能版本UnrealEngine-Toon 1.0、UnrealEngine-Toon 1.1、UnrealEngine-Toon 1.2
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221208224821.png)
### 自动化
自动化系统会触发Tag以及ToonRelease分支的添加时会触发钩子进行对应的操作
- Tag通过钩子向自动化系统发送打包指令
- ToonRelease通过钩子向自动化系统发送打包指令

View File

@@ -0,0 +1,4 @@
## 开发任务
1. Pickup 实现
2. 捡起,整理,丢弃,使用,背包物品描述,装备栏(特殊的背包)

View File

@@ -0,0 +1,29 @@
# 续订方法
主要是目的是为了保证我们有额外收入的同时,让客户用得舒心。
1. 主要的方案分为**包月制**与**指定版本更新制**。
2. 允许预付费,**买12个月送2个月**。
3. 老用户费用递减每年递减20%最高减少至50%类似Rider包年制。
## 二进制引擎
### 更新制度
获取当前最新版本的卡渲引擎,但不提供其他服务。费用计算方式为:
>一次性更新版本差距不超过6个月不享受费用递减制度1w
- 12个月1.8W
- 24个月3.2W(已经加入递减计算)
- 36个月4.3w(已经加入递减计算)
### 包月制度
更新引擎的同时,赠送答疑服务。
- 3个月1W
- 6个月1.5W
- 12个月2.5W
- 赠送快速bug修复服务。
- 24个月4.5W(已经加入递减计算)
- 在12个月的基础上赠送功能定制服务2*5个工时
- 36个月6w已经加入递减计算
- 在24个月的基础上赠送功能定制服务2*10个工时
## 源代码引擎
价格为**二进制引擎**的5倍价格