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

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】uGUIのコードを編集して動作を改変する

C# Unity エディタ拡張・エディタ機能 Monodevelop・VisualStudio・その他IDE GUI(uGUI/NGUI/旧UI)

今回はUnityの標準UIシステムであるuGUIの改造方法についてです。

uGUIのコンポーネントを改造する

uGUIの各コンポーネントの挙動に+αするだけであれば、uGUIの挙動を改造する必要が無いケースも多々有ります。

例えば、Textコンポーネントに少し追加して、テキストコンポーネントの参照先を元にローカライズする等のシステムを考えた場合、Textを継承したコンポーネントとUnityEngine.UI.TextEditorを継承したコンポーネントを用意すれば、追加アクションを行うコンポーネントを用意出来ます。

f:id:tsubaki_t1:20160727231850p:plain

但し、これでは十分でないケースも多々あります。例えばスクロール中のイベントに少し手を加えたいとか、そんな感じ。

uGUIのコード自体はオープンソースとして公開されているので、そのコードを利用してuGUI自体を改造してみます。

バックアップ

作業を始める前に、バックアップを用意しておきます。

今回の手順ではUnityの中身を改変するので、もしバックアップを取っておらずに事故を起こすと、最悪再インストールになります。

MacUnity.app/Contents/UnityExtensions/Unity/GUISystemをどこか適当なフォルダにコピーしておきます。
WindowはUnityのパス\Data\UnityExtensions\Unity\GUISystem\です。
今回の手順でおかしな挙動をしたら、このバックアップを元に戻します。

uGUIのプロジェクトを取得

uGUIのコードはBitbacketのUnity Technologies/Unity/UIにて公開されています。まずはコレを取得します。

f:id:tsubaki_t1:20160727232151p:plain

取得する場合ダウンロードではなくクローンをお勧めします。何故かと言えば、Unityのバージョンアップ時に変更点を追うのが比較的楽になるからです。あとバグがあった時に治しやすいです。

という事で、クローンします。...からのクローンで、SourceTreeにクローン。

f:id:tsubaki_t1:20160727232938p:plain

次にブランチを自分の使用しているバージョンに合わせます。これ合わせてないと変な動きとかするかもしれないので、一応。

f:id:tsubaki_t1:20160727233342p:plain

プロジェクトの設定

早速、ソースコードを開いてビルド・既存のuGUIを自前のuGUIで上書きしていきます。

まずはUISystem.slnを開きます。ただ単純に開いた場合はUnityでコード編集時にプロジェクト開き直してくれちゃうので、別プロセスとして開きます。

open -n UISystem.sinのパスで開きます。Monodevelopは。

この後、UI Systemのソリューションを選べばUISystem.slnが起動します。

f:id:tsubaki_t1:20160727234404g:plain

続いて、DLLの出力先を設定します。

まずはUnityEditor.UIを右クリックして、オプションを選択。
ビルド>出力タブを選択してUnity.app/Contents/UnityExtensions/Unity/GUISystem/Editorを選択します。
同様に、UnityEngine.UIはUnity.app/Contents/UnityExtensions/Unity/GUISystem/Standaloneを設定、
UnityEngine.UI-EditorはUnity.app/Contents/UnityExtensions/Unity/GUISystemに設定します。

f:id:tsubaki_t1:20160727234911p:plain

f:id:tsubaki_t1:20160727234636p:plain

後はCommand Bでビルドすれば手前のuGUIでUnity標準のuGUIが更新されます。

更新されたか確認する

手っ取り早く、実際に更新できているのか確認します。
ButtonコンポーネントのOnPointerClickに適当にログ出力を追加、Unityでボタンを作って押してみます。

f:id:tsubaki_t1:20160727235606p:plain

f:id:tsubaki_t1:20160727235716p:plain

デバッグする

やっている事は昨日紹介した物と同じなので、mdbさえ作れるならデバッグも可能です。

tsubakit1.hateblo.jp

注意事項

改変の方法は以上ですが、2つ問題があります。

一つ目は、プロジェクト単位ではなくエディタ単位である事。つまり、別プロジェクトで改変前のuGUIを使いたい場合、バックアップから戻してやる必要があります。

もう一つは、多くのプロダクトや開発者は改変前のuGUIを想定しているという事。特にAssetStoreのアセットを使用する場合、uGUIの改変具合によっては不具合を起こすかもしれませんし、プロジェクト内でも意思疎通に問題を起こすかもしれません。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp