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フォルダ配下に置けば使用できるようになります。