Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
こわくないエディター拡張入門
Search
ゲムシャリコ
October 14, 2023
Technology
0
310
こわくないエディター拡張入門
unity1week online共有会 #13にて発表させていただいたスライドです。
動画等は配信をご確認ください。
https://youtu.be/COFWY3BrDEw?t=2786
ゲムシャリコ
October 14, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
OCI Oracle Database Services新機能アップデート(2025/09-2025/11)
oracle4engineer
PRO
1
150
MapKitとオープンデータで実現する地図情報の拡張と可視化
zozotech
PRO
1
140
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
1
690
文字列の並び順 / Unicode Collation
tmtms
3
570
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
120
世界最速級 memcached 互換サーバー作った
yasukata
0
340
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
690
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
720
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
180
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
400
AWSセキュリティアップデートとAWSを育てる話
cmusudakeisuke
0
260
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
1.1k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Cult of Friendly URLs
andyhume
79
6.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
こわくない エディター拡張入門 ゲムシャリコ 2023/10/14 unity1week 共有会 #13 (お題: 1ボタン)
自己紹介 • 情報系大学 2年生 • ゲームプログラマー志望 • unity1week参加 3回目 @gameshalico
ゲムシャリコ
Orbit 重力2Dアクション 自転に沿って動いたり 公転に沿って動いたり 総合10位(発表時)
エディター拡張? Unityエディターをカスタマイズするもの ヒエラルキーの見た目を整えたり インスペクタにボタンを追加したり
エディター拡張で時短 ちま……ちま…… インスペクターから値を調整 ドラッグ移動で爆速調整
Orbitでの実装 書いたコードはこれだけ!
なんだか難しそう? 見慣れない構文や見たことない関数だらけで 尻込みしてしまいがち? 一回やってみると意外と単純 作業効率UPで作品のクオリティもUP
作ってみよう : 2点間を移動するギミック 本題ではないのでゲーム側の実装は割愛(配布あり)
今回作るもの ハンドルを使って目標点を移動できるようにする
実装 using UnityEditor; using UnityEngine; [CustomEditor(typeof(MoveBetween))] public class MoveBetweenEditor :
Editor { private void OnSceneGUI() { MoveBetween moveBetween = (MoveBetween)target; EditorGUI.BeginChangeCheck(); Vector3 position = Handles.PositionHandle(moveBetween.destination, Quaternion.identity); if(EditorGUI.EndChangeCheck()) { Undo.RecordObject(moveBetween, "Change Destination"); moveBetween.destination = position; } } }
Editorフォルダの作成 「Editor」という名前のフォルダを作成する エディター拡張のScriptはここに入れる Editorフォルダ以下はビルドに含まれない Scripts Editor 別のフォルダとして用意 通常のスクリプト エディター拡張の スクリプト
※ 階層は自由 参考: https://docs.unity3d.com/ja/2023.2/Manual/SpecialFolders.html
using UnityEditor; エディター拡張に関するクラスは UnityEditor名前空間にある。 using UnityEditorを忘れない。 大体のIDEで補完してくれるので こんなのあったな、ぐらいでOK。 ビルドに含まれない コードでのみ利用できる
using UnityEditor; using UnityEngine; クラス等をグループ化して まとめるもの。 各クラスはUnityEditor.Editor のような形で表現できるが、 using で省略できる。 名前空間 参考: https://docs.unity3d.com/ScriptReference/UnityEditor.html
[CustomEditor(typeof(XXX))] このクラスはXXX型のエディター拡張だよ、という宣言 Unity側に教えてあげるイメージ 指定した型の情報を取得する。 型を変数に入れられる形に変換する。 []で囲まれてるやつをAttributeといい、 クラスやメンバーに情報を付加できる。 typeof演算子 Attribute [CustomEditor(typeof(MoveBetween))]
public class MoveBetweenEditor : Editor 参考: https://docs.unity3d.com/ScriptReference/CustomEditor.html
class XXX : Editor MonoBehaviourみたいなもの。 MonoBehaviour(スクリプト)用の エディター拡張のクラスは、 Editorクラスを継承 させる。 [CustomEditor(typeof(MoveBetween))]
public class MoveBetweenEditor : Editor { …… } ScriptableObjectの エディターを拡張するときも Editorクラスを継承して使う。 ScriptableObject Editor MoveBetweenEditor 継承 親 子 参考: https://docs.unity3d.com/ScriptReference/Editor.html
private void OnSceneGUI() { …… } OnSceneGUI() Unityから呼ばれるイベント関数。 Updateみたいなイメージ。 ヒエラルキー上で
選択されているときに呼ばれる。 シーンビューの表示を拡張する。 インスペクターが表示されるときに呼ばれる インスペクターの機能を拡張できる。 UIToolkitではCreateInspectorGUIを使う。 OnInspectorGUI() 2 1 「2」を選択中 「2」のOnSceneGUIが呼ばれている 参考: https://docs.unity3d.com/ScriptReference/Editor.html
this.target 選択している拡張対象のオブジェクト。 Editorクラスのpublic変数。 UnityEngine.Object型で入っているので キャスト(型変換)して使う必要がある。 MoveBetween moveBetween = (MoveBetween)target; 万物の祖。Unity関係のオブジェクトはだ
いたいこいつを継承している。 UnityEngine.Object 「1」を選択中 参考: https://docs.unity3d.com/ja/current/ScriptReference/Editor-target.html
EditorGUI.BeginChangeCheck() EditorGUI.EndChangeCheck() : bool これに囲まれたGUI要素(後述)が 変更されたかを検知する。 EditorGUI.BeginChangeCheck(); …… if(EditorGUI.EndChangeCheck()) {
…… } BeginChangeCheck EndChangeCheck PositionHandle 変更されてる?👀👀 あったよ!(true) or なかったよ!(false) 変更見てるよ! 参考: https://docs.unity3d.com/ja/current/ScriptReference/EditorGUI.BeginChangeCheck.html
Handles.PositionHandle (Vector3 position, Quaternion rotation) : Vector3 移動できるハンドルを制御するGUI要素。 EditorGUI.Begin/EndChangeCheck で囲み、変更を検知する。
Vector3 position = Handles.PositionHandle( moveBetween.destination, Quaternion.identity ); 真ん中の半透明の面を ドラッグすると平面で移動 できるって知ってました? 私は知りませんでした。 参考: https://docs.unity3d.com/ja/current/ScriptReference/Editor-target.html
Undo.RecordObject (Object objectToUndo, string name) アンドゥ(Ctrl+Z)に対応させる。 オブジェクトを変更する直前に呼び出す。 Undo.RecordObject( moveBetween, "Change
Destination“ ); moveBetween.destination = position; Edit>Undo History で確認できる 参考: https://docs.unity3d.com/ja/current/ScriptReference/Undo.RecordObject.html
ね?簡単でしょ? using UnityEditor; using UnityEngine; [CustomEditor(typeof(MoveBetween))] public class MoveBetweenEditor :
Editor { private void OnSceneGUI() { MoveBetween moveBetween = (MoveBetween)target; EditorGUI.BeginChangeCheck(); Vector3 position = Handles.PositionHandle(moveBetween.destination, Quaternion.identity); if(EditorGUI.EndChangeCheck()) { Undo.RecordObject(moveBetween, "Change Destination"); moveBetween.destination = position; } } }
プロジェクト配布 GitHubにて今回の プロジェクトを配布中 今回紹介できなかった MoveBetweenの実装も コメント追記済み https://github.com/gameshalico/unity-custom-editor-sample-move-between
次のステップ • エディター拡張の記事を探して 自分でも実装してみる • 公式のマニュアルを読んでみる • UIToolkitはいいぞ(情報少なめ)
ご清聴ありがとうございました