diff --git a/02-Note/DAWA/ASoul/导播操作笔记.md b/02-Note/DAWA/ASoul/导播操作笔记.md index aea6961..0f5a141 100644 --- a/02-Note/DAWA/ASoul/导播操作笔记.md +++ b/02-Note/DAWA/ASoul/导播操作笔记.md @@ -362,6 +362,7 @@ public: 1. DirectorCam:与24个镜头相关。 2. Editor:RuntimeEditor相关。 3. LiveDirector: + 1. [ ] Character/TsIdolActor.ts:[[角色流程#TsIdolActor.ts]] 4. Camera 5. Characrer: 6. Danma:弹幕相关,View以及控制。 diff --git a/02-Note/DAWA/ASoul/流程笔记/角色流程.md b/02-Note/DAWA/ASoul/流程笔记/角色流程.md index 8d98393..749be28 100644 --- a/02-Note/DAWA/ASoul/流程笔记/角色流程.md +++ b/02-Note/DAWA/ASoul/流程笔记/角色流程.md @@ -1,8 +1,31 @@ # 前言 -继承关系:BP_XXX_Base -> BP_Idol_Base -> TsIdolActor -> AVCharacter -> Character 。 +继承关系:BP_XXX_Base -> BP_Idol_Base -> TsIdolActor -> AVCharacter -> ACharacter 。 主要逻辑位于TsIdolActor中,文件路径为`Script/LiveDirector/Character/TsIdolActor.ts` -# 角色判断逻辑 -PropTags: UE.GameplayTagContainer +# AVCharacter +主要实现了`virtual void OnRep_AttachmentReplication() override;`,声明了若干BlueprintNativeEvent: +- bool CanSyncRelativeTransform(); +- void BeforeAttachToNewParent(); +- void AfterAttachToNewParent(); + +## OnRep_AttachmentReplication() +注释: +>// 动捕模式下,CanSync=false. 各端自行计算Actor Location, client无需使用Server计算结果 + // 自由行走模式下, CanSync=true,client需要同步server的transform信息 -通过Tag判断。 \ No newline at end of file +# TsIdolActor.ts +## VirtualOverrider + +```typescript +CanSyncRelativeTransform(): boolean { + if (Utils.HasTag(this.PropTags, new UE.GameplayTag("Idol.AIACao"))) { + return false; + } + if(this.MovementComp && this.MovementComp.ManulMovement){ + return false + } + var animInstance = this.Mesh.GetAnimInstance() as UE.IdolAnimInstance + let fullbodyNode = Reflect.get(animInstance, 'AnimGraphNode_Fullbody') as UE.AnimNode_FullBody + return !(fullbodyNode && fullbodyNode.bGetMotionData) +} +``` \ No newline at end of file