LoginSignup
9
5

More than 5 years have passed since last update.

コンソールダブルクリックでもちゃんと実行地点にジャンプするDebugクラスDLLをつくる

Posted at

元ネタ:
http://answers.unity3d.com/questions/176422/debug-wrapper-class.html

実際にやってみたので備忘録程度にメモ。

Debugクラスのラッパーを作るとまずぶつかる問題となる
Unityのコンソールをダブルクリックするとラップしたログ出力を呼んだ地点ではなくてラップ先のDebug.Logなどのところに飛んでしまう というものについての対処方法の一例になります。

手順

今回 VisualStudio2010でやったのでそれ準拠での説明

新規ライブラリプロジェクトを作る

  1. Visual C# -> クラスライブラリ を選択
  2. 名前 には実際に使用する名前空間名を入力
  3. 場所 には今回作成するライブラリプロジェクトの親フォルダを指定する
  4. ソリューション名 にはこのライブラリプロジェクトのフォルダ名になるものを指定する

参照設定

ソリューションエクスプローラ内 参照設定 を右クリックし、 参照の追加 を選択後、
使用するUnityEngine.dllのパスを指定する(Unity/Editor/Data/Managed の中とかにあるはず)

Debugクラスコードを書く

こんな感じのやつを Class1.cs に書く

Class1.cs

using System.Diagnostics;
using UnityEngine;

namespace DebugTest {
    public static class Debug
    {
        [Conditional("DEBUG_WRAP")]
        public static void Log(object message)
        {
            Debug.Log(message);
        }
    }
}

ビルド

普通に ビルド から [プロジェクト名]のビルド を実行
bin/Debug フォルダに [namespace名].dll が出来上がっているはずなので
それをUnity側のプロジェクトのAssets以下にコピー

使う

先の例の場合 Conditional を付けているので、ログを出したい場合は DEBUG_WRAP を Scripting Define Symbols に書く

後はこんなかんじで使う

Test.cs
using UnityEngine;
using DebugTest; // コレが要る

public class Test : MonoBehaviour {
    void Start() {
        DebugTest.Debug.Log("Test");
    }
}

実際に出力されたログをダブルクリックして飛ぶと、普通にラップするパターンと違いきちんとTestクラスの DebugTest.Debug.Log() の行にジャンプします。

問題

最初に挙げた問題についての対処はできますが、その代わり普通に無名名前空間にDebugクラスを定義してラップする方式と違って以下の問題が発生します。

  • まず使用するのに専用のusingが必要
    • プロジェクト用のnamespaceを切ってたりするとまだマシかも
  • 元々のUnityのDebugクラスをラッピングするわけではないので、外部Assetでログ出力が行われていても防げない
    • これとは別に無名名前空間でDebugクラス定義してどうにかするのもアリかも 5.4なんかだともう Logging の設定が出来るのでそれでもいいかもしれないが…

とりあえずやってみたらできた!というところから勢いで記事を書いたので、他にも色々問題あるかもしれません…;

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5