如何成为一名更好的 Unity 程序员

随着 AI 和机器学习的兴起,我们很容易认为未来将不再需要程序员。然而,人工智能可能需要很长时间才能解释更复杂的任务,例如抽象、优化、互连等。

因此,在Unity中完善你的编程知识永远不会太晚,让自己不仅成为一个更高效的程序员,而且到时候能够监督和指导别人写的代码朝着正确的方向。

1. 过早的优化并不总是万恶之源

在原型化某些东西时,将过早的优化视为不必要的步骤是一个常见的主题,但是,情况不应该总是如此,特别是在添加小东西时,您肯定知道这些小东西对性能有很大的影响,并且什么时候该这样做进行真正的优化,通过处理较小的事情已经节省了时间。让我们以 gameObject.name 为例:

using UnityEngine;

public class ObjectNameScript : MonoBehaviour
{
    public string objectName;

    void Update()
    {
        objectName = gameObject.name;
		Debug.Log(objectName);
    }
}

虽然使用 gameObject.name 可能看起来无害,但正如我们在“Unity 使用 Profiler 优化您的游戏”帖子中发现的那样,获取对象的名称会分配相当多的内存,这会通过调用它来加剧问题每一帧。因此,我们可以立即将该赋值移至 Start 函数(除非对象名称经常更改,在这种情况下,完全跳过使用名称并使用变量会更有效)。

using UnityEngine;

public class ObjectNameScript : MonoBehaviour
{
    public string objectName;

    void Start()
    {
        objectName = gameObject.name;
    }

    void Update()
    {
        Debug.Log(objectName);
    }
}

2. 编写更短的代码

编写较短的代码总是可以节省时间,使其在将来更具可读性和更易于维护。

有很多方法可以编写较短的代码,对于 Unity 来说,可以使用 C# 代码。例如,通过使用 '?' 符号简化 if/else 语句:

int numA = 10;
int numB = 5;
int result;
if (numA > numB) {
    result = numA;
} else {
    result = numB;
}
Debug.Log(result);

相同的代码可以缩短为:

int numA = 10;
int numB = 5;
int result = (numA > numB) ? numA : numB;
Debug.Log(result);

缩短代码的另一种方法是将重复的代码放入其自己的函数中,然后使用该函数代替。

3. 先写代码,再提问

虽然规划是任何项目的重要组成部分,但如果它是一个原型,或者如果这个想法尚未确定,那么尽快开始编码很重要,因为无论规划的数量有多少,一旦你达到了目标,就必须尽快开始编码。在工作中,你总会发现一些可以做得更好/更高效的事情,或者有些想法在实践中不如其他想法好,反之亦然。

总而言之,很少有什么事情可以像开始工作并开始编写代码那样让您更好地编程。

4. 进行任何更改之前进行游戏测试

当您拥有可玩的演示时,尽快开始测试它以找出可以改进的地方至关重要,因为通常仅通过查看代码可能并不明显。

一旦您掌握了游戏测试和收集反馈的艺术,您将通过确切地知道在哪里改进代码而成为一名更高效的程序员。

Unity 当然一路上提供了许多有用的工具,例如控制台(用于发现警告和错误),用于调试性能的 Profiler 以及用于监视性能的其余界面(场景、层次结构、检查器等)游戏/项目的流程)。

5. 优化是一个渐进的过程

我们都同意,游戏性能可以决定游戏的成败,并且是成功发布的基础支柱之一。但游戏的表现只能通过在各种场景和条件下进行游戏测试来评估,以从普通玩家的角度模拟游戏。

我们已经讨论了许多如何调试、优化和查找游戏代码瓶颈的方法。

要了解有关如何优化桌面或移动游戏的更多信息,您可以查看以下帖子:

  1. Unity 使用 Profiler 优化您的游戏
  2. 提高移动游戏的性能 Unity 3D
  3. Unity 优化技巧

如果您对如何在 Unity 中成为更好的程序员有自己的建议,请随时在评论中发布。

推荐文章
在 Unity 代码中使用数组和列表
受 Poppy Playtime 启发,在 Unity 中创建 GrabPack
在 Unity 中创建子弹时间效果
在 Unity 中创建交互式对象
在 Unity 中实现动力学交互
在 Unity 中使用特定钥匙打开抽屉和橱柜
Unity 中没有库存的分拣系统