Unity停止使用字符串生成器编辑代码



我正在做一个从Unity中掉落球的实验。当只有一个时,脚本没有问题。是下降了。但是当我落下100个球时, Unity一直在停止。

//Debug.Log(transform.position.ToString());   
Debug.Log(dir);
filepath = dir + num + transform.position.ToString();
Debug.Log(filepath);
File.Create(filepath);
}

一开始,我使用上面的脚本操作Unity。

FileStream fs = File.Create(filepath);                     
fs.Dispose();

同样,我也像上面那样改变了,然而,仍然统一冻结。

最后,根据这里的一些建议,我写了一个像这样的新脚本:

//Debug.Log(transform.position.ToString());   
Debug.Log(dir);
filepath = dir + num + transform.position;
Debug.Log(filepath);
System.IO.File.WriteAllText(filepath, name.ToString());
}

然而,Unity在开始运行一段时间后再次停止。所以这不再是剧本的问题了吗?我不认为这是RAM的问题,因为我的台式机使用的是16GB RAM。我继续修改代码,但它似乎仍然停止,所以我想得到正确的代码或解决方案。我不需要有多个文件。它可以是一个单独的文件,所以我希望它能工作。

你的实现是错误的。我告诉你用OnDisable()OnApplicationQuit()方法保存到文件,而不是每次写的时候。

你可以这样做-

public class Logger : MonoBehaviour
{
public string logFilePath = "C:/log.txt";
public StringBuilder sb;
public static Logger self;
void Awake()
{
if (self == null)
self = this;
else
Destroy(gameObject);
}
void Start()
{
sb = new StringBuilder();
}
// it will be called when game quits 
// for editor, when playmode stops
void OnApplicationQuit()
{
// save file 
System.IO.File.WriteAllText(logFilePath, sb.ToString());
}
}

这是你的类,将附加到每个球-

public class YourClassName : MonoBehaviour
{
void Update()
{
if (Input.GetKeyUp("space"))
{
// gameObject name
string goName = this.gameObject.ToString();
// expected output - AObject (1) : (1.0, 2.0, 3.0) 
// Later if you ever need, you can read all lines and split by ':' 
Logger.self?.sb.Append($"{goName} : {transform.position.ToString()}n");
}
}
}

希望现在可以了。

相关内容

  • 没有找到相关文章

最新更新