{"id":518,"date":"2024-10-07T19:43:52","date_gmt":"2024-10-07T11:43:52","guid":{"rendered":"https:\/\/www.vanforever.com.cn\/?p=518"},"modified":"2024-10-08T22:52:16","modified_gmt":"2024-10-08T14:52:16","slug":"ue-%e7%bd%91%e7%bb%9c%e5%ad%a6%e4%b9%a0%e4%b9%8b%e8%b7%af","status":"publish","type":"post","link":"https:\/\/www.vanforever.com.cn\/?p=518","title":{"rendered":"UE \u7f51\u7edc\u5b66\u4e60\u4e4b\u8def"},"content":{"rendered":"<div  class='collapse-block shadow-sm collapse-block-transparent collapsed hide-border-left'><div class='collapse-block-title'><span class='collapse-block-title-inner'>\u67e5\u770b\u7279\u8272\u56fe\u7247<\/span><i class='collapse-icon fa fa-angle-down'><\/i><\/div><div class='collapse-block-body' style='display:none;'><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/Vanforever\/20240610\/wallhaven-9dpxew_3840x2400.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large\" data-original=\"https:\/\/pic.vanforever.com.cn\/Vanforever\/20240610\/wallhaven-9dpxew_3840x2400.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" width=\"3840\" height=\"2400\" \/><\/div><\/div><\/div>\n<p>[\u65af\u5766\u798fCS193u-\u4f7f\u7528\u865a\u5e7b\u5f15\u64ce\u548cC++\u7684\u6e38\u620f\u5f00\u53d1<a href=\"https:\/\/zhuanlan.zhihu.com\/p\/407527903\">6]-\u591a\u4eba\u6e38\u620f &#8211; \u77e5\u4e4e (zhihu.com)<\/a><\/p>\n<h2 id=\"\u521d\u6b65\u5b9e\u73b0\u7f51\u7edc\u8bbe\u7f6e\">\u521d\u6b65\u5b9e\u73b0\u7f51\u7edc\u8bbe\u7f6e<\/h2>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SInteractionComponent.h\nprotected:\n\tUFUNCTION(Server, Reliable)\n\tvoid ServerInteract(AActor* InFocus);\n\n\n\/\/SInteractionComponent.cpp\nvoid USInteractionComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)\n{\n\tSuper::TickComponent(DeltaTime, TickType, ThisTickFunction);\n\n\tAPawn* MyPawn = Cast&lt;APawn&gt;(GetOwner());\n\tif (MyPawn-&gt;IsLocallyControlled())\n\t{\n\t\tFindBestInteractable();\n\t}\n}\n\nvoid USInteractionComponent::PrimaryInteract()\n{\n\tServerInteract(FocusedActor);\n}\n\nvoid USInteractionComponent::ServerInteract_Implementation(AActor* InFocus)\n{\n\tif (InFocus == nullptr)\n\t{\n\t\tGEngine-&gt;AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, \"No Focus Actor to interact.\");\n\t\treturn;\n\t}\n\n\tAPawn* MyPawn = Cast&lt;APawn&gt;(GetOwner());\n\n\tISGameplayInterface::Execute_Interact(InFocus, MyPawn);\n\n}\n<\/code><\/pre>\n<h2 id=\"\u4f7f\u5f97\u7bb1\u5b50\u5b9e\u73b0\u7f51\u7edc\u540c\u6b65\">\u4f7f\u5f97\u7bb1\u5b50\u5b9e\u73b0\u7f51\u7edc\u540c\u6b65<\/h2>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SItemChest.h\nprotected:\n\tUPROPERTY(ReplicatedUsing=\"OnRep_LidOpened\", BlueprintReadOnly) \/\/ RepNotify\n\tbool bLidOpened;\n\n\tUFUNCTION()\n\tvoid OnRep_LidOpened();\n\t\n\t\/\/ Called when the game starts or when spawned\n\tvirtual void BeginPlay() override;\n\n\n\n\/\/SItemChest.cpp\nASItemChest::ASItemChest()\n{\n\tSetReplicates(true);\n}\n\nvoid ASItemChest::Interact_Implementation(APawn* InstigatorPawn)\n{\n\tbLidOpened = !bLidOpened;\n\tOnRep_LidOpened();\n}\n\n\nvoid ASItemChest::OnRep_LidOpened()\n{\n\tfloat CurrPitch = bLidOpened ? TargetPitch : 0.0f;\n\tLidMesh-&gt;SetRelativeRotation(FRotator(CurrPitch, 0, 0));\n}\n\n\nvoid ASItemChest::GetLifetimeReplicatedProps(TArray&lt;FLifetimeProperty&gt;&amp; OutLifetimeProps) const\n{\n\tSuper::GetLifetimeReplicatedProps(OutLifetimeProps);\n\n\tDOREPLIFETIME(ASItemChest, bLidOpened);\n}\n<\/code><\/pre>\n<p>\u5728\u7bb1\u5b50\u7684\u84dd\u56fe\u4e2d\u4f7f\u5176\u7ee7\u627f\u7236\u8282\u70b9\u529f\u80fd<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092401.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092401.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728\u6bcftick\u7ed8\u5236\u89c2\u5bdf\u7ebf\u6761<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092402.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092402.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u5728PlayControlBP\u4e2d\u5224\u65ad\u662f\u5426\u4e3a\u672c\u5730\u63a7\u5236\u7aef<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092403.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240924\/2024092403.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<h2 id=\"\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7684actor-instances\u540c\u6b65\">\u8bbe\u7f6e\u5ba2\u6237\u7aef\u7684Actor Instances\u540c\u6b65<\/h2>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SPowerupActor.cpp\nASPowerupActor::ASPowerupActor()\n{\n\tSetReplicates(true);\n}\n\n\/\/SProjectileBase.cpp\nASProjectileBase::ASProjectileBase()\n{\n\tSetReplicates(true);\n}\n\n\/\/SAttributeComponent.h\nprotected:\n\tUPROPERTY(EditDefaultsOnly,BlueprintReadOnly,Replicated,Category=\"Attributes\")\n\tfloat Health;\n\n\tUPROPERTY(EditDefaultsOnly, BlueprintReadOnly,Replicated, Category = \"Attributes\")\n\tfloat HealthMax;\n\npublic:\n\tUFUNCTION(NetMulticast, Reliable) \/\/ @FIXME: mark as unreliable once we moved the 'state' our of scharacter\n\tvoid MulticastHealthChanged(AActor* InstigatorActor, float NewHealth, float Delta);\n\n\n\/\/SAttributeComponent.cpp\nUSAttributeComponent::USAttributeComponent()\n{\n\tSetIsReplicatedByDefault(true);\n}\n\nbool USAttributeComponent::IsActorAlive(AActor* Actor)\n{\n\treturn false;\n}\n\nbool USAttributeComponent::ApplyHealthChange(AActor* InstigatorActor,float Delta)\n{\n\tif(!GetOwner()-&gt;CanBeDamaged() &amp;&amp; Delta &lt; 0.0f)\n\t{\n\t\treturn false;\n\t}\n\n\tif(Delta &lt; 0.0f)\n\t{\n\t\tfloat DamageMultipier = CVarDamageMultiplier.GetValueOnGameThread();\n\n\t\tDelta *= DamageMultipier;\n\t}\n\n\t\n\tfloat OldHealth = Health;\n\n\tHealth = FMath::Clamp(Health+Delta,0.0f,HealthMax);\n\n\tfloat ActualDelta = Health - OldHealth;\n\t\/*OnHealthChanged.Broadcast(InstigatorActor,this,Health,ActualDelta);*\/\n\tif (ActualDelta != 0.0f)\n\t{\n\t\tMulticastHealthChanged(InstigatorActor, Health, ActualDelta);\n\t}\n\n\n\t\/\/Died\n\tif(Delta &lt;0.0f &amp;&amp; Health == 0.0f)\n\t{\n\t\tASGameModeBase* GM = GetWorld()-&gt;GetAuthGameMode&lt;ASGameModeBase&gt;();\n\t\tif(GM)\n\t\t{\n\t\t\tGM-&gt;OnActorKilled(GetOwner(),InstigatorActor);\n\t\t}\n\t}\n\treturn ActualDelta != 0;\n}\n\nvoid USAttributeComponent::MulticastHealthChanged_Implementation(AActor* InstigatorActor, float NewHealth, float Delta)\n{\n\tOnHealthChanged.Broadcast(InstigatorActor, this, NewHealth, Delta);\n}\n\n\nvoid USAttributeComponent::GetLifetimeReplicatedProps(TArray&lt;FLifetimeProperty&gt;&amp; OutLifetimeProps) const\n{\n\tSuper::GetLifetimeReplicatedProps(OutLifetimeProps);\n\n\tDOREPLIFETIME(USAttributeComponent, Health);\n\tDOREPLIFETIME(USAttributeComponent, HealthMax);\n\t\/\/DOREPLIFETIME_CONDITION(USAttributeComponent, HealthMax, COND_InitialOnly);\n}\n<\/code><\/pre>\n<p>\u5b8c\u6210\u4e0a\u8ff0\u4ee3\u7801\u540e\u6211\u4eec\u7684\u751f\u547d\u503c\u548c\u5065\u5eb7\u8840\u6761\u5c31\u5728\u670d\u52a1\u7aef\u653b\u51fb\u5ba2\u6237\u7aef\u65f6\u540c\u6b65\u4e86<\/p>\n<p>\u5728SCharacter\u7684\u84dd\u56fe\u4e2d\u6dfb\u52a0Minion\u7684widget<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092501.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092501.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SWorldUserWidget.h\n\nUPROPERTY(BlueprintReadWrite, Category = \"UI\", meta = (ExposeOnSpawn=true))\nAActor* AttachedActor;\n<\/code><\/pre>\n<p>\u6dfb\u52a0\u4e0a\u9762\u4ee3\u7801\u540e\uff0c\u6211\u4eec\u53ef\u4ee5\u518d\u6b21\u4fee\u6539\u84dd\u56fe<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092502.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092502.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u89d2\u8272\u5934\u9876\u51fa\u73b0\u8840\u91cf\u6761\u4e86<\/p>\n<p>\u8bbe\u7f6e\u7206\u70b8\u6876\u4e2d\u7684\u84dd\u56fe<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092503.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092503.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6dfb\u52a0\u4e0b\u5217\u5185\u5bb9,\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48\u6211\u4eec\u7684\u7206\u70b8\u6876\u65e0\u6cd5\u5b9e\u73b0\u81ea\u52a8\u7206\u70b8<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092504.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092504.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u8bbe\u7f6e\u591a\u64ad\u5730\u5740<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092505.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092505.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6211\u4eec\u4e0d\u5e0c\u671b\u6211\u4eec\u7684\u7206\u70b8\u6876\u5728\u5ba2\u6237\u7aef\u4e0a\u88ab\u9500\u6bc1\uff0c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e00\u6b65\u53ea\u5728\u670d\u52a1\u7aef\u5b8c\u6210<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092506.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092506.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6700\u540e\u6309\u7167\u4e0b\u9762\u7684\u8bbe\u7f6e\u624d\u5b8c\u6210\u4e86\u6548\u679c<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092507.jpg'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/pic.vanforever.com.cn\/UE\/Network\/20240925\/2024092507.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" \/><\/div><\/p>\n<p>\u6700\u540e\u6211\u4eec\u5728\u84dd\u56fe\u4e2d\u5b9e\u73b0\u4e86\u7206\u70b8\u6876\u7684\u81ea\u6211\u9500\u6bc1\uff0c\u4f46\u662f\u53ef\u80fd\u662f\u56e0\u4e3a\u7206\u70b8\u6876\u7684\u7206\u70b8\u903b\u8f91\u91c7\u7528\u7684\u8fd8\u662f\u6211\u5728C++\u4e2d\u5199\u7684\uff0c\u6240\u4ee5\u84dd\u56fe\u4e2d\u7684\u7206\u70b8\u6548\u679c\u5e76\u6ca1\u6709\u540c\u6b65<\/p>\n<pre><code class=\"language-cpp\" lang=\"cpp\">\/\/SActionComponent.h\nprotect:\n\tUFUNCTION(Server, Reliable)\n\tvoid ServerStartAction(AActor* Instigator, FName ActionName);\n\n\/\/SActionComponent.cpp\nUSActionComponent::USActionComponent()\n{\n\tPrimaryComponentTick.bCanEverTick = true;\n\n\tSetIsReplicatedByDefault(true);\n\n}\n\nbool USActionComponent::StartActionByName(AActor* Instigator, FName ActionName)\n{\n\tfor(USAction* Action : Actions)\n\t{\n\t\tif(Action &amp;&amp; Action-&gt;ActionName == ActionName)\n\t\t{\n\t\t\tif (!Action-&gt;CanStart(Instigator))\n\t\t\t{\n\t\t\t\tFString FailedMsg = FString::Printf(TEXT(\"Failed to run: %s\"), *ActionName.ToString());\n\t\t\t\tGEngine-&gt;AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, FailedMsg);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t\/\/ Is Client?\n\t\t\tif (!GetOwner()-&gt;HasAuthority())\n\t\t\t{\n\t\t\t\tServerStartAction(Instigator, ActionName);\n\t\t\t}\n\t\t\t\n\t\t\tAction-&gt;StartAction(Instigator);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nvoid USActionComponent::ServerStartAction_Implementation(AActor* Instigator, FName ActionName)\n{\n\tStartActionByName(Instigator, ActionName);\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>[\u65af\u5766\u798fCS193u-\u4f7f\u7528\u865a\u5e7b\u5f15\u64ce\u548cC++\u7684\u6e38\u620f\u5f00\u53d16]-\u591a\u4eba\u6e38\u620f &#8211; \u77e5\u4e4e (zhihu.com [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,27],"tags":[5],"class_list":["post-518","post","type-post","status-publish","format-standard","hentry","category-ue","category-cs193u","tag-ue"],"_links":{"self":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=518"}],"version-history":[{"count":2,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":520,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions\/520"}],"wp:attachment":[{"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vanforever.com.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}