c# c++ unreal

2014-11-13 00:34:00 cpongo4 阅读数 138

Xamarin发布了一个扩展,支持授权的Unreal Engine开发者使用C#来开发游戏。Mono for Unreal Engine的最初版本支持的是Unreal Engine 4.4,支持在Windows和Mac上开发,未来可能会支持Linux平台。该扩展也支持F#,Mono团队表示未来会增加默认的模板。

\\

可以原生访问Android、iOS和Mac的外部API。可以通过CppSharp访问C++代码,还可以通过Platform Invoke手动绑定C API。Mono团队提供了上手指南,此外还有关于如何配置基于Windows或Mac的开发环境的说明 。

\\

Xamarin的Miguel de Icaza在发布该项目时指出,目前Xamarin并不直接对该扩展提供技术支持。用户要使用Mono for Unreal Engine发布项目,需要获得重新发布Mono运行时的商业授权。(这是获得Unreal Engine本身授权之外的另一个授权)。开发路线图中指出,目前版本准备支持Android和IOS,但是尚未正式提供。

\\

查看英文原文:C# Comes to the Unreal Engine

\\

感谢臧秀涛对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

2016-10-21 10:31:14 qq_20309931 阅读数 2208
    接触UnrealEngine4大概有快两周了,从安装配置到编辑器的熟悉,再到官方实例的学习以及Blueprint的应用。从UE3的UnrealScript和各种classes到UE4现在的发开方式,昨天大概拟定了一个UE4引擎探究的计划,下周会围绕计划展开研究。

    这几天再看UnrealEngine4的代码,在写代码的过程中有些注意事项跟大家分享一下,也算给自己做个记录"[转载]Unreal4 <wbr

一. 最好不要自己在UnrealEngine4的工程中添加代码文件,尤其是.h文件。因为UE4的UnrealHeaderTool会根据UnrealEngine4的反射机制自动生成一个.generated.h文件(应该是UnrealBuildTool需要注册并做反射用)。添加代码最好是通过编辑器的创建类向导创建。  如图例:

"[转载]Unreal4 <wbr
    如果想用更多的类作为父类的话,可以点击“右上角”显示所有类。这样的话比如我们想做一个管理器类不需要其他逻辑业务功能我们就可以在 显示所有类 中选择一个UObject作为父类喽,配图如下:

"[转载]Unreal4 <wbr
点击”显示所有类”后,如图:

"[转载]Unreal4 <wbr

二. UnrealEngine4的C++代码有套自己的浅规则,如同Unity3D的限制版C#一样。请各位同学们不要忙着抱怨"[转载]Unreal4 <wbr,经过了13多年承载和UnrealScript的经验想必Epic不会自找苦吃把自己开发饭碗搞的很糟糕。目前笔者看到的优点是拥有GC机制,支持Blueprint和编辑器的反射机制,UnrealBuildTool的运行时编译,还有一些自动化生成功能。闲话不多说,来点干货先。

  1. 声明类时需要添加UCLASS()宏,可以带参数用来标示在编辑器中的名称,暴露类别,显示类别,类别构造,API类型,Blueprint类型,配置文件=名称。
例如:

"[转载]Unreal4 <wbr
  2. 声明变量时需要添加UPROPERTY()宏,可以带参数用来标示 在哪里时可见,高级显示类型,属于哪个类别,标签[类似注释]。
例如:
"[转载]Unreal4 <wbr
 3. 在XXXX.h文件中引用其他头文件,请各位同学一定要在把#include “xxx.h” 放到这个XXXX.h文件#include “XXXX.generated.h” 前,不然会报错呦。
例如:
"[转载]Unreal4 <wbr

4. 下周UnrealEngine4就要更新4.1版本了,最近UE4还属于公测版有不少不稳定的地方,当然官方的更新的速度也很快。在目前这个情况下笔者比较建议采用Unity3D脚本开发的程序结构。做一个自己的逻辑模块聚合到自己的GameMode或者WordSettings下。再由自己的逻辑模块去驱动游戏逻辑调用或者驱动UnrealEngine4的其他模块,开发者把大部分精力放在逻辑模块的架构上和引擎功能模块的调度上,不要上来就想去从GamePlay的入口去改引擎底层的逻辑架构。

原因如下:
1). UnrealEngine4引擎目前还不是很健壮,可能会在开发流程和开发模式上做出变动。
2). UnrealEngine4试图把很多精力放在把大家想Blueprints上去引导,大力推动开发者用Blueprints完成游戏开发。游戏逻辑和Blueprints关联很紧密,如果处理不好久有点得不偿失了会浪费大量时间和精力。


预祝大家开发顺利,欢迎随时沟通 互相学习和进步"[转载]Unreal4 <wbr





2015-08-03 11:49:02 pizi0475 阅读数 6172
 接触UnrealEngine4大概有快两周了,从安装配置到编辑器的熟悉,再到官方实例的学习以及Blueprint的应用。从UE3的UnrealScript和各种classes到UE4现在的发开方式,昨天大概拟定了一个UE4引擎探究的计划,下周会围绕计划展开研究。

    这几天再看UnrealEngine4的代码,在写代码的过程中有些注意事项跟大家分享一下,也算给自己做个记录Unreal4 <wbr>C++使用注意事项

一. 最好不要自己在UnrealEngine4的工程中添加代码文件,尤其是.h文件。因为UE4的UnrealHeaderTool会根据UnrealEngine4的反射机制自动生成一个.generated.h文件(应该是UnrealBuildTool需要注册并做反射用)。添加代码最好是通过编辑器的创建类向导创建。  如图例:

Unreal4 <wbr>C++使用注意事项
    如果想用更多的类作为父类的话,可以点击“右上角”显示所有类。这样的话比如我们想做一个管理器类不需要其他逻辑业务功能我们就可以在 显示所有类 中选择一个UObject作为父类喽,配图如下:

Unreal4 <wbr>C++使用注意事项
点击"显示所有类"后,如图:

Unreal4 <wbr>C++使用注意事项

二. UnrealEngine4的C++代码有套自己的浅规则,如同Unity3D的限制版C#一样。请各位同学们不要忙着抱怨Unreal4 <wbr>C++使用注意事项,经过了13多年承载和UnrealScript的经验想必Epic不会自找苦吃把自己开发饭碗搞的很糟糕。目前笔者看到的优点是拥有GC机制,支持Blueprint和编辑器的反射机制,UnrealBuildTool的运行时编译,还有一些自动化生成功能。闲话不多说,来点干货先。

  1. 声明类时需要添加UCLASS()宏,可以带参数用来标示在编辑器中的名称,暴露类别,显示类别,类别构造,API类型,Blueprint类型,配置文件=名称。
例如:

Unreal4 <wbr>C++使用注意事项
  2. 声明变量时需要添加UPROPERTY()宏,可以带参数用来标示 在哪里时可见,高级显示类型,属于哪个类别,标签[类似注释]。
例如:
Unreal4 <wbr>C++使用注意事项
 3. 在XXXX.h文件中引用其他头文件,请各位同学一定要在把#include "xxx.h" 放到这个XXXX.h文件#include "XXXX.generated.h" 前,不然会报错呦。
例如:
Unreal4 <wbr>C++使用注意事项

4. 下周UnrealEngine4就要更新4.1版本了,最近UE4还属于公测版有不少不稳定的地方,当然官方的更新的速度也很快。在目前这个情况下笔者比较建议采用Unity3D脚本开发的程序结构。做一个自己的逻辑模块聚合到自己的GameMode或者WordSettings下。再由自己的逻辑模块去驱动游戏逻辑调用或者驱动UnrealEngine4的其他模块,开发者把大部分精力放在逻辑模块的架构上和引擎功能模块的调度上,不要上来就想去从GamePlay的入口去改引擎底层的逻辑架构。

原因如下:
1). UnrealEngine4引擎目前还不是很健壮,可能会在开发流程和开发模式上做出变动。
2). UnrealEngine4试图把很多精力放在把大家想Blueprints上去引导,大力推动开发者用Blueprints完成游戏开发。游戏逻辑和Blueprints关联很紧密,如果处理不好久有点得不偿失了会浪费大量时间和精力。


预祝大家开发顺利,欢迎随时沟通 互相学习和进步Unreal4 <wbr>C++使用注意事项

2018-06-02 21:51:36 zhengliuguo 阅读数 2937
摘要: 一位程序员网友小保哥分享自己的UE4快速上手过程,只是笔记,52VR做了一点更加适合阅读的修改,整理给大家。

  1. 首先,本文只是针对有比较熟练C++技能的程序员,他可以没有任何图形学或游戏引擎方面的经验知识。
  2. 其次,本文只是偏重工程方面的介绍,没多少理论知识的介绍,目的纯粹就是让一个完全没有接触过UE4的C++程序员能够很快着手开发UE程序。
  3. 再次,本文只是个人的经验之谈,甚至有可能有理解错误的地方,因为我也只是学了UE4一个多月,但是确实能够让我很短时间就能从事UE4的开发了。
  4. 最后,源于以上几点,高手勿喷,如有不爽,绕行即可。若有闲情雅致,可以顺手指点指点,不吝感激。

我研究的是UE4.10,因为电脑上只下载了这个,看的官方文档是4.9的。

以下就按时间顺序排列我的学习过程:

1)创建工程

对程序员来说,甭管这个引擎如何如何,我如果用它开发一个什么东西,首先得创建一个工程,然后把所有相关的代码都写到这个工程里。这就是我们要知道的第一步。那么在UE4里如何创建一个工程呢?在启动引擎程序时,自己会蹦出一个窗口,让你选择打开电脑上已有的工程或者创建新的工程。UE4工程只有两种类型:蓝图的、C++的。这两种类型的工程其实没有任何实质性的区别。把UE4工程分成这两种类型,表现出来的唯一区别是:C++类型的工程创建的时候,会自动弹出visual studio来打开这个UE4工程。仅此而已。

而对程序员来说,蓝图类型的工程创建好后,在该工程的UEditor的File菜单里会有一项[Create Visual studio Project],中文版是[生成Visual Studio项目],以后我只针对英文版来写了。点击一下这个菜单项,对应的Visual Studio工程文件就创建好了。相应的,File菜单里还有[Open Visual Studio]菜单项,作用就是在Visual Studio里打开该工程对应的代码文件。其他菜单项暂且放下,一会儿再回头说几句就懂了。

2)UE4的工程配置

甭管是蓝图类型还是C++类型的,工程反正是创建好了。

到这里,我们先不管如何往这个工程里写代码添加新功能。我们直接Build一下这个工程:UEditor界面工具栏上的Build按钮或者VisualStudio的Build按钮。没有任何悬念,结果肯定是Build成功。

哦,说到这里,提一下,UE4.10以上必须安装Visual Studio 2015。我们打开对应的Visual Studio工程(如果是蓝图类型,按照上面所述方法生成Visual Studio工程即可)。

215337owpzs0wsovpwpqpp

在VisualStudio里,我们能看到这个工程里的代码文件就很少的几个,如图,这张图片里VirtualCamera是我的工程名。注意看.Target.cs后缀的文件,这里所谓的Target就是Makefile文件里的Target的意思。我们知道手写Makefile文件在某些情况下是比较费劲的行为,因此程序员们造出了很多Automake工具用来自动生成Makefile文件。因此,UE4自己也造了一个Automake工具,用来生成Makefile文件。这个Automake工具是C#写的,用C#文件来描述Make的规则,比如这个Target.cs就是用来描述Makefile里最终的成品,可以有多个Target.cs,但它们不一定同时起作用。比如vs编译类型选为[Development]而不是[Development Editor]时,那个Editor.Target.cs文件描述的Target的Make规则就不会起作用,此时,即便你从硬盘上和vs里删掉这个.Editor.Target.cs文件,工程也能成功编译并运行。文件列表里还有类似.Build.cs文件,这个就描述类似Makefile里的中间目标文件的Make规则。这些cs文件是在添加蓝图类或者c++代码时自动生成的,不用鸟它们,只需要知道这些cs文件是UE4的Automake工具需要的就行了,只要有了这些cs文件,我们的UE4工程就能正确编译运行。我这句话里蕴含的意思还有:对于UE4工程的编译,完全不依赖visual studio的project文件,即.vcxproj等文件。也就是说UE4使用自己的AutomationTool来读取cs文件描述的Make规则来进行编译。然而,凡是用visual studio打开的工程,必然需要一个.vcxproj文件,结合刚才讲的,我们就能明确这里visual studio的作用仅仅是方便我们阅读和编写源代码,这里visual studio的方便性还是很巨大的,不是吗!因为vs为阅读编写源代码提供了强大的支持。上一节的最后我没讲UEditor的File菜单里还有一项[Refresh Visual Studio Project],这个选项的作用就是遍历我们的UE4工程目录结构,根据遍历的结果,刷新.vcxproj文件,然后让vs重新加载这个更新的proj文件,这样只要我们往工程目录里增加或删除了代码文件,只需点击一下这个菜单项,在vs里就能反映出这种变化。


3) UnrealAutomationTool

工程的Build是一个很长的过程,里面分成多个阶段,我只关心里面最重要的阶段,就是代码文件的Compile过程。这里先介绍几个名词:UBT(Unreal Build Tool)又叫UnrealAutomationTool,这个工具主要作用就是组织Build流程,直白点说就是按一定顺序调用不同的工具完成整个Build过程。首先调用的肯定是解析各个cs文件的工具,解析的结果就是Build的目标,先Build谁,再Build谁。Build的顺序和目标定下来之后,就要开始真正的Build动作了,也就是Compile代码文件,Link出目标。Compile的第一步是调用UHT(UnrealHeaderTool)工具,这个工具就类似于C++里的预处理器,UHT读取.h文件,解析里面的一些元信息(UE4定义的,比如[UCLASS],[USTRUCT][BlueprintCallable],UPROPERTY,UFUNCTION等等),这些元信息不是C++语言的一部分,C++编译器自然无法识别,所以需要UHT工具先解析这些元信息,生成对应的.generated.h文件,在这个.generated.h文件里的内容就是用合法C++代码模拟的刚才那些元信息。然后原先.h文件里的所有元信息文本都会被删除。这一步完成后,出来的就都是合法的C++的代码文件了,可以直接送给C++预处理器处理,进而编译器,链接器。最终产出Build的目标,完成Build过程。参考一下下图:

(点击图片看大图)

215337bawz3ltwachrvvlh215337jtlvozvoxztplvws

4)还是要说说Blueprint

到这里,对于C++程序员来说,算是掌握了总体的开发流程,知道如何开始,如何结束了。

那么剩下的就是学习如何往工程里添加代码,并学习代码怎么写--学习有哪些api可以用,如何用。这是UE4开发里最重要的一块了,废话,前面说的都只能算是常识,不能算UE4开发。然而只有知道了这些常识之后,我们接下来才可以真正开始学习开发。

首先开宗明义,学习UE4最快速的捷径就是Blueprint,这是我学了1个多月的UE4的最大感触。

在UE4的官方文档里,讲Blueprint时首先就说到:在UE4里,Blueprint支持的功能涵盖了C++支持的几乎所有特性,即BP(Blueprint简写)几乎等价于C++。然而,话锋一转,其又说到,BP有其适用场合,不是所有场合都适合用BP,因为某些场合BP的性能比原生C++代码要慢。

适合用BP的场合:主要就是对性能要求不是特别高的应用场景,比如绝大部分Event的响应等等。然而在我看来,大部分的开发任务不就是Event的响应么,这也就是说BP适用UE4开发的绝大部分场景。而且,众人所说BP太慢,纯粹是无理由的偏见,我承认某些BP可能没有原生手写C++代码快,但并不代表BP性能低。

从开发效率上来看,能用BP的地方尽量用BP所带来的好处实在是不用多说了。尤其对新手来讲,写C++代码都不知道有哪些东西可以调用,更别谈写高效的C++代码了。因此,对新手来说,学习BP是必须的。其最重要的作用,就是让UE4新手能快速的掌握引擎在代码层面提供的功能。

然而,在认识到这一点之后,我并没有立即开始BP的学习,而是先学习了一下如何让C++代码与BP交互,具体的知识少不了要自己去看官方文档,我这里只是列出我的经验。

还要提一下:凡是能放到unreal场景里的东西都是Actor对象,对应C++里的AActor类型。Actor只是一个壳,它提供的所有功能都是由它包含的Component来提供的,不同的Component能提供不同的功能,最后表现出来的就是Actor具有所有这些Component提供的功能。Component的总分类,见链接,这个和Unity中的组件有些类似。我能保证这里的文档真正看懂的话,C++编程的部分从动手方面来讲不存在任何问题了。接下来看BP文档那一章,掌握BP也没有任何悬念,而且是很快乐的过程,不会有任何难度。

215337nduj0u6qotdn6on6

#5)GamePlay

关于游戏模式,这里的文档也需要在看BP前提前阅读一遍 :

215337fee8jelj5xjlj78b

这里也有一张脑图,大家看看:

(点击图片看大图)

220522vfvwvt94ukm7vmvl

2018-04-20 14:43:54 qq_25409413 阅读数 329

一直想做一个属于自己的框架,想着怎么去在Unreal里面使用c#进行代码的编写,所以想着以c#跟c++之前进行通讯来做这个需求

c++工程

首先建立一个c++工程,然后编译成dll动态链接库给c#使用


#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <string.h>


using namespace std;


void OutPut()
{

}


extern "C" _declspec(dllexport) int Sum(int a, int b)
{
printf("Hello World \n");
return a + b;

}

然后编译生成之前将 项目设置-> 配置属性 -> 常规 -> 配置类型 修改为 动态链接库dll


点击编译生成,在项目生成的Debug里面有一个叫Debug有一个叫Test.dll的,复制到c#工程里面的Bin下面的生成exe旁边即可


c#工程

新建一个c#工程,输入一下代码,注意红色代码部分,里面EntryPoint是C++里面函数的名称,编译过后,运行就会发现在c++定义的函数Sum可以在c#里面进行是用了。

namespace UserCPlusPlusCode
{
    class Program
    {
        [DllImport("Test.dll",
            EntryPoint = "Sum",
            CharSet = CharSet.Ansi,
            CallingConvention = CallingConvention.StdCall)]


        public static extern int Sum(int a,int b);



        static void Main(string[] args)
        {
            Console.WriteLine(Sum(1,2));


            Console.ReadLine();
        }
    }
}