ちゃこブログ

お絵かきとUnityとBlenderと日記

【Unity制作日記】UnityEditorMemo v2.0ができてきた

なんでこんなに進捗が遅いんだろう?と思ったけど、10月から仕事がかなり忙しかったので自分を責めないようにしてます。
実装したい機能をモリモリつめ込んで生まれ変わったUnityEditorMemo v2.0です。スクショをチラ見せ。

f:id:charcotte:20171223003542p:plain
UnityEditorMemo ver2.0(予定)

まだGUIをいじったりする可能性はありますが、最終チェックというところまで来ています。
年内にはGithubにコミットしようと思ってます。
どんな機能があって、どんな使い方ができるかも後でちゃんとまとめていきたいです。
本当は年内にAssetStoreに申請したかったのですが、ちょっと余裕がなさそう…1月にはストアに出してるようにしたいです( (+_+) )

【Unity】ImporterSettingのメモ

仕事でUnity5.4でテクスチャの自動設定など作っていましたが、5.5で項目がかなり変わったのがトラウマでバージョンが上がるたびにImporterSettingをチェックしてるんです。
各バージョンのImporterSetting事情をまとめることで自分が幸せになれると思い、かなり雑にスクショまとめてました。(雑過ぎてバージョンが正しいかどうか不安です)
新しいバージョンがリリースされるたびにちゃんと更新していく予定。

ImporterSettingのメモ

【Unity】TextureImporterSettingを観察

結構変化あるんじゃないかと思ってみてたけど、5.5の時のような劇的な変化は見られず
並んでるスクショは左から5.5→2017.3です。
TextureTypeごとにまとめてみる。

Inspectorスクショ

Default

5.5.5f15.6.5412017.1.1f12017.2.0f32017.3.0f2
Default設定
2017シリーズでGenerateMipMap関連にいくつか項目が追加

NormalMap

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
NormalMap設定
変化はなし。

Sprite

5.5.5f15.6.5f12017.1.1f12017.2.0f32017.3.0f2
Sprite設定
5.6からNon Power Of Twoが追加された。

LightMap

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
LightMap設定
変化なし。

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
Cookie設定
5.5で編集できなかった項目が5.6から消滅したぐらいで変化なし。

Cursor

comming soon...

EditorGUI

comming soon...

Platform設定

Resize Algorighmが2017.2から追加された。

【Unity】ModelImportSettingを観察

2017あたりから活発に設定できる項目が増えている様子。
並んでるスクショは左から5.5→2017.3です。

Inspectorスクショ

Model設定

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
model設定
5.5→5.6でUse File SizeとWeld Verticiesが増えている。
2017シリーズでいろいろと項目が増え、2017.2からMaterial項目が別タブに分離、2017.3で一項目追加。

Rig設定

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
Rig
特に変化は確認できず

Animation設定

5.5.5f15.6.4f12017.1.1f12017.2.0f32017.3.0f2
Animation
2017.2からAnimated Custom Propertyが追加されている。

Material設定

2017.2.0f3 12017.2.0f3 2
2017.2.0f3のMaterial設定
2017.3.0f2 12017.3.0f2 2
2017.3.0f2のMaterial設定
2017.3でOnDemandRemapが追加されている。

【Unity】AudioImportSettingを観察

2017シリーズでAmbisonicという項目が追加されたぐらいであまり変化のないImporter

Inspectorスクショ

5.5

f:id:charcotte:20171216011043p:plain
5.5.5f1

5.6

f:id:charcotte:20171216011121p:plain
5.6.4f1

2017.1

f:id:charcotte:20171216011203p:plain
2017.1.1f1

2017.2

f:id:charcotte:20171216011505p:plain
2017.2.0f3

2017.3

f:id:charcotte:20171216011505p:plain
2017.3.0f2

【Unity制作日記】Shaderを勉強するぞい

海外のShader解説動画を眺めてると、その説明のわかりやすさに自分にもできそうって気がしてくるので怖いですね。(全然理解できてない顔)

f:id:charcotte:20171210213725g:plain
マウスオーバーでオブジェクトがハイライトされる

サンプルコードが理解できるようになったらちゃんとまとめたいです。

【Unity制作日記】CustomEditorでしくじった話

進捗が非常に遅いですが、UnityEditorMemo ver2.0の開発が進んでいます。途中でCustomEditorに関して学び(失敗)があったのでメモしておきます。

SceneViewにメモを表示する

Hierarchy上にあるGameObjectに対してメモすることができます。選択中のGameObjectのメモをSceneView上に表示する機能を作ったら便利かなと思い実装を試みました。

CustomEditorのOnSceneGUIで表示

Hierarchy上にあるものは必ずGameObjectを持っています。なので、GameObjectのCustomEditorを作成することでSceneView上にメモを表示しようと考えました。UnitySceneMemoはGameObjectのLocalIdentifierInFileをキーにしているので、この方法はとても最適だと思いました。

f:id:charcotte:20171207235420p:plain
表示はできた!
実現できたので大満足(⋈◍>◡<◍)。✧♡
ところがこの時事件は起こっていたのです


f:id:charcotte:20171207235415p:plain
あれ?Inspectorがなんかおかしい・・・
お気づきでしょうか・・・いつもGameObjectのアクティブなどをいじる場所がなくなって違う表示になってしまいました。普段EditorWindowばっかりいじっているため、Inspectorがおかしくなったのに気が付いたのが時間が空いてからだったので何が原因かわからず、UnityをインストールしなおしたりProject作り直したりしてしまいました。
原因はお察しの通り、GameObjectのCustomEditorでした。

GameObjectのCustomEditorは良くないのである

GameObjectのCustomEditorではOnSceneGUIしか記述していませんでした。GameObjectのInspectorがおかしくなったのだから、GameObjectのCustomEditorでOnInspectorGUIをoverrideしてbase.OnInspectorGUI()をすれば直るのかな?と思いましたが直らず。GameObjectがだめならTransformでいいじゃない!とトライしてみましたが、TransformのInspectorもいつもと違う表示になってしまいました。

解決策はないか、色々と検索をしてみました。

もうお気付きかもしれませんが他のスクリプトファイルでCustomEditor(typeof(Object))を使用している場合、どちらか一方のCustomEditorのみ使用されます
github.com

The "GameObjectInspector" class as well as the "TransformInspector" class are internal classes inside the UnityEngine.dll which you can't access without using massive reflection.
You really should avoid replacing the inspector of any built-in object, especially if you plan to release your editor extension for others. It was never intended and isn't recommended to replace the GameObject or Transform inspector.
answers.unity.com


以上のことから、

  • もしユーザーがCustomEditor(typeof(GameObject))を使っていたら、ユーザーに不都合が生じる
  • GameObjectのInspectorに影響のあるエディタ拡張はリリースすべきではない

解決策どころか、そもそもの考え方が良くなかったのですね。
Editor拡張の巨匠たちの言葉により、ほかの人に配布するAssetならばGameObjectに限らずUnityAPIのCustomEditorは非推奨であることを学びました。もちろん該当APIの拡張がメインならよいと思うのですが、UnityEditorMemoようなAssetがやるべきでないなと思います。
今後はこういうことに注意しながら作ろうと思いました。

結局SceneViewの件はどうするの?

メインの話じゃないですが・・・こちらを参考にonSceneGUIDelegateを使いました。(最初からこっち使えばよかったのに)もう少しGUI周りを詰めていければと思います。さて年内提出ができるか否か( ^)o(^ )
tsubakit1.hateblo.jp