Skip to content

Instantly share code, notes, and snippets.

@rngtm
Last active July 6, 2018 09:20
Show Gist options
  • Save rngtm/759aa367cf16cbd3952d9c633b589b2a to your computer and use it in GitHub Desktop.
Save rngtm/759aa367cf16cbd3952d9c633b589b2a to your computer and use it in GitHub Desktop.
Sceneビューにテキストを表示するUnityエディタ拡張。(https://qiita.com/r-ngtm/items/43dce7b9bde2c090c761)  シーンを開いたとき、同じディレクトリにあるabout.txtの中身をSceneビューに表示します
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