Unity 因此不断崩溃

问题描述 投票:0回答:1

我基本上正在编写一个 2D 冲刺机制,用于检查玩家已经行驶了多远,并在冲刺前和当前坐标之间的差异足够大时结束距离。然而,似乎没有办法直接将向量转换为我可以实际用于数学的浮点数,这就是问题所在。下面的代码对 Unity 进行了如此多的软锁,以至于我需要任务管理器才能将其关闭。

your text
while ((-ogXPos + (transform.position.x)) < 20f && (-ogXPos + (transform.position.x)) >
your text
-20f)
your text
{
your text
破折号=真;
your text
}

导致问题的具体部分是 While 循环及其后面的方程。有人可以帮我解决这个问题吗?

我试图在冲入变量之前保存玩家的 X 位置,然后每帧将其与当前位置进行比较。如果差值大于 20f,则冲刺将结束;如果玩家的 x 值为负,则冲刺将小于 -20f。

c# unity-game-engine 2d
1个回答
0
投票

您似乎遇到了由于无限循环而导致的性能问题。您可以通过使用单个条件来确定玩家是否已移动足够远以结束冲刺,从而简化逻辑并避免 while 循环。以下是重写代码的方法:

// A variable to store the original X position before dashing
private float originalXPos;

// Boolean for if the player is dashing
private bool dashing = false;

// Define a constant limit for the distance traveled during the dash
private const float dashDistanceThreshold = 20f;

// Call this method to start the dash
public void StartDash()
{
    // Store the original X position before dashing
    originalXPos = transform.position.x;

    // Set dashing bool to true
    dashing = true;
}

void Update()
{
    // Check if the player is dashing right now
    if (dashing)
    {
        // Calculate the distance traveled since the dash started
        float distanceTraveled = Mathf.Abs(transform.position.x - originalXPos);

        // Check if the distance traveled exceeds the threshold
        if (distanceTraveled >= dashDistanceThreshold)
        {
            // End the dash
            dashing = false;
            // Additional logic to end the dash if needed
        }
    }
}

此代码计算自冲刺开始以来行驶的距离,并将其与阈值进行比较,以确定何时结束冲刺。这种方法应该更有效,并避免您在 while 循环中遇到的性能问题,如果我理解错误,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.