版权声明:本文为CSDN博主「Papals」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
Interfaces 优先于 Cast
通常,我们将 Actor 或组件强制转换为能够访问其方法所需的 Class 类型,但是强制转换不仅在性能方面比 Interfaces 昂贵,而且实现起来也很烦人。尝试一下 Interfaces。
使用组件共享行为
很多时候我们过多地依赖继承,以便在参与者之间共享行为。继承不一定全是错误的,但是比如游戏有两种类型的 施加伤害 的 Actor:炮塔和角色。在这种情况下,您可以创建一个名为 Damager 的组件,并将其添加到两个 Actor 中。两个 Actor 都能够施加伤害,而不必担心他们是谁继承的。
隐藏对象的不可自定义属性
当 Actor 或 Components 具有变量时,您可以将它们从 “详细信息” 窗格中隐藏。只需单击要隐藏的变量,然后查找它们公开的 “Advanced Display” 属性并进行检查。之后,调整该 Actor 或 Component 或任何其他对象时,您将不再在 “详细信息” 窗格中看到此变量。
自动对齐连线
您创建了一个很棒的蓝图,里面到处都是节点。但是由于连线,它看起来像一团糟。快速改善这种情况的一件事是选择两个连接的节点并按 “Q”。
- 按 Q 前:
- 按 Q 后:
避免将持久状态存储在组件(Component)中
这更多地与有存档的游戏有关。无论使用哪种插件,还是想出自己的保存方法/解决方案,持久存储组件的变量都可能成为负担,因为大多数时候您必须在加载游戏之前 重新创建组件并重新添加保存的组件 。相反,应该将持久化变量(如HP、Money 等)存储在 Actors 中。
尽可能使用 Sphere 而不是 Capsule 和 Box
您有 99% 的时间希望在 Actor 中使用碰撞,而不必将它们设为 Capsule 或者 Box。请改用 Sphere ,因为 Sphere 的物理计算最简单。
使用数学表达式来描述数学公式
你可以像在论文中描述的那样描述它们!只需右键单击 “蓝图” 的网格,然后键入“添加数学表达式” 然后单击显示的选项。然后,像在纸上一样写下公式,并连接点!
使用标签 (Tags)
UE4 为游戏中几乎每个对象都提供了一个被低估的内置功能,称为 “Tags”。只需转到 “对象详细信息/默认值” 并搜索 “标签” ,就会显示一个数组。单击 “+” 按钮并开始对其进行标记。这将 很清楚的区分所有物体属性 。当然,大型项目手动输入这些几乎是噩梦,小范围使用吧。
不要滥用 Event Tick
我知道这是陈词滥调,但这是严肃的事情。Event Tick 是大多数问题的懒惰解决方案。假设您想在角色跳跃时做点什么。与其在 Event Tick 中放置 if 以检查变量 Is Jumping 是否为真,不如在按下按钮进行跳跃时创建一个名为 OnCharacterJumpStart(或任何您喜欢的事件)的事件分派器。然后,在对象处对跳转做一些事情。
你可能需要 SetTimerByEvent 而不是 Event Tick
Event Tick 在 CPU 的每一帧上运行。如果你需要以大于 0.01s 的时间间隔运行某项内容,则最好使用 SetTimerByEvent。
在 Replicated 事件(或 RPC)中传递 Actor 是可行的
因为没办法传递一个 Actor 指针到服务器,Actor 通过 NetUID 在 RPC 中传输,只有 4 个字节。然后,使用 NetPackageMap 将 NetUID 转换为指针,然后将其传递给对象。整个 Actor 仅发送一次。Actor 的各个属性通过该 Actor 的 ActorChannel 更新。但是其他的指针,你最好想清楚。
使用 SetGlobalTimeDilation
你是否知道在玩游戏时死亡或杀死某物时一切都会慢动作是如何做到的? 好吧,这是您执行此操作的方法之一。
经常打包游戏
“我希望我早点知道” 这件事。你在打包时可能会面临噩梦,这是构建时在开发时看不到的一大堆错误。您等待的打包时间越长,发生错误的机会就越大。因此,请经常打包,经常解决问题,并保持整洁和安全。
在蓝图里查找
在蓝图里使用 Ctrl + Shift + F 查找所需内容。