每当我运行游戏时,它都会冻结,但并非没有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会崩溃。
答案 0 :(得分:0)
我相信团结会在第一帧之后而不是之前开始捕捉击键,请尝试在FixedUpdate函数中将fstart()移到第一次运行的布尔值后面
哦,这将在每次执行框架时将整个程序挂起.....
答案 1 :(得分:0)
Unity为您照顾while(true)
。 Unity的while(true)
调用您的FixedUpdate
,您只需要填写它即可。
Unity每帧仅捕获一次击键,因此Input.GetKey(KeyCode.E)
将始终返回相同的值。由于您的while(true)是一个无限循环,因此Unity崩溃了。
答案 2 :(得分:0)
代码崩溃是因为这里有无限循环:
while (true)
{
}
它永远不会退出循环,所以什么也不会发生。只需将代码放入Update()方法中,引擎就会在每一帧中对其进行调用,