しがないエンジニアのブログ

技術的な内容をメモ代わりにつらつら

[Unite2018] エディター拡張マニアクス2018

公式サイト

http://events.unity3d.jp/unitetokyo2018/session-lineup.html#session36

講演者

安藤 圭吾 (ユニティ・テクノロジーズ・ジャパン合同会社)

SlideShare

https://www.slideshare.net/UnityTechnologiesJapan/unite-2018-tokyo2018-96373327

概要

  • ここ3年の間に実装された機能について
    • 公開済・非公開含む

内容

赤文字は開発段階

  • Scripted Importer
    • 未対応ファイルのインポートを自動化
      • 拡張子ごとに作成
        • Unityがサポート済の拡張子には対応できない
      • OnImportAsset()
        ※アセットIDは変更しないこと


  • UI Elements
    • UnityエディタはIMGUIで設定されている
      • UIが複雑になるほどコード量が増える
      • 処理が1箇所にまとまってしまう
    • RMGUIであるUI Elementsの開発
      • まだinternal customer (Unity社員)向け
    • 概要
      f:id:turgure:20180618084539j:plain
      • web知識に当てはめて考えられる
      • 覚えることは4つ + 1つ
        • 4つ
          • Visual Tree
            • Visual Elementと呼ばれるノードからなるグラフ
            • 要はXML
          • UXML
            • Visual Treeの構造をテキスト化し、ファイルとして扱う
            • 要はXMLファイル
          • USS
          • UQuery
        • +1つ
          • Visual Container
            • Visual Treeを格納する領域
            • RMGUIのOnGUIみたいなもの
    • UI Elementsの今後
      • 色々課題が多い
        • Custom Editor
        • Property Drawer
        • Performance
      • おそらく2019.x 後半


  • Graph View
    • 現状
      • まだ社員向け機能
      • まだdocumentもない


  • Shortcut System
    • ex) Shift + A のショートカットコマンドを実装
      • 特定のEditor Windowでショートカットを実装する場合
        • Eventからショートカットコマンドを検知
      • Menu Itemで実装する場合
        • グローバルなコマンドとして実装
    • ショートカット機能の実装は難易度が高い!
      • OSによるキーの違いも考慮する必要
      • ショートカットキーのコンフリクトを調べられない
      • ショートカットのリスト化が困難
    • Unity2018.2から新しいシステムを実装
      • まだプレビュー段階
      • できるようになること
        • ショートカットのリスト化
        • ユーザによるショートカットキー変更
        • ショートカットキーがコンフリクトした場合の修正
    • 実装方法
      • Menu Itemのような実装方法


  • Preset
    • UnityEngine.Objectのプロパティを保存/復元する機能
    • Preset Asset
      • Serialized Propertyを保持している
    • スクリプトで生成/操作が可能
    • Presetに保存した値をデフォルト値として扱える
    • 一番役立つのがインポータ設定


  • Package Manager
    • Assetを配信するシステム
    • Module Managerとの違い
      • コンセプトは同じ
      • 失敗点を改善
        • 扱うモジュールがcore部分に強く依存していて切り離しが難しい
    • 最終的にModule Managerがなくなり、Package Managerに完全移行
    • 基盤システムはnpm
      • そのためパッケージ情報はpackage.jsonで管理
    • 今後
      • unitypackageは過去のフォーマットになる


  • Unity C# Reference
    • 標準機能をエディタ拡張で使いたい
    • 特定のプロパティにアクセスしたい
    • 公式でc#ソースコードを公開
      • 2017.1~2018.2
    • Unity Reference-Only License
      • 再配布・改変は不可
    • 活用法
      1. UnityCSReferenceをクローンする
      2. 必要な機能を調べる
      3. 目的のコードを探す
        • ex) project browser(エディタのUI分割)
      4. どのように実装されているか学ぶ

用語