コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】コンパイルに失敗したら Mac の通知を表示するエディタ拡張の例

概要

brew install terminal-notifier

上記のコマンドで terminal-notifier をインストールしておく。

using System.Diagnostics;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Compilation;

[InitializeOnLoad]
internal static class Example
{
    static Example()
    {
        CompilationPipeline.assemblyCompilationFinished -= OnFinished;
        CompilationPipeline.assemblyCompilationFinished += OnFinished;
    }

    private static void OnFinished
    (
        string            assemblyName,
        CompilerMessage[] messages
    )
    {
        if ( messages.All( x => x.type != CompilerMessageType.Error ) ) return;

        // `which terminal-notifier` コマンドで取得したパスを設定
        const string fileName = "/opt/homebrew/bin/terminal-notifier";

        var title     = $"error: {Path.GetFileNameWithoutExtension( assemblyName )}";
        var message   = string.Join( "\n", messages.Select( x => x.message ) );
        var arguments = $@"-title ""{title}"" -message ""{message}"" -sound think";

        var startInfo = new ProcessStartInfo
        {
            FileName               = fileName,
            Arguments              = arguments,
            RedirectStandardOutput = true,
            RedirectStandardError  = true,
            UseShellExecute        = false,
            CreateNoWindow         = true
        };

        var process = new Process { StartInfo = startInfo };

        process.Start();
        process.WaitForExit();
    }
}