gpt4 book ai didi

c# - 语句不会执行,因为 CPU 同时执行

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:05 25 4
gpt4 key购买 nike

我有 2 个类:static TimeManagerball , 其中ball依赖于 TimeManager .

TimeManager.cs:

void FixedUpdate()
{
if (isMoving) Timer();
else
{
//isMoving = true; //<- When I uncomment this, the problem occurs
}

}

void Timer()
{
currentTimeMove += Time.deltaTime * TimeDeductSpeed;

if (currentTimeMove >= timeToMove)
{
isMoving = false;
currentTimeMove = 0;
perc = 0;
}
else perc = currentTimeMove / timeToMove;
}

Ball.cs:

void FixedUpdate() => MovePerBlock();

void MovePerBlock()
{
if (TimeManager.ins.isMoving)
transform.localPosition = Vector3.Lerp(startPosition, endPosition, TimeManager.ins.perc);
else //<- This statement does not execute when TimeManager.isMoving = true is uncommented
{
startPosition = transform.localPosition;
endPosition = startPosition + transform.forward;
}
}

每个ball上的运动实例将取决于 TimeManager .他们一起移动和停止。如果我等到它们停止移动并手动设置,脚本工作正常 isMoving检查员甚至重复同样的 Action 。

当我取消注释“isMoving = true”时,else ball.cs 中的声明并不总是执行。我相信这是因为执行时间很快。

最佳答案

查看您的方法可以解释您的问题。

void FixedUpdate()
{
if (isMoving) Timer();
else // this is same as else if(isMoving == false)
{
//isMoving = true; //<- When I uncomment this, the problem occurs
}
}

当 isMoving 为真时调用 Timer 方法。在 Timer 中,您执行一些操作,在某个时候,Timer 会在操作完全完成时将 isMoving 设置为 false。

但下一帧,Timer 方法将 isMoving 设置为 false(else 语句),并在 else 语句中将 isMoving 设置为 true。所以就在下一帧,你又在做定时器 Action 。

结果,只有一帧没有做 Action 。最后,你似乎只看到项目在移动,从未停止。

isMoving 需要通过另一个条件来设置,而不是本身为 false。

编辑:正如您描述的预期效果,我不明白您为什么要使用这种逻辑。看来你的球注定要一直移动,那我不明白你为什么需要重置。据我所知,您需要创建一个锯齿波。

public float amplitude = 2f;
public float period = 2f;

void Update(){
float tOverP = Time.time / period;
float result = (tOverP - Mathf.Floor(tOverP)) * amplitude;
Debug.Log (result);
}

在这个过程中,您不需要重置任何东西,您可以继续进行下去。 perc 变量是结果变量。

振幅是您想要运动的幅度。使用此设置,它从 0 变为 2。周期变量定义从 0 到振幅的时间。因此,使用此设置,在 2 秒内从 0 到 2。

关于c# - 语句不会执行,因为 CPU 同时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569230/

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