zoukankan      html  css  js  c++  java
  • 1:编写虚幻引擎中的UC和C++代码

      我要研究基于UDK配置自己的编译环境。在前边根据UDN的文档可以配置纯新的效仿ExampleGame的环境。但是面临着两个问题:

      1.如果使用纯新的工程,在前面基于UDKGame的config配置的内容将会面临大量的更改。

      A.这甚至会影响到我们以前的光照环境等美术环节。

      B. 基于Mobile的按钮配置神奇的不会显现,FramworkGame

      因此我要解决的问题之一是,效仿UTGame在config中加入自己的游戏类型。从纯脚本的方式来看仅是在DefaultEngine.下EditPackages=ArtGame即可。开启UDK.exe即可以编译之。

      从要编译C++的角度来看在EditScript中添加NativeScriptPackages为当前要编译的包即可。

     

      抛开更底层的引擎层,执行UDKGame的环境至少会包含以下底层类:

      GameFramework:包含了MobileInputZone。 包含Native

      UDKBase:SimpleGame等基础类。 包含Native

      UTGame: 这是构建在UDKBase之上的层,纯UnrealScript。

      

      2.生成的编译

      虚幻有一套基于UnrealBuildTool的编译过程,这套流程中需要用C#在其配置环境中配置注册自己的Native代码。我可以在这里面添加并且让自己的包通过Native编译通过。然而下面的问题3是目前让我纠结的地方。

      3.怎么像UTGame一样在UDK目录下进行编译

      我的理解是这样的,抛开原本UDK给的纯脚本在DefaultEngine中添加自己的UnrealScript包方式,就像上边的描述。扩展UC是非常简单的,原本的引擎仅是需要连接架设的UC虚拟机。

      但是C++便不同,他会潜入到引擎中。编译了自己的native code会改变引擎。

      我有两套解决方案实现这个过程:

      

      A.将自己的ArtGame像UTGame一样设置成纯净的UC code。更改UDKBase层级对其进行Native修改即可。编译的时候使用UDKGame进行即可。暴露出来一些native函数调用被ArtGame所使用。

      这样我就会像使用UDK一样使用UE3.

    class ArtPlayerController extends GamePlayerController
        config(Game);
    
    //使用Native返回字符串
    exec function TestNative()
    {
        local string s;
        local ArtSocketObject UCObject;
    
        UCObject=new class'ArtSocketObject';
        
        s=UCObject.NativeRetString();
    
        ClientMessage(s);
    }
    class ArtSocketObject extends Object Native(Socket);
    
    native function string  NativeRetString();

       上面的过程是一般的native code调用方法。

    EngineLoop
    {
                  UDKGame
                  {
                            UDKBase()
                            UTGame()
                   }
    
                  ArtGame
                  {
                            UDKBase()
                            ArtGameUC()
                  }
    }

      B.然而上述过程有一个巨大的风险,UDKBase代码量庞大,改动起来非常的危险。并且对于频繁修改的工程项目是非常难以控制的。尤其是我们还要解决棘手的网络层,将会面临棘手的大量数据定义和传输。

      又回归到问题的本质了,怎么在UDKGame的层级添加自己的代码嘞?

    EngineLoop
    {
          UDKGame
          {
                  UTGame
                  {
                  }  
    
                  ArtGame
                  {
                  }
          }  
    }
  • 相关阅读:
    Kubernetes实战:高可用集群的搭建和部署
    华为云MVP程云:知识化转型,最终要赋能一线
    支持60+数据传输链路,华为云DRS链路商用大盘点
    关于单元测试的那些事儿,Mockito 都能帮你解决
    深入原生冰山安全体系,详解华为云安全服务如何构筑全栈安全
    云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用
    FLINK重点原理与机制:内存(1)task之间的数据传输
    FLINK重点原理与机制:内存(2)网络流控及反压机制剖析(一)
    FLINK重点原理与机制:状态(3)两阶段提交
    FLINK重点原理与机制:状态(2)Flink的检查点算法CHECKPOINT
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/5234167.html
Copyright © 2011-2022 走看看