我正在与学校伙伴合作开展一个学校项目,但是最近当我运行Unity时,它会冻结,我无法解冻。我已经卸载并重新导入了所有资产,我的组队友也表示他们的Unity没有这个问题。我找不到解决方案。
该项目正在2d完成。我正在测试一些逻辑,而这发生在我身上。我正在做一个健康栏测试,它会自动关闭,并且有一个文本框,然后跟着它包含实际的数字。然后突然第二天,Unity决定退出我,而不是一直跑。
代码:
public static float fillamount = 1f;
public float period = 1f;
public Image image;
private float time;
public float DoesItDecreaseOverTime = -0.1f;
private float tempnum;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
time += Time.deltaTime;
while (fillamount <100 || fillamount > 0)
{
if (time >= period)
{
fillamount += DoesItDecreaseOverTime;
time = 0;
}
}
tempnum = (fillamount * 100);
image.fillAmount = fillamount;
}
}
答案 0 :(得分:0)
经过漫长的挫折,我已经找到了如何在单位冻结时进行调试。我当时正在用树木(不是植被,数据结构)做东西,对我来说,很难确定导致堆栈溢出的位置和原因。堆栈溢出冻结了统一性,因此我看不到任何可以帮助我解决问题的调试。但是现在,我找到了解决方案。
解决方案
因此,我尝试使用System.Diagnostics.Debug.WriteLine
,您应该在Visual Studio的输出窗口中看到它。但这似乎不适用于统一项目。无论如何,我开始思考,提出了这堂课:
using System;
using System.IO;
public class Logger
{
public Logger(string logFilePath)
{
if(!logFilePath.EndsWith(".log"))
logFilePath += ".log";
LogFilePath = logFilePath;
if(!File.Exists(LogFilePath))
File.Create(LogFilePath).Close();
WriteLine("New Session Started");
}
public string LogFilePath { get; private set; }
public void WriteLine(object message)
{
using(StreamWriter writer = new StreamWriter(LogFilePath, true))
writer.WriteLine(DateTime.Now.ToString() + ": " + message.ToString());
}
}
用法是这样的:
Logger logger = new Logger(@"C:\Users\Soogbad\Desktop\MyLog.log");
logger.WriteLine("Hello World");
这将创建一个日志文件,您可以在其中查看所创建的所有日志。完美的作品!即使团结在冻结。
答案 1 :(得分:-1)
尽量避免更新函数中的循环(除非你完全控制循环),这个函数被称为每个帧,所以如果你在这里执行长任务,你可能会遇到framedrop和冻结。
在您的情况下,用If替换while并恢复条件。
如果你有团结专业版,那么你就有了Profiler,它会告诉你什么脚本/函数花费的时间最多。