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();
    }
}

→ Ссылка