Guardar debug.log en archivo de texto con Unity

Ekiarmi - 01/10/2021 22:26
Hola, me gustaría guardar la información que obtengo en el debug.log en Unity mediante este simple script en un archivo de texto, en una ruta personalizada (c:/blabla...). He tratado de encontrar información por internet pero todavía estoy verde.

[CODE]public void ReadStringInput(string s){
input=s;
Debug.Log(input);
}[/CODE]

Necesito guardarlos de manera permanente para operar con ellos posteriormente en otras escenas. Si hay algún alma caritativa se lo agradeceré mucho.
3dpoder - 02/10/2021 00:25
Hola, ¿has probado a mirar en el directorio AppData? Esas cosas suelen estar ahí. Mira a ver si lo encuentras.

La ruta tipo sería: C:\Users\username\AppData\Local\Unity\Editor\debug.log

Pero claro, si estás en un PC donde haya varios usuarios creados y no lo encuentras, mira a ver desde que usuario se está ejecutando el Unity.

O también puedes usar el buscador de archivos y buscar por "debug.log" te saldrán muchos, pero si no lo encuentras de otra forma, te puede servir.

Ya dirás, un saludo amigo.
Ekiarmi - 02/10/2021 22:06
Hola gracias por responder. Pues no me aparece el debug.log en la carpeta que debería estar. Tampoco haciendo la búsqueda en el buscador de archivos.

De todas formas lo que trato de conseguir es que Unity me guarde el resultado que aparece en debug.log en un archivo ubicado en la carpeta que yo le indique, para que queden ahí y pueda llamarlos y cargarlos en otras escenas.

He probado con prefabs y no consigo tampoco almacenar datos, y no quiero liarme con JSON, pensaba que sería lo más fácil y debía haber alguna forma de guardar el debug.log en no se, c://etc//etc... por ejemplo.

El caso que hace años usé Unity y me suena que hice algo parecido, pero ya ni me acuerdo como se hacía.
Ekiarmi - 05/10/2021 19:39
[QUOTE=3dpoder;1004308]Hola, ¿has probado a mirar en el directorio AppData? Esas cosas suelen estar ahí. Mira a ver si lo encuentras.

La ruta tipo sería: C:\Users\username\AppData\Local\Unity\Editor\debug.log

Pero claro, si estás en un PC donde haya varios usuarios creados y no lo encuentras, mira a ver desde que usuario se está ejecutando el Unity.

O también puedes usar el buscador de archivos y buscar por "debug.log" te saldrán muchos, pero si no lo encuentras de otra forma, te puede servir.

Ya dirás, un saludo amigo.[/QUOTE]

Disculpa, realicé mal la respuesta y no te habrá llegado la alerta. Me interesa guardar en una ruta personalizada los datos del debug. Mi idea es crear varios archivos e ir llamándolos desde otras escenas para operar con los guardados. Prefiero crear la ruta dentro de una de las carpetas de la aplicación, de esta forma si exporto para Android, por ejemplo, no tendré que readaptar las rutas. Un saludo!
3dpoder - 06/10/2021 11:18
[QUOTE=Ekiarmi;1004396]Disculpa, realicé mal la respuesta y no te habrá llegado la alerta. Me interesa guardar en una ruta personalizada los datos del debug. Mi idea es crear varios archivos e ir llamándolos desde otras escenas para operar con los guardados. Prefiero crear la ruta dentro de una de las carpetas de la aplicación, de esta forma si exporto para Android, por ejemplo, no tendré que readaptar las rutas. Un saludo![/QUOTE]

Eso ya es más complicado, hasta ahí no llego, pero creo que tu solución puede ser la que han publicado en el foro de Unity. Echa un vistazo a ver si te puede servir, parece que lo que quieres hacer no se puede hacer directamente desde el programa. Un usuario del foro ha publicado un código que dice que le funciona.

Enlace al código en el foro de Unity.

[CODE]
using UnityEngine;

public class LogAnywhere : MonoBehaviour
{
string filename = "";
void OnEnable() { Application.logMessageReceived += Log; }
void OnDisable() { Application.logMessageReceived -= Log; }

public void Log(string logString, string stackTrace, LogType type)
{
if (filename == "")
{
string d = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Desktop) + "/YOUR_LOGS";
System.IO.Directory.CreateDirectory(d);
filename = d + "/your_happy_log.txt";
}

try {
System.IO.File.AppendAllText(filename, logString + "\n");
}
catch { }
}
}
[/CODE]
Ekiarmi - 07/10/2021 20:17
[QUOTE=3dpoder;1004401]

Enlace al código en el foro de Unity.

[CODE]
using UnityEngine;

public class LogAnywhere : MonoBehaviour
{
string filename = "";
void OnEnable() { Application.logMessageReceived += Log; }
void OnDisable() { Application.logMessageReceived -= Log; }

public void Log(string logString, string stackTrace, LogType type)
{
if (filename == "")
{
string d = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Desktop) + "/YOUR_LOGS";
System.IO.Directory.CreateDirectory(d);
filename = d + "/your_happy_log.txt";
}

try {
System.IO.File.AppendAllText(filename, logString + "\n");
}
catch { }
}
}
[/CODE][/QUOTE]

Muchas gracias, voy a trastear un poco y te cuento. No me esperaba que fuera tan difícil.
3dpoder - 07/10/2021 21:33
Ya comentarás cómo te ha ido, a ver si puede servir a otros usuarios a posteriori. Un saludo.
Ekiarmi - 07/11/2021 19:56
[QUOTE=3dpoder;1004442]Ya comentarás cómo te ha ido, a ver si puede servir a otros usuarios a posteriori. Un saludo.[/QUOTE]

Mil disculpas por la tardanza, pero no me he olvidado.

Es bastante sencillo. El script guarda lo que escriba el Debug.Log. Pongo un ejemplo con un script rápido de ejemplo que hice para probar. En este ejemplo he puesto una imagen en movimiento con un collider2D, que choca contra otro y crea un Log. Cuando se crea el log, el script que me pasaste crea una carpeta en el escritorio con el contenido de Debug. Es un aporte buenísimo, gracias por compartirlo.

[CODE]using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ParedChoque : MonoBehaviour
{


public bool Chocando;
private void OnTriggerEnter2D(Collider2D other)
{
if(other.tag == "Activador")
{
Chocando = true;
gameObject.SetActive(false);
Debug.Log("Probando,probando");
contador.instancia.contar();

}
}

string filename = "";
void OnEnable() { Application.logMessageReceived += Log; }
void OnDisable() { Application.logMessageReceived -= Log; }

public void Log(string logString, string stackTrace, LogType type)
{
if (filename == "")
{
string d = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Desktop) + "/YOUR_LOGS";
System.IO.Directory.CreateDirectory(d);
filename = d + "/your_happy_log.txt";
}

try
{
System.IO.File.AppendAllText(filename, logString + "\n");
}
catch
{}
}
}[/CODE]
3dpoder - 07/11/2021 20:20
Me alegro de que haya servido y lo hayas podido solucionar, un saludo.