为什么C#代码为什么会不断使Unity崩溃? (我是Unity和C#的初学者)

时间:2019-02-03 22:30:20

标签: c# unity3d crash

每当我运行游戏时,它都会冻结,但并非没有C#脚本。

我已经尝试过更改代码,并且它可以在.NET中的Unity外部运行(对某些功能进行了一些调整),但是当它在Unity中时会崩溃。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Throw : MonoBehaviour
{
    public Rigidbody rb;
    string final = "final:";
    public float force = 1;
    public float accuracy = 0;

    void incto(float amount)
    {
        while (force < amount)
        {
            Debug.Log(force);
            force++;
        }
    }

    void decto(float amount)
    {
        while (force > amount)
        {
            Debug.Log(force);
            force--;
        }
    }

    void fstart()
    {
        while (true)
        {
            force = 1;
            incto(200);
            decto(1);
            if(Input.GetKey(KeyCode.E))
            {

                Debug.Log(final + force);
                break;

            }


        }
    }

    // Start is called before the first frame update
    void Start()
    {
        fstart();

    }

    // Update is called once per frame
    void FixedUpdate()
    {
        Debug.Log(force);
    }
}

它应该减小并增大力值,然后在按E时停止,但是Unity会崩溃。

3 个答案:

答案 0 :(得分:0)

我相信团结会在第一帧之后而不是之前开始捕捉击键,请尝试在FixedUpdate函数中将fstart()移到第一次运行的布尔值后面

哦,这将在每次执行框架时将整个程序挂起.....

答案 1 :(得分:0)

Unity为您照顾while(true)。 Unity的while(true)调用您的FixedUpdate,您只需要填写它即可。

Unity每帧仅捕获一次击键,因此Input.GetKey(KeyCode.E)将始终返回相同的值。由于您的while(true)是一个无限循环,因此Unity崩溃了。

更多信息:https://docs.unity3d.com/Manual/ExecutionOrder.html

答案 2 :(得分:0)

代码崩溃是因为这里有无限循环:

    while (true)
    {

    }

它永远不会退出循环,所以什么也不会发生。只需将代码放入Update()方法中,引擎就会在每一帧中对其进行调用,