青空の月

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

tips

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

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

Inspectorで表示される変数の文字列に変換する

Unityでは変数名をインスペクター上に表示すると自動的に見やすくしてくれる。 小文字と大文字の間にスペースを入れてくれたり、変数名の頭が「_」や「m_」、「k」で始まる場合は自動的に除いてくれる。 ObjectNames.NicifyVariableNameは文字列をこのルール…

アセットストアにつながらない場合の対処法

ブラウザでhttps://www.assetstore.unity3d.com/ はみれるけどUnity本体で見るAssetStoreにはつながらない場合があるようで公式ブログにその事について載っていた。 主な原因は2つで、プロキシーの設定とウイルス対策ソフトが原因で繋がらなくなる場合があ…

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

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

画面全体に対して特殊効果をかける(Pro専用)

Unityでこんな感じにカメラに写ってるものに対して渦のように描画を表現したい場合、Proバージョンならとても簡単に使える。 RPGの敵とエンカウントした時とかによく見るエフェクトかな。 ちなみにエフェクトをかけていない場合の元の画面はこんな感じ。Plan…

Unityプロライセンスか判別する

Unity Pro Licenseを持っている環境かをスクリプトで判別するのに Application.HasProLicense がある。 これはUnity4.1から追加された。 以前ならRenderTextureを使ってProか判別してたけど、Unity標準機能で判別できるようになってた。 でも使う機会ってあ…

画像の重なり状態を調べる

シーンビューのOverdrawモードを使用すると、画像の重なり具合を可視化して簡単に調べることができる。 無駄に画像が重なっていて、隠れているのにアクティブなオブジェクトを調べるときに役立ちそう。 シーンビューのOverdrawを選択。 NGUIのサンプルを可視…

ブックマークでUnityドキュメントの日本語/英語を切り替える

スクリプトリファレンスも徐々に日本語化され始めているので、以前ブックマークで英語ページと日本語ページを切り替えるソースを公開していた方がいたので改めて紹介。 Unityのオンラインドキュメントの日本語/英語を切り替えるブックマークレット 使い方は…

プリミティブオブジェクト(Cube/Sphere等)をスクリプトで作成する

meshとcolliderが付いた基本的なオブジェクトをスクリプトから作成する方法。 PrimitiveTypeを指定して作成するオブジェクトを決める。 GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube); スクリプトリファレンス http://docs-jp.unity3d.c…

MipMapsを視覚化して確認する

ミップマップがどんな感じになっているか視覚化して確認する方法。 シーンビューのMipmapsの表示はここで切り替えられる。(レンダーモード(Render Mode)) AngryBotsのある廊下を表示してみるとこんな感じ。Mipmapsモードでは描画密度が高いトコロが赤、低…

画像の詳細設定について

Unityでは画像の設定を用途に応じて細かく設定できる。画像を選択すればInspectorからImport Setttingsで編集できる。 できるだけ画像は綺麗に出したい、アプリの容量を抑えたい時はまず、ここの設定から見直すといい。 公式サイトのリファレンスに各項目に…

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

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

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

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

EditorがPro用のskinか

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

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

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

テキスト形式シーンファイルのフォーマット

Unity Proでは、テキスト形式で保存ができる。Editor SettingsのAsset SerializationでForce Textを選択するとテキスト形式で保存される。 テキスト形式で保存した時のSceneファイルはYAML形式になっている。公式サイトに詳しく載っている。 http://docs-jp.…

UnityEditor再生時にエディターの色を変える

自分も以前、Unity勉強会で教えてもらった、エディターの色を変える方法。 変えるとこんな感じに全体の色が変わる。 設定は簡単で、Preferences>ColorsのGeneral「Playmode tint」で変更できる。 やり過ぎると文字まで潰されるので、ちょうどいい感じの色を…

端末情報を取得する

Unityで端末の情報を取得するために「SystemInfo」クラスが用意されている。実行するとどんな値が返ってくるのか試してみた。 MBPとWindowsはUnityEditorで実行した結果。 iOS端末でiPhone5やiPod Touch、iPhoneの世代は「iPhone.generation」で取得できる。…

端末固有の値を取得する

iOSは前々からUDIDは使わないようにとアナウンスしてきて、使用しているアプリはリジェクトするって発表されています。(AppBankさん) Unityではどうかというと、Unityで端末固有の値を取得するのに 「SystemInfo.deviceUniqueIdentifier」が用意されている…

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

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

UnityEditorの起動時間を取得する(EditorApplication.timeSinceStartup)

UnityEditorの起動時間を取得する変数。「EditorApplication.timeSinceStartup」 プレイ中、ゲーム内で使える「Time.realtimeSinceStartup」と似たような機能。 どんな時に使えるかというと、InitializeOnLoadなどを使って自動で何かしらの処理をさせたい時…

スクリプトの実行順を制御する

前回、イベント関数の実行順を紹介したけど、スクリプト毎の「Awake()」を制御したい、決まったスクリプトの順でAwakeを呼んで欲しい時がある。 そんな時はUnityEditorに標準機能の「Script Execution Order」を使って設定できる。右下の「+」ボタンからス…

イベント関数の実行順

Unityでスクリプトを書いていて、MonoBehaviourがもっているイベント関数の実行順を意識することがあると思う。 「Awake()」「Start()」「Update()」はよく使うし、意識してる人も多いと思う。 公式サイトにそれ以外の関数が実行順に整理されているのでコレ…

EditorApplication.NewSceneを使ったらエラーが出た。

EditorWindowのボタンから新しいシーンを下の様に「EditorApplication.NewScene」を使って作成しようとしたらエラーが出た。 void OnGUI() { if (GUILayout.Button("NewScene", GUI.skin.button)) { EditorApplication.NewScene(); } } 思い当たるトコが無か…

AssetServerを使わずにSVNやGitを使う時の管理対象ファイル。

AssetServerを使わずにSubversionやGitを使って、バージョン管理する必要があるファイルとフォルダ。 metaファイル AssetsフォルダとProjectSettingsフォルダ これらを管理しておけば、とりあえずOK。 デフォルトだとmetaファイルは作成されないので「Edit->…

アセットバンドルのプラットフォーム間の互換性について

アセットバンドル FAQ http://docs-jp.unity3d.com/Documentation/Manual/abfaq.html#crossplatform このページにアセットバンドルのクロスプラットフォームについて載っていた。 ビルドターゲット→読み込む環境↓ スタンドアローン Webplayer iOS Android エ…

Unity3.5から4へのアップグレード時 変更&注意点 その2

前にUnity3.5から4へのアップグレード時 変更&注意点を書いたけど、ミートアップや勉強会で話されていた方がいたのを思い出したので、そちらも目を通しておくと参考になるかも。 メガ Unity ユーザーミートアップ 2012。ミートアップの内容をSlideshowでま…

Editorログについて

Debug.Logやコンソールに吐かれるUnity Editorのログを出力する場所。Unity自体が何かの影響で起動できない時は直接ログを見る必要があるのでよく使う。 コンソール上に表示されないモノにはBuildした時のアプリの内訳、テクスチャに容量何%使って何MBとか…

エディター情報の解析「Editor Analytics」

公式サイトのマニュアル見ていて気になるタイトルがあって開いてみたら期待していたものとは違っていた。Unityが情報を収集して送信しますよって機能。 開発者のための情報かとおもいきや、Unity社の為の機能か。 巡り巡って開発者の為に役立てられるんだろ…

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付)かチェックして自動的に変換してくれる。 今までは動かして文…

Unity3.5から4へのアップグレード時 変更&注意点

公式サイトに日本語訳で3.5→4アップグレードする際の注意点がまとまっていた。 今更感はあるけど、最近のアセットストアのアセットも4.0以降必須が増えてきたし、アップグレードする人も増えてくるのかな。 と言ってもアップグレードする時の一番問題になり…

Unityでの海賊版チェック

パズドラの中国版海賊アプリというか模倣アプリとか見てると意味なんかあるのかと疑問符がつくけど簡単にチェックできるのでとりあえず入れておいて良いのではないか。 この2つでチェックが出来るようだ。 Application.genuine Application.genuineCheckAva…

ダイアログを表示する

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

「is assigned but its value is never used」の表示を消す

変数を宣言して使用しなかった時にコンソール上にwarningとして表示される「is assigned but its value is never used」系のログを非表示にする方法。 ソースの先頭に #pragma warning disable 0414 と加えるだけで表示されなくなる。最後の数字はコンソール…

MissingScriptを探す

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

Exceptionログを取得する

Exceptionログを取得する参考になったサイト http://d.hatena.ne.jp/nakamura001/20130209/1360415984 Application.RegisterLogCallbackを使用して if (type == LogType.Exception) で判別してExceptionのみを処理できる。 Exception以外の「Debug.Log()」な…

Debug.Logの制御

UnityEngine.Debugを上書きしちゃうイメージ。 http://qiita.com/items/39183e62ed2a1f52f690 購入したアセット内のログも制御できちゃうので導入しといて損は無さそう。 リリース用とデバッグ用で簡単に切り替えられるのは大きいメリット。スクリプトで制御…

チーム共通設定に.assetファイルを扱う

ゲームのプレイデータとかは「PlayerPrefs」、エディタ系のデータは「EditorPrefs」に保存すればいいんだけど、「EditorPrefs」ってプロジェクトフォルダ外に保存されるのでチーム間で共通させたい設定パラメータとかには向かない。 そんな時は「asset」ファ…

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

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

NGUIのパフォーマンス改善 UIPanelのstatic

「ゲームは初心者にやさし」さんでも紹介されている内容。 http://gamesonytablet.blogspot.jp/2012/08/ngui-iphone.html Panelに変更が無い場合は「static」をONにしとく。 動かしたり変更がある時はOFFにして変更するとパフォーマンスがあがるよって内容。…

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

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

Unityプロジェクトを簡単起動 Mac編~Automator~

Unityプロジェクトを簡単操作で開きたい。 いちいちOpenProjectで選択なんかしたくねぇよという人向け。 Mac版~Automator~ ダブルクリック1回だけで指定プロジェクトを起動出来ます。 今回はAutomatorを使用します。 完成はこんな感じ。 コードのざっくり…

Unityプロジェクトを簡単起動 Mac編(簡易版)

Unityプロジェクトを簡単操作で開きたい。 いちいちOpenProjectで選択なんかしたくねぇよという人向け。 Mac版 ダブルクリック1回だけで指定プロジェクトを起動出来ます。 拡張子を「sh」で中身はこんな感じ。 #!/bin/sh fullpath=$(cd $(dirname $0) && pw…

Unityプロジェクトを簡単起動 Windows編

Unityプロジェクトを簡単操作で開きたい。 いちいちOpenProjectで選択なんかしたくねぇよという人向け。 ダブルクリック1回だけで指定プロジェクトを起動出来ます。 拡張子を「vbs」で中身はこんな感じ。 set wsShell=WScript.CreateObject("wscript.shell"…

オブジェクトの階層を全て広げる

階層が深くなってしまった場合、 アイテムを全て開げるときにALTボタンを押したままにすると、 ネストされた階層も強制的に全て広げる。 http://gamesonytablet.blogspot.jp/2012/09/unity-wiki181.html

Debug.Log の豆知識

Debug.Logや関連メソッドを使用するとき、 スクリプトのインスタンスを渡すことで ログ出力をクリックしてそのオブジェクトをエディタ上で選択状態にできる Debug.Log("This",this); http://gamesonytablet.blogspot.jp/2012/09/unity-wiki181.html

colorの初期化

Color.clearは RGBA is (0, 0, 0, 0) つまり、黒の透明になる。 http://unity3d.com/support/documentation/ScriptReference/Color-clear.html

ケリ姫スイーツみたく背景を動かす

renderer.material.SetTextureOffseを使うと簡単に実装できる。http://docs.unity3d.com/Documentation/ScriptReference/Material.SetTextureOffset.html using UnityEngine; using System.Collections; public class example : MonoBehaviour { public floa…