美景之屋5在线观看_成人区精品一区二区婷婷_91av在线视频播放_午夜影院在线_一本久久综合亚洲鲁鲁五月天_国产精品一区在线观看

  • UE4開發(fā)插件流程

    2017/7/4??????點(diǎn)擊:


    1. 直接從Editor中生成一個(gè)空的插件模板
    2. 關(guān)掉vs,右鍵生成一下工程文件,把Plugins掃進(jìn)去
    3. 打開解決方案開始編寫插件 
    首先把插件的配置文TestPlugin.uplugin件改一下(被這個(gè)坑了兩天) 
    這個(gè)LoadingPhase的值默認(rèn)為Default,必須修改為PreDefault,不然重啟Editor會報(bào)關(guān)聯(lián)不上插件源碼的錯(cuò)誤,切記! 

    修改編譯模塊配置TestPlugin.Build.cs文件,c#文件 

    詳細(xì)代碼,里面有注釋 
    using UnrealBuildTool;
    using System.IO; //路徑獲取需要用到IO


    public class TestPlugin : ModuleRules
    {
        private string ModulePath //當(dāng)前TestPlugin.Build.cs文件所在的路徑
        {
            get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }
        }


        private string ThirdPartyPath //這個(gè)插件引用的第三方庫的目錄
        {
            get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
        }


        private string MyTestLibPath //第三方庫MyTestLib的目錄
        {
            get { return Path.GetFullPath(Path.Combine(ThirdPartyPath, "MyTestLib")); }
        }


        public TestPlugin(TargetInfo Target)
        {
            PublicIncludePaths.AddRange( //公有文件搜索路徑
                new string[] {
                    "TestPlugin/Public"
                    // ... add public include paths required here ...
                }
                );


            PrivateIncludePaths.AddRange(
                new string[] {
                    "TestPlugin/Private" //私有文件搜索路徑
                    // ... add other private include paths required here ...
                }
                );


            PublicDependencyModuleNames.AddRange(
                new string[]
                {
                    "Core"
                    // ... add other public dependencies that you statically link with here ...
                }
                );


            PrivateDependencyModuleNames.AddRange(
                new string[]
                {
                    "CoreUObject",
                    "Engine",
                    "Slate",
                    "SlateCore",
                    // ... add private dependencies that you statically link with here ...  
                }
                );


            DynamicallyLoadedModuleNames.AddRange(
                new string[]
                {
                    // ... add any modules that your module loads dynamically here ...
                }
                );


            LoadThirdPartyLib(Target); //加載第三方庫
        }


        public bool LoadThirdPartyLib(TargetInfo Target)
        {
            bool isLibrarySupported = false;
            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))//平臺判斷
            {
                isLibrarySupported = true;
                System.Console.WriteLine("----- isLibrarySupported true");
                string PlatformSubPath = (Target.Platform == UnrealTargetPlatform.Win64) ? "Win64" : "Win32";
                string LibrariesPath = Path.Combine(MyTestLibPath, "Lib");
                PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, PlatformSubPath, "TestLib.lib"));//加載第三方靜態(tài)庫.lib
            }


            if (isLibrarySupported) //成功加載庫的情況下,包含第三方庫的頭文件
            {
                // Include path
                System.Console.WriteLine("----- PublicIncludePaths.Add true"); 
                PublicIncludePaths.Add(Path.Combine(MyTestLibPath, "Include"));
            }
            return isLibrarySupported;
        }
    }


    寫個(gè)自定義的char – TestChar,繼承自Character 
    先看下文件結(jié)構(gòu),需要藍(lán)圖可見的必須丟到Public下 

    先修改預(yù)編譯頭文件TestPluginPrivatePCH.h,必須包含CoreUObject,不然編譯不過,切記!

    #include "TestPlugin.h"

    // UObject core
    #include "CoreUObject.h" //默認(rèn)是不含這個(gè)的

    // Actor based classes
    #include "GameFramework/Character.h" //包插件中所有用的的引擎類都丟到這里來


    頭文件,正常編寫自定義的類一樣
    #pragma once
    #include "GameFramework/Character.h"
    #include "TestChar.generated.h"
    UCLASS()
    class ATestChar : public ACharacter
    {
        GENERATED_BODY()


    public:
        // Sets default values for this character\'s properties
        ATestChar();


        UPROPERTY(EditAnywhere, Category = "Test Char")
            int32           mAge;
        UPROPERTY(EditAnywhere, Category = "Test Char")
            FString         mName;
    };


    //cpp文件,包含的是預(yù)編譯文件和類的頭文件
    #include "TestPluginPrivatePCH.h"
    #include "TestChar.h"
    #include "TestLib.h" //引入的第三方庫的頭文件
    ATestChar::ATestChar() : Super()
    {
        mAge = myPrint("hello world", 123); //第三方庫中的方法
        mName = "yangx";
    }


    第三方庫打成了一個(gè)靜態(tài)庫TestLib.lib
    TestLib.h
    #ifndef __TEST_LIB_H__
    #define __TEST_LIB_H__
    #include




    #include


    int myPrint(std::string _name, int _age);
    #endif


    //TestLib.cpp
    #include "TestLib.h"
    int myPrint(std::string _name, int _age)
    {
        return _age + 1000;
    }

    4. 編譯運(yùn)行,在Editor中create一個(gè)Blueprint繼承自這個(gè)TestChar類

    5. 拖到場景運(yùn)行游戲


    主站蜘蛛池模板: 欧美人与Z0ZOXXXX视频 | 丰满少妇又爽又紧又丰满在线观看 | 巨胸喷奶水WWW视频网站 | 欧美国产日韩午夜 | 亚洲综合另类小说色区色噜噜 | 一女多男np黑人挺进视频 | 精品国一区二区三区 | 国产精品久久久久久亚洲徐婉婉 | 99热在线精品免费 | 69av视频在线观看 | 美女胸18下看禁止免费视频51 | 日韩成人视屏 | 亚洲无线码一区二区三区 | 中文字幕亚洲精品第1页 | 国产一区二区三区AV在线无码观看 | 亚洲无线码高清在线观看 | 久久久噜噜噜久久熟女AA片 | 年轻的朋友hd中字 | 无码专区人妻系列日韩精品少妇 | 国产精品毛片视频 | 日韩黄色在线 | 手机福利在线视频 | 人妻丰满AV无码久久不卡 | 日本不卡免费在线视频 | 亚洲精品禁 | 国产欧美日韩另类在线专区 | 日本乱人伦视频 | 国产精品国产三级欧美二区 | 精品18在线观看免费视频 | 日韩一级完整毛片 | 亚洲国产精品成人无久久精品 | 东京热一区二区沙河无码网站 | 碰碰精品 | 亚洲精品视频在线免费 | 国产精品免费视频一区 | 亚洲AV元码天堂一区二区三区 | 女教师痴汉调教爱より速く | 天天操夜夜操国产精品 | 免费无码百合真人片18禁 | 男男无码GV片在线看 | 少妇精品无码一区二区免费视频 |