|
by --牧白兄
Unity 程序员的困惑
本教程适合的人群:原先的Unity的开发者,c#的程序员
1、先从c++入手,不要从蓝图入手,蓝图是给策划和美术用的。本身是unity程序员出身的,从c++入手更容易。
困难 :国内的教程大部分都是蓝图的,很少一部分是c++.
2、Unity常用的两个类,gameobject,monobehaviour。Unity的组件打天下,可以说没有框架,没有那么多的基类,系统类,轻继承,重组件,更自由,更灵活,更易入门。所有的可在场景中显示的都是个gameobject,不管是房子还是角色,加功能,就加组件,角色的gameobject上加个animator组件就能有动画,自己继承mono,然后写个CharacterController 添加到角色gameobject上,就能通过键盘鼠标控制角色移动,
相对来说UE的设计思想就是重继承,也重组件,基类系统类比较多。更像是一个框架,需要记忆理解的类更多,比如GameMode,GameState,PlayerState,Actor,Pawn,PlayerController,每个类负责的功能不一样,对于从Unity程序员来说,光记住这些类就很头疼,还得转变思想,从一切都是自己来,转变成用引擎提供的基类。
需要注意的是:Unity的GameObject 对应UE的Actor类,都是在游戏场景中的可见物体,都有位置信息,都可以加组件。unity中gameobject是不能被继承的,加功能只能通过加组件的方式。而UE4中actor是可以被继承的,通过子类扩展加功能,当然也可也通过加component的方式来添加功能。
3、c++及其不方便的编译方式,c++比c#效率高,但是相应的,比c#更复杂,c#一个类就是一个.cs文件,函数的声明和定义是在一起的,而c++则分成了.h和.cpp文件,声明和定义分离。还有比较恶心的宏定义,宏比函数更高效,但是可读性太差,看着像天书,UE里面使用了太多的宏。
建议:从一个简单的demo入手,不要上来就做很复杂的东西。 跳一跳的小游戏。
4、资源管理方式,unity是prefab,也就是资源加代码,ue是blueprint,是代码加资源,其实是一个意思,都可以认为是有功能的模型,都是一种资源,可以被加载并且实例化多次的。差别就是blueprint是需要继承一个c++类的。
Unity 的 prefab 和虚幻 4 的蓝图类都可以在游戏中实例化。不过,Unity 的 prefab 在相互嵌套时会产生比较复杂的状况,从而限制其可扩展性。
在虚幻 4 中,你可以让新建的蓝图类继承某个现有的蓝图类,然后通过新的属性、组件和可视化脚本功能来增强它。
比如,在虚幻 4 中,你可以创建一个叫做 Monster 的蓝图类,用它实现基本的怪物功能,比如追击人类。然后你可以再创建一个蓝图类来扩展它,比如 Dragon(会喷火的怪物),或者 Grue(天黑后会吃人的怪物),以及其他 8 种类型。这些 Monster 子类都继承了 Monster 父类的功能,并在此基础上获得了新的能力。
在 Unity 中,你需要创建很多不同的 GameObject prefab 才能实现这点:你要为 Dragon 创建一个prefab,为 Grue 创建一个prefab,诸如此类。假设你希望为所有怪物都添加某个功能,比如添加一个 Speak 组件来让它们说话,在 Unity 中你需要更新所有 10 个 prefab,把功能拷贝粘贴到每个 prefab 中。
在虚幻 4 中,你只需简单地修改 Monster 的蓝图类,为它新增 Speak 的能力,然后就OK了!Dragon,Grue 以及其他 8 种 Monster 的子类都会自动继承这个说话的新功能,并不需要你去一一修改。
创建方式的区别:1、预制体拖拽产生 2、蓝图不能
5、我们常说unity是没有框架的,学习成本低,易于入门,但是入门以后,想写更高级的功能,就得自己搭框架,自己写各种管理类。或者去商店找第三方开发的框架,比如ET。所以叫入门容易,精通困难。
UE是自带框架的,初学成本高,入门困难,因为需要记忆和理解好多UE自带的类和函数。但是入门以后,因为自带框架,写高级功能就没那么困难。
假如你能利用一些基础类,并且遵循特定规范,你就能很容易获得一些很赞的功能,否则你自己实现可能要花费很多时间,而且也很困难,或者很难改造
6、 Transform 对应 Scene Component,unity的GameObect自带Transform,不能移除,而Actor可以通过添加Scene Component来记录物体的坐标,也可以不添加Scene Component。
7、 Pawn Character Controller Player Controller是什么?
Pawn - Actor 的一种类型,用于表现一个可供控制的游戏对象,比如玩家操控的角色。玩家或者 AI 通常通过 Controller 来控制并移动 Pawn。 Character - 一种特殊类型的 Pawn,用于双足类型的角色,并具备一些复杂的功能。 Controller - 占有并控制一个 Pawn。通过将 Pawn 和 Controller 的分离,我们可以编写 AI Controller,用于控制 Pawn,并且和玩家控制 Pawn 采用相同的接口。 Player Controller - 一个更为特殊的 Controller,用于从玩家的手柄、触控板、鼠标/键盘获得输入信息,并将这些信息驱动玩家所控制的 Pawn 或者 Character 的行为。
8 、Monobehaviour和Actor 、ActorComponent
9、创建对象
GameObject obj=new GameObject();
obj.AddComponent();
GameObject obj2=Instantiate(prefab) as GameObject;
UMyObject * obj1=NewObject();
10、类型转换
11、销毁
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|