我基本上正在编写一个 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。
您似乎遇到了由于无限循环而导致的性能问题。您可以通过使用单个条件来确定玩家是否已移动足够远以结束冲刺,从而简化逻辑并避免 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 循环中遇到的性能问题,如果我理解错误,请告诉我。