読者です 読者をやめる 読者になる 読者になる

けいごのなんとか

Unityユーザーとしてのブログ。ギリギリ路線走ってます。

Module Managerを使って自作ライブラリを読み込んでみた

[注意1] これはドキュメントに無く、推奨されていない使い方です。 [注意2] DLLを扱う方法しか調べてません。

Module Managerって?

Add-On系のパッケージ(AndroidiOSWebGL...)を今後モジュールとして管理しましょうということで実装された機能

だけどまだ稼働していない。

これ自前で作ったライブラリをModule Managerで管理できないのかな?

自分で作成しているライブラリがModule Managerで管理できれば「プロジェクト単位」でインポートさせていたものが「Unityアプリ(.app .exe)」単位になります。(正しい使い方をしたときはUnityバージョン単位と言った方がいいんですけどね)

Unity4.6ではModule Managerで「UnityEngine.UI.dll」と「UnityEditor.UI.dll」がインポートされています。しかしUnityEditor上のProjectビューではdllファイルは表示されていません。

f:id:anchan828:20141015215706p:plain

ですがソリューションではdllが参照されています。

f:id:anchan828:20141015215836p:plain

自作ライブラリをModule Manager経由でインポートするまでの備忘録

どうやらUnity4.6ではModuleManagerが有効になっている様子(uGUIのためだと思います)

いろいろ試行錯誤してインポートできるようになりました。まだまだ情報不足ですが最低限のことは出来たので満足です。

Macでしか試していないですが多分Windowsでも出来ると思います。

UnityExtensionsフォルダを見る

Macだと Unity.app/Contents/UnityExtensions

Windowsだと Unity/Data/UnityExtensions <- うろ覚え

f:id:anchan828:20141015220525p:plain

GUISystemフォルダがありました

バージョンが4.6.0で、使用するUnityEngine.UI.dllがあって、Standaloneのビルド時?にはStandaloneフォルダの中のUnityEngine.UI.dllを使用している、というのが何となく分かります(ここは予想です。実際に動作確認はしていません。)

ちなみにEditorフォルダの中はUnityEditor.UI.dllがありました。EditorフォルダはUnityプロジェクトの「Assets/Editor」に相当するのだと思います。

f:id:anchan828:20141015220830p:plain

どうやら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");
    }
}

フォルダ構成はこんな感じです。

f:id:anchan828:20141015223126p:plain

そうして作成された「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は私のニックネームなので自由に変更して構いません。

f:id:anchan828:20141015224157p:plain

ivy.xmlを上の画像の所に配置しましょう。

これでモジュールが完成しました。

モジュールマネージャーに「MyFirstModule」が表示されていて、MenuItemが表示されていて、Projectビューにはなにもないのが確認できますか?

f:id:anchan828:20141015224444p:plain

ここまで出来たものはこちらからダウンロードできます。 - kyusyukeigo.zip

JsonFxをModule Managerで扱えるようにしてみた

ここのJsonFxを使わせていただきました。

こちらをダウンロードしてください。 - TowerOfBricks.zip

ダウンロードしたTowerOfBricks.zipを解凍してUnityExtensionsフォルダ配下に置けば使用できるようになります。

f:id:anchan828:20141015230406p:plain