青空の月

Unity, C#, アプリ開発関連について。

Editor拡張

EditorWindow上に通知メッセージを表示する

ウインドウ上に通知メッセージを表示する。 ↓こういうヤツ EditorWindow.ShowNotification() を呼び出して表示する。 通知自体は大体5秒位で自動的にフェードアウトする。フェードアウトする時間が指定出来ないのがちょっと残念だけど、すぐ消したい場合は、…

GUIの横幅をマウスのドラッグで変更する

UnityでEditor拡張機能を作っていると、LabelFieldやTextFiledなどGUIでwidthが足りなくて見きれてたりして、何て書いてあるか分からない時がある。 windowの横幅を取得してその何%とかで指定すれば割と動的にできる。 今回はマウスでドラッグしてTextField…

ディレクティブ一覧を取得する

ディレクティブである UNITY_3_5_1 UNITY_EDITOR とかは EditorUserBuildSettings.activeScriptCompilationDefines で取得できる。 Edit>Project Settings>PlayerのScripting Define Symbolsで設定しているのも取得できる。 各プラットフォームごとに取得…

ボタンなどの画像サイズを変更する

Editor拡張でボタンなどに使用する画像のサイズを変更する方法。 EditorGUIUtility.SetIconSize を使用してサイズを変更する。引数には変更したいサイズのVector2を渡す。 こんな感じにボタンにも好きな画像サイズで載せられる。 引数にVector2.zeroを指定す…

UnityでプライベートIPアドレスを取得する

サーバーを使ったアプリなどを作っていると、ローカル環境に立てたサーバーに対して接続する時などがある。 IPアドレスを指定して接続したい場合、人によってIPアドレスが違うのでチームで開発していると何かと面倒なのでスクリプトからIPアドレスの取得を試…

EidtorWindowのタイトルに好きなアイコンを付けてみた

「EditorWindowのタイトルにアイコンをつける」を見て、 EditorWindowに好きなアイコンを付けれるという事なので試してみた。 こんな感じになり、かなり見やすくなる。 「Assets/Editor Default Resources/Icons/」配下にタイトル名と同じ名前のpng画像を入…

シーンをメニューから素早く開く機能を自動化するEditor拡張

シーンをメニューから開く機能。メニューにシーンを追加するのも自動化してみた。 こんな感じにメニューに追加される。 メニューからも再作成できるけど、InitializeOnLoadで自動で更新される。

Unityが標準で持っているアイコンを取得してみた

Unityが標準で持っている?アイコンを取得してみた。 EditorGUIUtility.Loadを使ってパスを指定してTextureを取得する。 Texture tex = EditorGUIUtility.Load("icons/d_BuildSettings.Android.png") as Texture2D; パスは公開されてはいないと思うのでUnity…

スクリプトからメニューアイテムを実行する

EditorApplication.ExecuteMenuItemを使うとEditorのメニュー項目を呼び出せる。 AssetStoreのWindow、NGUIのPanel Toolを表示するサンプル。 例 http://docs.unity3d.com/Documentation/ScriptReference/EditorApplication.ExecuteMenuItem.html

ボタンに画像を使う

ボタンに画像を使ってみる。 GUIContentを使えば画像と文字をボタン化できる。 ラベルが必要なければ、直接Textureを渡せばOK。 こんな感じのことが出来る。

TextFieldのラベルにアイコンを使う

TextFieldのラベルにアイコンを使うサンプル。 前回のファイルアイコンを取得するソースを利用して作ってみた。 こんな感じになる。 GUIContentを使うだけでできる。レイアウトは自由に変えられないけど単純なものならコレで十分かな。

Editor拡張でファイルアイコンを使う

エディタ拡張でファイルのアイコンを使いたい場合に便利な関数が用意されている。 AssetDatabase.GetCachedIcon(path) を使うと簡単に取得できる。 リファレンスには詳細が載ってないけど、Projectビューに表示されているのと同じアイコンが取得できるみたい…

EditorがPro用のskinか

Proライセンスを持っているとPreferences>GeneralでSkinをPro専用の「Dark」を選択できる。 skinで問題になってくるのはEditor拡張で色を設定する時にSkinがDarkとLightで文字の見え方がかなり変わってくる。Editor拡張は色の指定がちょっとメンドイ気がす…

Drag&Dropしたファイルの絶対パスを取得する

UnityEditorにはエディタ拡張で簡単にドラッグ&ドロップ使える機能が備わっている。 http://docs-jp.unity3d.com/Documentation/ScriptReference/DragAndDrop.html Unityの機能なのでAssetsフォルダ配下のものなら更に便利に使える。こちらのブログではInsp…

Unityで使用しているフォルダ一覧

Unityで使っているフォルダ、UnityのAPIで取得できるパスをまとめてみた。たまにフォルダを開きたくなる時があるのでこういうEditor拡張があると便利だと思う。AssemblyPathなんて使わないと思うけど。 思いついたフォルダはリスト化してみたけど、多分こん…

再生中にスクリプト編集しちゃった時に自動で停止させる

Unity Editor上でプレイ中にスクリプトを修正してUnityにフォーカスしてビルドが始まっちゃう→エラーになるって事をよくやってしまう。 自分はスクリプトを編集したら、再生ボタンを押して最初からやるので、どうせエラーになるならプレイ中にスクリプトをい…

Playボタン押した後のInitializeOnLoadは無視したい

Playボタンを押すと再ビルド・コンパイルされInitializeOnLoadが実行される。スクリプト更新時にInitializeOnLoadが実行されるのは良いがPlayボタン押した後は実行させない方法を考えてみた。 EditorApplication.playmodeStateChangedでイケるかと思いきやう…

Unityプロジェクトのロードが終わった後にスクリプトを実行したい。

前回はUnity起動時、スクリプト更新時直後に実行する場合。 今回は、起動直後ではなく、少し遅らせてプロジェクトが読み込み終わった後に実行させたい場合の方法。 using UnityEngine; using UnityEditor; [InitializeOnLoad] public class InitOnLoad { sta…

Unity起動時のみにスクリプトを実行させる

EditorApplication.timeSinceStartupを使用して、Unity起動時のみスクリプトを実行する方法。Editor拡張機能を実装する時に役に立つ。 using UnityEngine; using UnityEditor; [InitializeOnLoad] public class InitOnLoad { static InitOnLoad() { if (Edit…

GameObjectにコメントを残す拡張

GameObjectにコメントを残すサンプル。みんな何かしらコメント残せるようにしてるとは思うけど。 ObjectComment.cs using UnityEngine; public class ObjectComment : MonoBehaviour { #if UNITY_EDITOR public string comment = ""; #else #endif } ObjectC…

ファイル文字コードによる日本語問題の解決方法

Unityで日本語使って文字化けした経験がある人におすすめのアセット。 こちらの方が公開している「AssetPostprocessUTF8Encode」 http://debuglog.tumblr.com/post/26550984743/utf-8 UTF8(BOM付)かチェックして自動的に変換してくれる。 今までは動かして文…

ダイアログを表示する

単純なOK・キャンセルボタンが付いているダイアログを表示する。 if (GUILayout.Button("dialogを表示", GUI.skin.button)) { bool result = EditorUtility.DisplayDialog( "たいとる", "本文", "OK", "キャンセル" ); if(result) Debug.Log("OKが押されまし…

MissingScriptを探す

Unity GemsでMissingScriptを修正する プログラムが公開されていてその翻訳。 missing経験したことがある人にとっては夢の様なプログラム。 Missing Scriptsエラーの解消(前編) http://gamesonytablet.blogspot.jp/2013/03/missing-scripts.html Missing S…

HierarchyビューとProjectビューを拡張!「UnityEditorEnhancements」

こちらで公開されているアセット「UnityEditorEnhancements」を使って見た。 https://bitbucket.org/Tenebrous/unityeditorenhancements/src/8716cd3cdf0a コレを入れるとこうなる。 ・Projectビューに拡張子が表示される。Proスキンだと「FBX」は見えにくい…

右クリックで表示されるコンテキストメニューを作る

昨日はコンポネント名の行を右クリックでのコンテキストメニュー追加してみたけど、 今度は自分で作ったEditorWindow内のコンテキストメニューを自作してみる。 こんな感じで追加される。 「GenericMenu」を使うと拡張できる。 ソースはこんな感じ。 using U…

InspectorのContextメニューを追加する

Inspectorのコンポーネント毎のコンテキストメニューを追加する方法。 コンポーネント名の行?を右クリックした時に表示されるコンテキストメニューを拡張する。 Cameraに追加する場合はこう書くと、 [MenuItem("CONTEXT/Camera/This is Camera !!!!!!!!!!!!…

エディタ拡張でメニュー追加する時のコツ

エディタ拡張でメニューに追加する時、同じ機能を別の場所に追加したい際に有効そうな技。 例えば、空のゲームオブジェクトを作る機能を追加したい時に、「Assets>Create」、「GameObject>Create Other」にメニュー追加する場合は以下の様に書ける。 //Ass…

PlayerPrefsを操作するアセット「PlayerPrefsPlugin」

PlayerPrefsを編集するアセット、「PlayerPrefsPlugin」 https://www.assetstore.unity3d.com/#/search/PlayerPrefsPlugin インポートするとメニューに「Window>Player Prefs Plugin」が追加される。 「New」を選択すると新規登録 タイプの項目はこんな感じ…

Unityでグローバルな定数を使用したい

Unityでこんな事をやりたい。 #if MY_DEBUG_MODE //デバッグ処理 #endif 開発してる時は有効でリリースでは含めたくない処理なんかは良くあることだと思う。 1ファイル内だけなら #define MY_DEBUG_MODE とファイルの先頭で宣言すればいいけど、そのファイ…

スクリプト簡単生成アセット CreateScriptDialog

テラシュールウェアさんでも紹介されている「CreateScriptDialog」 http://terasur.blog.fc2.com/blog-entry-156.html TemplateとFunctionが簡単に指定できるので、 スクリプトを新規作成する時は重宝しているアセット。 Function名をタイプミスしないで済む…

Editor拡張で区切り線

Editor拡張でHTMLのHRタグみたく水平線・区切り線を使いたい時。 その様なGUIは用意されていないみたいなので以下の様にして代用した。 GUILayout.Box("", GUILayout.Width(this.position.width), GUILayout.Height(1)); こんな線が引ける。 要は、高さ1のB…

Tag名やScene名を自動で定数化する

タグ名やScene名を文字型で扱わなきゃいけないので、 名前に変更があるとスクリプトで困るので定数化したい。こちらのスクリプトが参考になった。https://gist.github.com/anchan828/3cf9014a8493ab023925https://gist.github.com/anchan828/4243887 注意点…