IsDirty
EditorUtility.SetDirtyによってDirtyフラグが立ったかどうかのチェック
internalだけどEditorUtilityクラス内にあった。
static bool IsDirty (int instanceID) { var isDirty = typeof(EditorUtility).GetMethod ("IsDirty", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic); return System.Convert.ToBoolean (isDirty.Invoke (null, new object[]{instanceID})); }
スクリプトからスプラッシュ画像を設定
SerializedObject経由で設定することが可能です。
プロパティ名
iPhoneSplashScreen iPhoneHighResSplashScreen iPhoneTallHighResSplashScreen iPhone47inSplashScreen iPhone55inPortraitSplashScreen iPhone55inLandscapeSplashScreen iPadPortraitSplashScreen iPadHighResPortraitSplashScreen iPadLandscapeSplashScreen iPadHighResLandscapeSplashScreen XboxSplashScreen blackberryLandscapeSplashScreen blackberryPortraitSplashScreen blackberrySquareSplashScreen
iPhoneSplashScreen は MobileSplashScreen を指します。
以下のように実装します。
using UnityEngine; using UnityEditor; [InitializeOnLoad] public class NewBehaviourScript { static NewBehaviourScript () { foreach (var player in Resources.FindObjectsOfTypeAll<PlayerSettings> ()) { var so = new SerializedObject (player); so.Update (); so.FindProperty ("iPhoneSplashScreen").objectReferenceValue = AssetDatabase.LoadAssetAtPath ("Assets/unitychan.jpg", typeof(Texture)); so.ApplyModifiedProperties (); EditorUtility.SetDirty (player); } AssetDatabase.SaveAssets (); } }
property-drawer-collectionをモジュール化
monodevelop-code-template-unity Unity4.6対応
もうすぐでUnity4.6対応っぽいのでUnity4.6でMessageに相当する24個を追加しました。
UnityEngine.EventSystems
- OnBeforeTransformParentChanged
- OnCanvasGroupChanged
- OnDidApplyAnimationProperties
- OnRectTransformDimensionsChange
- OnTransformParentChanged
- OnFillVBO
- OnRebuildRequested
- UpdateGeometry
- UpdateMaterial
UnityEngine.UI
- OnPointerClick
- OnPointerDown
- OnPointerEnter
- OnPointerExit
- OnPointerUp
- OnSubmit
- OnUpdateSelected
- OnBeforeSerialize
- OnDeselect
- OnDrag
- OnSiblingGraphicEnabledDisabled
- OnBeginDrag
- OnEndDrag
- OnScroll
- OnMove
Module Managerを使って自作ライブラリを読み込んでみた
[注意1] これはドキュメントに無く、推奨されていない使い方です。 [注意2] DLLを扱う方法しか調べてません。
Module Managerって?
Add-On系のパッケージ(Android、iOS、WebGL...)を今後モジュールとして管理しましょうということで実装された機能
だけどまだ稼働していない。
これ自前で作ったライブラリをModule Managerで管理できないのかな?
自分で作成しているライブラリがModule Managerで管理できれば「プロジェクト単位」でインポートさせていたものが「Unityアプリ(.app .exe)」単位になります。(正しい使い方をしたときはUnityバージョン単位と言った方がいいんですけどね)
Unity4.6ではModule Managerで「UnityEngine.UI.dll」と「UnityEditor.UI.dll」がインポートされています。しかしUnityEditor上のProjectビューではdllファイルは表示されていません。
ですがソリューションではdllが参照されています。
自作ライブラリをModule Manager経由でインポートするまでの備忘録
どうやらUnity4.6ではModuleManagerが有効になっている様子(uGUIのためだと思います)
いろいろ試行錯誤してインポートできるようになりました。まだまだ情報不足ですが最低限のことは出来たので満足です。
Macでしか試していないですが多分Windowsでも出来ると思います。
UnityExtensionsフォルダを見る
Macだと Unity.app/Contents/UnityExtensions
Windowsだと Unity/Data/UnityExtensions <- うろ覚え
GUISystemフォルダがありました
バージョンが4.6.0で、使用するUnityEngine.UI.dllがあって、Standaloneのビルド時?にはStandaloneフォルダの中のUnityEngine.UI.dllを使用している、というのが何となく分かります(ここは予想です。実際に動作確認はしていません。)
ちなみにEditorフォルダの中はUnityEditor.UI.dllがありました。EditorフォルダはUnityプロジェクトの「Assets/Editor」に相当するのだと思います。
どうやらModule Managerで管理するための設定ファイルはivy.xmlのようです。中身を見てみます。
<?xml version="1.0" encoding="utf-8"?> <ivy-module version="2.0" e:basepath="/Applications/buildAgent/work/d63dfc6385190b60/Extensions/guisystem" xmlns:e="http://ant.apache.org/ivy/extra"> <info version="4.6.0" organisation="Unity" module="GUISystem" e:packageType="UnityExtension" e:unityVersion="4.6.0b20" /> <publications> <artifact name="UnityEngine.UI" type="dll" ext="dll" e:guid="f5f67c52d1564df4a8936ccd202a3bd8" /> <artifact name="Editor/UnityEditor.UI" type="dll" ext="dll" e:guid="80a3616ca19596e4da0f10f14d241e9f" /> </publications> </ivy-module>
調べた結果 | |
---|---|
e:basepath | よくわからない。でも私のPCで存在しないパスなので無視します。 |
version | モジュールのバージョン |
organisation | UnityExtensionsフォルダ配下に作成するフォルダと同じ名前にする |
module | モジュール名 |
e:packageType | 他にもあるのかな?今のところUnityExtensionのみ |
e:unityVersion | モジュールが使用できるUnityバージョン。4.6.0b20のように特定のバージョンを指定できるが4.6というように4.6.x系で指定することも可能 |
name | 拡張子なしのファイル名。「Editor/UnityEditor.UI」を見る限りパスの役割もある |
type | artifactの種類?dllだからdllを指定している? |
ext | 拡張子 |
e:guid | guid。おそらく適当でユニークになればいい |
Hello World的なのを作ってみよう
さて、uGUIのモジュールを大いに参考にして自前のモジュールを作成してみたいと思います。 おそらく、ネット対応(サーバーからモジュールをダウンロードする)のは無理っぽいのでローカルのみです。
HelloWorld.dllファイルを作成
dllの作成は手っ取り早く「Assembly-CSharp-Editor.dll」をリネームしたのを使います。 Assembly-CSharp-Editor.dllは「Library/ScriptAssemblies」フォルダにあります。
dllを作るためにまずこのようなScriptを作成します。実際にはnamespaceを付けたほうが他のライブラリと競合しないのでおすすめです。
using UnityEngine; using UnityEditor; public class NewBehaviourScript { [MenuItem("Hello World/Menu")] static void Menu () { Debug.Log ("Menu"); } }
フォルダ構成はこんな感じです。
そうして作成された「Assembly-CSharp-Editor.dll」を「HelloWorld.dll」にリネームします。
ここまで出来たものはこちらからダウンロードできます。 - HelloWorld.dll
ivy.xmlファイルを作成
まずはテキストエディタを開いて以下のように編集します。
<?xml version="1.0" encoding="utf-8"?> <ivy-module version="2.0"> <info version="4.6.0" organisation="kyusyukeigo" module="MyFirstModule" e:packageType="UnityExtension" e:unityVersion="4.6" xmlns:e="http://ant.apache.org/ivy/extra" /> <publications xmlns:e="http://ant.apache.org/ivy/extra"> <artifact name="Editor/HelloWorld" type="dll" ext="dll" e:guid="80a3616ca19596e4da0f10f14d241e9a" /> </publications> </ivy-module>
一旦保存するか、保存せずにそのままにしておいて上記の情報どおりにフォルダを構成します。 kyusyukeigoは私のニックネームなので自由に変更して構いません。
ivy.xmlを上の画像の所に配置しましょう。
これでモジュールが完成しました。
モジュールマネージャーに「MyFirstModule」が表示されていて、MenuItemが表示されていて、Projectビューにはなにもないのが確認できますか?
ここまで出来たものはこちらからダウンロードできます。 - kyusyukeigo.zip
JsonFxをModule Managerで扱えるようにしてみた
ここのJsonFxを使わせていただきました。
こちらをダウンロードしてください。 - TowerOfBricks.zip
ダウンロードしたTowerOfBricks.zipを解凍してUnityExtensionsフォルダ配下に置けば使用できるようになります。
Unity5からは"Assets/Plugins"フォルダは不要
今までは「PluginsフォルダがAssetsフォルダ直下にないといけない」仕様でした。これにより作成するプラグインのアセットが1つのフォルダ内に収まりきらずに少し残念な気持ちになったものです。
"Assets/Plugins/iOS/SocialConnector.mm" と "Assets/SocialConnector/SocialConnector.cs"のようにAssetsフォルダ配下に2つのフォルダが出来てしまっています。
「プラグイン対象のアセット(.mmとか.jarとかもろもろ)」にPluginInspectorが表示され、使用するプラットフォームを選択することが出来ます。SocialConnector.mmはiOS専用なのでiPhoneにチェックがついていますね。
さて、驚いたことにiOSではFrameworkもPluginInspector上で追加することが出来ます。「このプラグインにはFrameworkが必要」という時に必要なFrameworkを一覧から探しだしてチェックを付けましょう。
今までは手動でXcodeプロジェクトにFrameworkを追加しなければいけなかったり、XCodeEditor-for-Unityを使わなければいけませんでした。Unity5からはその手間が必要なくなる、すばらしいです。
ということで1つのフォルダ内にすべてが収まりました。Pluginsフォルダがありますけど名残というかわかりやすいようにしているだけです。Pluginsフォルダは必要ありません。
- Unity5は現在β段階です。仕様が変わる可能性があります。
俺俺ScriptTemplate
anchan828/ScriptTemplates · GitHub
ScriptTemplates
スクリプトファイルのテンプレート集
ダウンロードしたtxtファイルを{Unity.app}/Contents/Resources/ScriptTemplates
フォルダに配置します。
作成するテンプレートファイルは以下の構成のファイル名にしなければいけません
{priority}-{メニュー名}-{ファイル名}.{拡張子}.txt
例:
120-C# Editor Script-NewEditor.cs.txt 121-C# EditorWindow Script-NewEditorWindow.cs.txt 122-C# EditorCallbacks Script-New EditorCallbacks.cs.txt
priorityは 95-190 が好ましいです。