gpt4 book ai didi

unity3d - 统一: Expensive Method Invocation AND null comparison expensive - solutions (RIDER IDE)?

转载 作者:行者123 更新时间:2023-12-03 23:35:46 47 4
gpt4 key购买 nike

我收到“昂贵的方法调用”和“空值比较昂贵”的警告,我想知道如何解决这些问题。

    void Update()
{
CheckCollision();
}

在发生错误的 CheckCollison 中,如下面的评论所示。
    void CheckCollision()
{
var topHit = Physics2D.OverlapCircle(topCollision.position, 0.2f, playerLayer);

if (topHit != null) // ***<<<< NULL COMPARISON EXPENIVE!***
{
if (topHit.gameObject.CompareTag("Player"))
{
if (!stunned)
{
var rigidBodyTopHit = topHit.gameObject
.GetComponent<Rigidbody2D>(); // ***<<<< EXPENSIVE METHOD INVOCATION!***

rigidBodyTopHit.velocity = new Vector2(rigidBodyTopHit.velocity.x, 7f);
canMove = false;
_myBody.velocity = new Vector2(0,0);
_animator.Play("SnailStunned");
stunned = true;
}
}
}
if (!Physics2D.Raycast(downCollision.position, Vector2.down, 0.1f))
{
ChangeDirection();
}
}

最佳答案

这些不是警告,而是信息亮点。它们旨在通知您,在性能敏感的上下文(Update 方法)内,您正在做一些已知昂贵的事情,并且您可以在必要时重新评估您的方法。

“如果需要”位很重要——只有您可以决定此 Update 的性能特征是否方法适合您的游戏/应用程序。如果这发生在一个很少使用的选项屏幕中的单个游戏对象中,那么它很可能不是问题。但如果它是在一个被多次实例化并用于核心游戏玩法的对象中,那么这些昂贵的方法可能会增加并降低性能(或影响电池生命周期)。

一般来说,编写没有任何这些信息亮点的代码可能会非常困难(而且没有必要),但如果你发现你有很多代码有很多亮点,那么这是一个很好的迹象你应该分析一下,看看你对结果是否满意。

您可以通过使用 Alt+Enter、展开检查选项项目并选择“为什么 Rider/ReSharper 建议这样做?”来了解有关这些亮点的更多信息。元素。这将打开一个网页,其中包含有关该特定亮点的更多详细信息。

This page also has an overview and more details ,也可以在首选项 | 中禁用检查。编辑 |检查设置 |检查严重性 | C# 设置页面(在 Unity | 性能指标下)。

查看代码示例中标记的项目,相等比较的成本很高,因为它还检查底层引擎对象是否已被破坏,这意味着转换为本地代码。如果您知道该对象尚未被销毁(并且看到它是从 Unity API 返回的,我认为这是一个安全的选择),那么您可以将其替换为:

if (!Object.ReferenceEquals(topHit, null)) {
// …
}

但请记住,在您的用例中,这是一个可能不必要的微优化。

(使用 bool 调用隐式 if (!topHit) 运算符与 if (topHit != null)both operators 调用私有(private) Object.CompareBaseObjects method 完全相同)

第二项是调用 GetComponent ,这是众所周知的昂贵,但在这种情况下是必要的。没关系 - 这只是提供信息,而不是告诉你你做错了什么。

关于unity3d - 统一: Expensive Method Invocation AND null comparison expensive - solutions (RIDER IDE)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849324/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com