Last active
July 6, 2018 09:20
-
-
Save rngtm/759aa367cf16cbd3952d9c633b589b2a to your computer and use it in GitHub Desktop.
Sceneビューにテキストを表示するUnityエディタ拡張。(https://qiita.com/r-ngtm/items/43dce7b9bde2c090c761) シーンを開いたとき、同じディレクトリにあるabout.txtの中身をSceneビューに表示します
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEditor; | |
using UnityEditor.SceneManagement; | |
using System.IO; //System.IO.FileInfo, System.IO.StreamReader, System.IO.StreamWriter | |
using System; //Exception | |
using System.Text; //Encoding | |
[InitializeOnLoad] | |
public class EditorSceneViewText | |
{ | |
const int k_FontSize = 24; // 文字の大きさ | |
const int k_SpaceLeft = 16; // ウィンドウ左端との隙間 | |
const int k_SpaceRight = 16; // ウィンドウ右端との隙間 | |
const int k_SpaceTop = 0; // ウィンドウ上端との隙間 | |
const int k_PaddingLeft = 6; // テキスト左側の隙間 | |
const int k_PaddingRight = 6; // テキスト右側の隙間 | |
const int k_PaddingTop = 6; // テキスト上側の隙間 | |
const int k_PaddingBottom = 8; // テキスト下側の隙間 | |
static readonly Color k_BackgroundColor = new Color(0f, 0f, 0f, 0.75f); // 背景色 | |
static GUIStyle s_TextStyle; // テキストのGUIStyle | |
static string s_GuiText; // ウィンドウ上に表示するテキスト | |
static Texture2D s_BackgroundTexture; // 背景テクスチャ | |
// 起動時に実行 | |
static EditorSceneViewText() | |
{ | |
ReloadFile(); | |
SceneView.onSceneGUIDelegate += SceneGUI; | |
// シーンを開いたとき | |
EditorSceneManager.sceneOpened += (scene, mode) => | |
{ | |
ReloadFile(); | |
}; | |
} | |
// ファイルロード | |
static void ReloadFile() | |
{ | |
var scene = EditorSceneManager.GetActiveScene(); // 現在開いているシーン | |
var directory = System.IO.Directory.GetParent(scene.path).FullName; // 親フォルダーのパスを取得 | |
var txtPath = directory + System.IO.Path.DirectorySeparatorChar + "about.txt"; // txtファイルパス | |
s_GuiText = ReadFile(txtPath); // txtの読み込み | |
} | |
// GUIStyle作成 | |
static void CreateStyleIfNull() | |
{ | |
if (s_TextStyle == null) | |
{ | |
CreateTextureIfNull(); | |
s_TextStyle = new GUIStyle(); | |
s_TextStyle.fontSize = k_FontSize; | |
s_TextStyle.normal.textColor = Color.white; | |
s_TextStyle.padding.left += k_PaddingLeft; | |
s_TextStyle.padding.right += k_PaddingRight; | |
s_TextStyle.padding.top += k_PaddingTop; | |
s_TextStyle.padding.bottom += k_PaddingBottom; | |
} | |
} | |
// テクスチャ作成 | |
static void CreateTextureIfNull() | |
{ | |
if (s_BackgroundTexture == null) | |
{ | |
s_BackgroundTexture = new Texture2D(1, 1); | |
s_BackgroundTexture.SetPixel(0, 0, k_BackgroundColor); | |
s_BackgroundTexture.Apply(); | |
} | |
} | |
// シーンにGUI表示 | |
static void SceneGUI(SceneView sceneView) | |
{ | |
CreateTextureIfNull(); | |
CreateStyleIfNull(); | |
GUILayout.Space(k_SpaceTop); | |
GUILayout.BeginHorizontal(); | |
Handles.BeginGUI(); | |
GUILayout.Space(k_SpaceLeft); | |
s_TextStyle.normal.background = s_BackgroundTexture; // テキスト背景のテクスチャ | |
GUILayout.Label(s_GuiText, s_TextStyle); // Sceneビューにテキスト表示 | |
GUILayout.Space(k_SpaceRight); | |
Handles.EndGUI(); | |
GUILayout.EndHorizontal(); | |
} | |
// 読み込み関数 | |
static string ReadFile(string path) | |
{ | |
if (!File.Exists(path)) // ファイルが存在しない場合 | |
{ | |
return ""; // 空データを返す | |
} | |
string text = ""; | |
FileInfo fi = new FileInfo(path); | |
try | |
{ | |
using (StreamReader sr = new StreamReader(fi.OpenRead(), Encoding.UTF8)) | |
{ | |
text = sr.ReadToEnd(); | |
} | |
} | |
catch (Exception e) | |
{ | |
UnityEngine.Debug.LogException(e); | |
} | |
return text; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment