けいごのなんとか

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

property-drawer-collectionをモジュール化

こういうのがモジュール化に向いていると思う。

使い方

kyusyukeigoフォルダを下記の場所に置く

Macだと Unity.app/Contents/UnityExtensions

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

anchan828/property-drawer-collection at module · GitHub

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

anchan828/monodevelop-code-template-unity · GitHub

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

Unity5からは"Assets/Plugins"フォルダは不要

今までは「PluginsフォルダがAssetsフォルダ直下にないといけない」仕様でした。これにより作成するプラグインのアセットが1つのフォルダ内に収まりきらずに少し残念な気持ちになったものです。

"Assets/Plugins/iOS/SocialConnector.mm" と "Assets/SocialConnector/SocialConnector.cs"のようにAssetsフォルダ配下に2つのフォルダが出来てしまっています。

プラグイン対象のアセット(.mmとか.jarとかもろもろ)」にPluginInspectorが表示され、使用するプラットフォームを選択することが出来ます。SocialConnector.mmiOS専用なのでiPhoneにチェックがついていますね。

f:id:anchan828:20141004003050p:plain

さて、驚いたことにiOSではFrameworkもPluginInspector上で追加することが出来ます。「このプラグインにはFrameworkが必要」という時に必要なFrameworkを一覧から探しだしてチェックを付けましょう。

今までは手動でXcodeプロジェクトにFrameworkを追加しなければいけなかったり、XCodeEditor-for-Unityを使わなければいけませんでした。Unity5からはその手間が必要なくなる、すばらしいです。

f:id:anchan828:20141004003113p:plain

ということで1つのフォルダ内にすべてが収まりました。Pluginsフォルダがありますけど名残というかわかりやすいようにしているだけです。Pluginsフォルダは必要ありません。

f:id:anchan828:20141004003814p:plain

  • 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 が好ましいです。

メインスレッド以外(外部からのアクセスも含む)でコンパイル中かどうかを判断する

{UnityプロジェクトROOT}/Library/ScriptAssembliesを見る。

f:id:anchan828:20140628234704p:plain

CompilationCompleted.txtがなければコンパイル中。あればコンパイル完了済み。

PolymerでUnityWebPlayerを表示するやつ作ったよ

2行(Web Componentsをサポートしてないブラウザでは3行)でWebPlayerを埋め込めるように。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>unity-webplayer</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>
</head>
<body>

<link rel="import" href="https://dl.dropboxusercontent.com/u/153254465/Unity/unity-webplayer.html"/>
<unity-webplayer width="960" height="600" data="https://dl.dropboxusercontent.com/u/153254465/Unity/Game/GoroGoro/GoroGoro.unity3d"/>

</body>
</html>

実際に動いているページ

WebPlayer

簡単に説明

<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>

Web ComponentsをサポートしてないブラウザでPolymer使うために必須。

<link rel="import" href="https://dl.dropboxusercontent.com/u/153254465/Unity/unity-webplayer.html"/>

polymer-elementをインポートする。

<unity-webplayer width="960" height="600" data="Hoge.unity3d"/>

WebPlayerを埋め込むタグ。幅とかWebPlayerデータとかを属性として設定。dataはurlでもいいよ。

TODO

作ったといってもWebPlayer設定部分はまだ作ってないのでいつかやる。

WebPlayerTemplateも簡単なので作る。