Unity как выводить логи в headless mode или batchmode
Хочу реализовать сервер для игры на юнити, я понял как отключить рендер, но не пойму как выводить логи в командную строку. По идее это могло быть так: я запускаю сервер батником с параметрами, и туда же выводятся логи. Но это не работает. Пример, игра Rust их DedicatedServer такое может. В планах что бы это работало как на винде так и на линуксе.
Ответы (1 шт):
Автор решения: Denis
→ Ссылка
Создаем окно консоли, и перенаправляем туда логи. Если закрыть окно то закрывается и ваше приложение на юнити, и если в редакторе то и его тоже закроет.
using System;
using System.Runtime.InteropServices;
using UnityEngine;
public class ConsoleWindow : MonoBehaviour
{
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FreeConsole();
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
private void Awake()
{
if (AllocConsole())
{
IntPtr consoleWindow = GetConsoleWindow();
if(consoleWindow != IntPtr.Zero)
{
ShowWindow(consoleWindow, SW_SHOW);
}
Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true });
Console.SetError(new System.IO.StreamWriter(Console.OpenStandardError()) { AutoFlush = true });
Console.WriteLine("Console Window created");
}
}
private void OnDestroy()
{
FreeConsole();
}
}