{"id":3023,"date":"2020-12-30T11:39:18","date_gmt":"2020-12-30T03:39:18","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=3023"},"modified":"2021-01-02T19:45:08","modified_gmt":"2021-01-02T11:45:08","slug":"ue%e5%a4%9a%e6%92%ad%e5%a7%94%e6%89%98%e7%9a%84%e8%93%9d%e5%9b%be%e7%a4%ba%e4%be%8b","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=3023","title":{"rendered":"[UE]\u591a\u64ad\u59d4\u6258\u7684\u84dd\u56fe\u793a\u4f8b"},"content":{"rendered":"\n<p>\u4ee5\u4e0b\u793a\u4f8b\u5c55\u793a\u4e86\u56fd\u738b\u88ab\u6740\u540e\uff0c\u519c\u6c11\u60ca\u5440\u7684\u573a\u666f<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%88%9B%E5%BB%BAking%E7%B1%BB\">\u7b2c\u4e00\u6b65\uff0c\u521b\u5efaKing\u7c7b<\/h3>\n\n\n\n<ul><li>DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam\u4e3a\u58f0\u660e\u59d4\u6258<ul><li>FOnKingDeathSignature\u4e3a\u59d4\u6258\u7c7b\u578b<\/li><li>AKing* \u4e3a\u8f93\u5165\u53c2\u6570<\/li><\/ul><\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>#pragma once\n#include \"CoreMinimal.h\"\n#include \"Engine\/StaticMeshActor.h\"\n#include \"King.generated.h\"\n\nDECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnKingDeathSignature, AKing*, DeadKing);\n\nUCLASS()\nclass UEPROJ_API AKing : public AStaticMeshActor\n{\n\tGENERATED_BODY()\npublic:\n\tAKing();\n\n    UFUNCTION(BlueprintCallable, Category = King)\n    void Die();\n\n    UPROPERTY(BlueprintAssignable)\n    FOnKingDeathSignature OnKingDeath;\n};\n\n#include \"King.h\"\n#include \"UObject\/ConstructorHelpers.h\"\n\nAKing::AKing()\n{\n    PrimaryActorTick.bCanEverTick = true;\n    auto MeshAsset = ConstructorHelpers::FObjectFinder&lt;UStaticMesh>(TEXT(\"StaticMesh'\/Engine\/BasicShapes\/Cone.Cone'\"));\n    if (MeshAsset.Object != nullptr)\n    {\n        GetStaticMeshComponent()->SetStaticMesh(MeshAsset.Object);\n        GetStaticMeshComponent()->SetGenerateOverlapEvents(true);\n    }\n    GetStaticMeshComponent()->SetMobility(EComponentMobility::Movable);\n}\n\nvoid AKing::Die()\n{\n    OnKingDeath.Broadcast(this);\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%BA%8C%E6%AD%A5%E5%88%9B%E5%BB%BApeasant%E7%B1%BB\">\u7b2c\u4e8c\u6b65\uff0c\u521b\u5efaPeasant\u7c7b<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#pragma once\n#include \"CoreMinimal.h\"\n#include \"Engine\/StaticMeshActor.h\"\n#include \"Peasant.generated.h\"\n\nUCLASS()\nclass UEPROJ_API APeasant : public AStaticMeshActor\n{\n\tGENERATED_BODY()\n\t\n\tAPeasant();\n\n    UFUNCTION(BlueprintCallable, category = Peasant)\n    void Flee(AKing* DeadKing);\n};\n\n#include \"Peasant.h\"\n#include \"UObject\/ConstructorHelpers.h\"\n#include \"King.h\"\n\nAPeasant::APeasant()\n{\n    auto MeshAsset = ConstructorHelpers::FObjectFinder&lt;UStaticMesh>(TEXT(\"StaticMesh'\/Engine\/BasicShapes\/Cube.Cube'\"));\n    if (MeshAsset.Object != nullptr)\n    {\n        GetStaticMeshComponent()->SetStaticMesh(MeshAsset.Object);\n        GetStaticMeshComponent()->SetGenerateOverlapEvents(true);\n    }\n    GetStaticMeshComponent()->SetMobility(EComponentMobility::Movable);\n}\n\nvoid APeasant::Flee(AKing* DeadKing)\n{\n    auto actorLabel = this->GetActorLabel();\n    auto msg = FString::Printf(TEXT(\"%s Waily\uff01\"), *actorLabel);\n    GEngine->AddOnScreenDebugMessage(-1, 2, FColor::Red, msg);\n\n    FVector FleeVector = GetActorLocation() - DeadKing->GetActorLocation();\n    FleeVector.Normalize();\n    FleeVector *= 500;\n    SetActorLocation(GetActorLocation() + FleeVector);\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"%E5%9F%BA%E4%BA%8Epeasant%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E8%93%9D%E5%9B%BE%E7%B1%BB%E5%90%8D%E4%B8%BAbppeasant\">\u57fa\u4e8ePeasant\u521b\u5efa\u4e00\u4e2a\u84dd\u56fe\u7c7b\uff0c\u540d\u4e3a\uff1aBPPeasant<\/h3>\n\n\n\n<p>\u7136\u540e\u7f16\u8f91\u6b64\u84dd\u56fe<\/p>\n\n\n\n<ul><li>\u4eceBeginPlay\u5f00\u59cb\uff0c\u63a5\u4e00\u4e2a\u65b0\u8282\u70b9\uff0cGet All Actors Of Class<ul><li>\u3010\u6ce8\u610f\u3011 \u62c9\u8282\u70b9\u65f6\uff0c\u8981\u628aContext Sensitive\u7684\u52fe\u53bb\u6389\uff0c\u5426\u5219\u627e\u4e0d\u5230 Get All Actors Of Class<\/li><li>\u5728Actor Class\u4e2d\uff0c\u9009\u62e9King\u7c7b<\/li><\/ul><\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>\u6700\u51fa\u7b2c1\u4e2aKing\uff0c\u5728Out Actors\u8f93\u51fa\u7aef\uff0c\u63a5 Get (a copy) \u8282\u70b9<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>\u4e3a\u4e86\u9632\u6b62\u53d6\u51fa\u7684\u8282\u70b9\u4e3a\u7a7a\uff0c\u6240\u4ee5\u8981\u6dfb\u52a0\u4e3a\u7a7a\u5224\u65ad\uff0c\u6240\u4ee5 Get All Actors Of Class \u540e\u7eed\u8981\u6dfb\u52a0\u5224\u65ad\u8bed\u53e5\uff0c\u6dfb\u52a0Branch\u8282\u70b9<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Branch\u8981\u6dfb\u52a0Condition\uff0c\u6240\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u524d\u7f6e\u8282\u70b9NotEqual(object)\u8282\u70b9<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Get(a copy)\u8f93\u51fa\u4e3a NotEqual(object)\u7684\u8f93\u5165\uff0cNotEqual(object)\u7684\u7b2c2\u4e2a\u8282\u70b9\u4e0d\u9009<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>GetAllActorsOfClass\u540e\u7eed\u63a5Branch\u8282\u70b9<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>\u7efc\u4e0a\u6240\u8ff0\uff1a\u4ee5\u4e0a\u8bed\u53e5\u4e3a\u4e86\u5b9e\u73b0&nbsp;<code>if ( GetAllAlctorsOfClass[0] != null)<\/code>&nbsp;\u7684\u529f\u80fd<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Branch \u540e\u7eed\u6dfb\u52a0\u8282\u70b9\uff1aBine Event to On King Death<ul><li>Target \u4e3a Get (a copy) \u8282\u70b9 \u7684\u8f93\u51fa<\/li><\/ul><\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Bine Event to On King Death \u6dfb\u52a0 \u4e8b\u4ef6\uff0c \u9009\u62e9 \u81ea\u5b9a\u4e49\u4e8b\u4ef6\uff08Add Custom Event &#8230; ),\u540d\u4e3a KingIsDeadEvent<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>KingIsDeadEvent\u540e\u7eed\u63a5\u8282\u70b9 Flee\uff0c\u5373\u4e3a\u519c\u592b\u81ea\u5df1\u6267\u884c\u52a8\u4f5c<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<ul><li>Flee\u7684DeadKing\u4e3a KingIsDeadEvent \u7684\u8f93\u51fa\u8282\u70b9 Dead King<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"627\" src=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2020\/12\/bp_20.png\" alt=\"\" class=\"wp-image-3024\"\/><\/figure>\n\n\n\n<p>\n\n\u7136\u540e\u5728\u573a\u666f\u4e2d\u521b\u5efa\u4e00\u4e2aKing\uff0c\u56db\u5468\u521b\u5efa\u51e0\u4e2aBPPeasant\u3002\n\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7f16\u8f91\u5173\u5361\u84dd\u56fe<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"763\" height=\"356\" src=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2020\/12\/bp_21.png\" alt=\"\" class=\"wp-image-3027\"\/><\/figure>\n\n\n\n<p>\u628aKing\u6254\u8fdb\u53bb\uff0c2\u79d2\u540e\uff0c\u8ba9\u5b83\u6b7b\uff0c\u5982\u4e0a\u56fe\u6240\u793a<\/p>\n\n\n\n<p>\u7136\u540e\u8fd0\u884c\u6e38\u620f\uff0c\u770b\u8868\u73b0\u3002<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2020\/12\/uedemo_multicast.zip\">\u793a\u4f8b\u5de5\u7a0b\uff1auedemo_multicast<\/a><a href=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2020\/12\/uedemo_multicast.zip\" class=\"wp-block-file__button\" download>\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u4e0b\u793a\u4f8b\u5c55\u793a\u4e86\u56fd\u738b\u88ab\u6740\u540e\uff0c\u519c\u6c11\u60ca\u5440\u7684\u573a\u666f \u7b2c\u4e00\u6b65\uff0c\u521b\u5efaKing\u7c7b DECLARE_DYNAMIC_MULTIC [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,6],"tags":[26],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3023"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3023"}],"version-history":[{"count":4,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3023\/revisions"}],"predecessor-version":[{"id":3032,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/3023\/revisions\/3032"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}