UE4 开发从入门到入土
UE4 开发从入门到入土 这位不是上次那个顶什么99行反射核心的那位大哥吗?应该用那个99行反射替换一下UE的反射,是吧?按你的原话你就可以don’t pay what you don’t want,因为我感觉你好像want nothing? 可以用VSCode+EmmyLua插件,然后建个工作区把Content/Script目录和UnLua\Intermediate\IntelliSense目录加进来。代码提示没问题,断点可以断但是查看值还有点问题 先点赞,再评论。如作者所述,UE4确实有各种问题,但是很多东西真的自己深入去尝试实现的时候才发现,UE4的方案可能还真是最优解。
举几个例子:
1 作者吐槽“反射采用保守式的标记,必须手写 UPROPERTY 而不是 UNOREFLECTION”。如果自己去实现C++的反射,怎么才能像UE4一样,一个方案支持枚举,结构体,类,动态类型发射,C++的命名空间,同时兼顾GC这么多特性呢?目前好像UE4这个方案是最优解了。如果作者有更强更具美感的方案,求告知感激不尽(因为我最近也在改进我们的反射方案)。
2 作者吐槽"UE4 的 Undo/Redo 栈是全局的而不是 per document 的",这个不敢苟同。因为UE4是基于包的对象管理,一个包里的对象可以引用不同包里的对象,修改对象的时候可能会影响好几包,所以不是per document的(per package)。UE4的基于包的对象管理不好吗?我觉得这个理念是很先进的。
当然作者也有很多吐槽是吐在了点上,比如:
1 “ABP 动画是硬引用,和骨骼和动画绑定,无法开放成参数(类似于 Material 和 Material Instance 那种参数),导致状态机复用困难”,这个确实比Unity的弱,应该像材质一样有模板和实例的概念。
UE4有很多优点和先进理念,也有很多缺点。我个人觉得UE4的最大问题是模块之间的耦合太重了,应该尽量提成纯虚接口来,减少模块之间的耦合。
文章是好文章,给作者点赞。 老实说UE的Shader排列组合容易爆炸我还真没想到什么好方法,这个问题恐怕大部分引擎在开发的时候都会遇到,引擎本身渲染特性多,材质各种分支加上Instance使用不合理很容易失控。目前我只看到DOOM是改成用Uniform branch的方式避免大量的shader枚举组合(本质上也是枚举,只不过都在一个巨大的UberShader里,他们游戏的shader数目可以降到100多)。我有想过如果GPU能支持真正的shader模块动态链接的话情况会得到改善,这样材质和公用的shading模块可以分开独立编译而不是MxN的耦合导致shader数量爆炸。 非常有用,哈哈。看了完全不想用UE4 资 源 共 产 双 发 齐 射 害怕 毁 灭 战 士