While循环冻结了游戏-还有其他可以旋转物体的东西吗? - c#

我正在尝试为TBS游戏创建旋转光源,该光源将在回合结束时旋转。为此,我使用了事件。我有两个脚本,其中一个推进了转弯:

public delegate void Time(int t);
public static event Time Time_Change;
public int t = 1;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Return))
    {
        t = t + 1;
        if (t > 8) { t = 1; }
        Debug.Log(t);
        if (Time_Change != null)
        {
            Time_Change(t);
        }
    }

(有八个昼/夜相位),一个接收信号并将其移动的光连接到:

public int angle = 85;

void Start () {
    Time_Controller.Time_Change += Move_Lights;
}


void Move_Lights(int t)
{

//phase detection, set angle variable

if (t % 2 == 0)
    {    
        //----------------------------------------       
        while (transform.eulerAngles.x != angle)
        {
            transform.Rotate(Vector3.right * Time.deltaTime, Space.World);
        }
        //----------------------------------------
    }
}

问题是,当我运行游戏并按Enter键时,所有内容都会冻结,并且关闭Unity的唯一方法是通过任务管理器(这也显示了冻结游戏时Unity的CPU使用率激增)。通过消除过程,我(如果没有它,一切都很好)将故障线路跟踪到

while (transform.eulerAngles.x != angle)
{
    transform.Rotate(Vector3.right * Time.deltaTime, Space.World);
}

如上所述。我该怎么办?我已经尝试了各种旋转光源的方法,但是还没有任何方法可以防止崩溃。

提前致谢。

参考方案

您的游戏死机是因为它与您的不平等陷入无限循环。仅当您的转换的浮点值等于您的angle时,while循环才会退出,由于浮点的精度,它几乎永远不会为真。当对浮点数使用等于时,您应该在比较中设置公差。如果您正在寻找一个精确的角度,那么这当然不是您要使用的方法。

// while the transforms angle is not within .5f of the desired...
while (Mathf.abs(transform.eulerAngles.x-angle) > .5f)
{
    transform.Rotate(Vector3.right * Time.deltaTime, Space.World);
    yield return null;
}

PHP set_time_limit无效 - php

我有一个非常痛苦的慢脚本,该脚本从MySQL获取大量数据并从中创建大量报告,并最终以应用程序/强制下载的形式提供给用户。长话短说,在生产服务器上,它会在大约30秒后终止(相当稳定),然后吐出一个空文件。在开发服务器上,它可以正常工作,但是执行时间却要长得多-大约90秒。为了安全起见,我将php.ini文件设置为max_execution_time = 200…

Java日期时间为ISO_DATE_TIME - java

我想在Java中DateTimeFormatter ISO_DATE_TIME的末尾添加一个Z,而不是硬编码String sample = "2018-05-11T13:35:11Z"; DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T&#…

TypeError:_transform()接受2个位置参数,但给出了3个 - python

我了解了CaesarCipher:In [90]: !cat caesar_cipher.py class CaesarCipher: """Construct Caesar cipher using given integer shift for rotation.""" def __init__…

Spring Boot:java.time.Duration的默认序列化从字符串更改为数字 - java

我们最近从Spring Boot 2.1.9升级到2.2.1,这导致我们的测试失败。调查导致结果,默认情况下java.time.Duration类型现在序列化为不同的序列。现在,我们将得到"PT15M",而不是在JSON消息中包含字符串"900.0"。 POJO定义如下所示@JsonProperty(required …

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制