我需要提高游戏中的水位。但是,在播放了一段时间之后,应该播放的水的声音不会停止。
我在控制台中输出的输出:
WATERLEVEL NOT AT TARGET
Waterlevel localpos: (1.0, -432.0, -17.4)
target pos: (1.0, -432.0, -17.4)
WATERLEVEL NOT AT TARGET
...(same as previous)
这是我的方法,它向目标移动并在河流处于目标位置时停止声音
IEnumerator IncreaseWaterLevelCoroutine()
{
//determine target
Vector3 target = waterLevel.transform.localPosition;
target.y += waterStep;
//prepare
bool notAtPos = true;
audioRivierOversteken.Play();
//start raising water each frame
while (notAtPos)
{
//raise water level
float speed = AnimSpeed * Time.deltaTime;
waterLevel.transform.localPosition = Vector3.MoveTowards(waterLevel.transform.localPosition, target, speed);
//stop if the waterlevel is at target position
if (waterLevel.transform.localPosition == target)
{
Debug.Log("waterlevel at target");
StartCoroutine(StopRivierSound(0.5f));
notAtPos = false;
}
else
{
Debug.Log("WATERLEVEL NOT AT TARGET");
Debug.Log("Waterlevel localpos: " + waterLevel.transform.localPosition.ToString());
Debug.Log("target pos: " + target.ToString());
}
yield return null;
}
}
答案 0 :(得分:0)
不要相信Vector的控制台输出。 Unity的Vector类中重写的ToString()
方法将包含的浮点数显式舍入为精度的单个十进制数字。
例如,此代码:
Vector3 v1 = new Vector3(0.1f, 0, 0);
Vector3 v2 = new Vector3(0.12f, 0, 0);
Debug.Log(v1);
Debug.Log(v2);
Debug.Log(v1 == v2);
打印:
(0.1, 0, 0)
(0.1, 0, 0)
false
然而,(0.10001, 0, 0)
的向量将等同于(v1
),即使0.1
和0.10001
在直接比较时不等于相等。