-
-
Save neon-izm/97edfb85abbead509fc4912304edc249 to your computer and use it in GitHub Desktop.
日本語から変数や関数名を生成するエディタ拡張【Unity】【エディタ拡張】
This file contains hidden or 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
// NameGenerationWindow.cs | |
// http://kan-kikuchi.hatenablog.com/entry/NameGenerationWindow | |
// | |
// Created by kan.kikuchi on 2017.12.10. | |
using UnityEditor; | |
using UnityEngine; | |
using UnityEngine.Networking; | |
using System; | |
using System.Collections; | |
/// <summary> | |
/// 日本語から変数や関数名を生成するウィンドウ | |
/// </summary> | |
public class NameGenerationWindow : EditorWindow { | |
//変換する日本語と変換後の名前 | |
private string _fromText = "", _toText = ""; | |
//アクセストークンとそれを保存しておくKey | |
private string _accessToken = ""; | |
private const string ACCESS_TOKEN_SAVE_KEY = "ACCESS_TOKEN_SAVE_KEY"; | |
//翻訳後のJsonを変換するためのクラス | |
[Serializable] | |
private class TranslatedInfo{ | |
[SerializeField] | |
private string translated_text = ""; | |
public string TranslatedText{get{return translated_text;}} | |
} | |
//コルーチン実行用用(StartCoroutineが使えないので) | |
private IEnumerator _enumerator = null; | |
//================================================================================= | |
//初期化 | |
//================================================================================= | |
//メニューからウィンドウを表示 | |
[MenuItem("Window/Name Generation Window")] | |
public static void Open (){ | |
NameGenerationWindow.GetWindow (typeof(NameGenerationWindow)); | |
} | |
private void OnEnable (){ | |
//保存してあるアクセストークンを取得 | |
_accessToken = EditorUserSettings.GetConfigValue(ACCESS_TOKEN_SAVE_KEY); | |
} | |
//================================================================================= | |
//表示するGUIの設定 | |
//================================================================================= | |
private void OnGUI(){ | |
EditorGUILayout.Space(); | |
EditorGUILayout.BeginVertical(GUI.skin.box); | |
EditorGUILayout.BeginVertical(GUI.skin.box); | |
ShowTitle("アクセストークン"); | |
//アクセストークンの入力欄を作成 | |
string beforeAccessToken = _accessToken; | |
_accessToken = EditorGUILayout.TextField(_accessToken); | |
//アクセストークンを変更したら保存 | |
if(_accessToken != beforeAccessToken){ | |
EditorUserSettings.SetConfigValue(ACCESS_TOKEN_SAVE_KEY, _accessToken); | |
} | |
EditorGUILayout.EndVertical(); | |
EditorGUILayout.Space(); | |
EditorGUILayout.BeginVertical(GUI.skin.box); | |
ShowTitle("日本語から変数や関数名を生成"); | |
//変換する日本語の入力欄を作成 | |
_fromText = EditorGUILayout.TextField(_fromText); | |
//日本語が入力されていれば変換ボタン表示 | |
if(!string.IsNullOrEmpty(_fromText)){ | |
//ボタンが押されたら変換 | |
if (GUILayout.Button("変換")){ | |
Convert(); | |
} | |
} | |
EditorGUILayout.Space(); | |
//変換された日本語を表示 | |
EditorGUILayout.SelectableLabel(_toText); | |
//コルーチン実行中 | |
if(_enumerator != null){ | |
while (_enumerator.MoveNext()) {} | |
} | |
EditorGUILayout.EndVertical(); | |
EditorGUILayout.EndVertical(); | |
} | |
//中心にタイトルをラベルで表示 | |
private void ShowTitle(string text){ | |
GUILayout.BeginHorizontal(); | |
GUILayout.FlexibleSpace(); | |
GUILayout.Label(text); | |
GUILayout.FlexibleSpace(); | |
GUILayout.EndHorizontal(); | |
} | |
//================================================================================= | |
//変換 | |
//================================================================================= | |
//変換 | |
private void Convert(){ | |
//リクエスト作成 | |
UnityWebRequest request = UnityWebRequest.Get("https://api.codic.jp/v1/engine/translate.json?text=" + _fromText + "&casing=pascal"); | |
//HTTPヘッダにトークンを設定 | |
request.SetRequestHeader("Authorization", "Bearer " + _accessToken); | |
//リクエスト送信 | |
_enumerator = SendWebRequest(request, FinishConvert); | |
} | |
//変換リクエスト送信 | |
private IEnumerator SendWebRequest(UnityWebRequest request, Action<bool, string> callback) { | |
//リクエスト送信 | |
yield return request.SendWebRequest(); | |
//リクエストが完了するまで待機 | |
while(!request.isDone){ | |
yield return 0; | |
} | |
//エラー判定 | |
bool isError = request.isNetworkError || request.isHttpError; | |
//エラー時は内容をログで表示 | |
if(isError) { | |
Debug.LogWarning(request.url + " : " + request.responseCode + " : " + request.error + " : " + request.downloadHandler.text); | |
} | |
//コールバック実行 | |
callback(!isError, isError ? request.error : request.downloadHandler.text); | |
} | |
//変換完了 | |
private void FinishConvert(bool isSuccess, string json){ | |
_enumerator = null; | |
//変換失敗時は空文字を設定 | |
if(!isSuccess){ | |
_toText = ""; | |
return; | |
} | |
//jsonの両サイドの[]を削除 | |
json = json.Substring(1, json.Length - 2); | |
//Jsonを変換し、翻訳後のテキストを取得 | |
_toText = JsonUtility.FromJson<TranslatedInfo>(json).TranslatedText; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment