Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
(ゆーゆー)mXparserとInternalsVisibleToを駆使して超便利なUnity...
Search
akatsukinewgrad
August 02, 2021
Programming
0
1.6k
(ゆーゆー)mXparserとInternalsVisibleToを駆使して超便利なUnityエディタ拡張を作った話
akatsukinewgrad
August 02, 2021
Tweet
Share
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
130
成果発表資料.pdf
akatsukinewgrad
0
2k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
560
正規表現とReDoS.pdf
akatsukinewgrad
0
540
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
590
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
510
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
690
7分でわかるアカツキゲームス
akatsukinewgrad
0
560
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
880
Other Decks in Programming
See All in Programming
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
260
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
440
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
180
PipeCDのプラグイン化で目指すところ
warashi
1
250
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
1
3.6k
ふつうの技術スタックでアート作品を作ってみる
akira888
0
340
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
550
エンジニア向け採用ピッチ資料
inusan
0
180
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
590
エラーって何種類あるの?
kajitack
5
340
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
190
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Become a Pro
speakerdeck
PRO
28
5.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Agile that works and the tools we love
rasmusluckow
329
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Fireside Chat
paigeccino
37
3.5k
Adopting Sorbet at Scale
ufuk
77
9.4k
Transcript
Unityエディタ拡張 mXparser と InternalsVisibleTo を駆使して Unityエディタ拡張 を作った話 齋田悠生@ゆーゆー
自己紹介 •齋田悠生@ゆーゆー •21卒クライアントエンジニア(今秋入社予定) •趣味 = ラブライブ! •昨日放送の 「ラブライブ!スーパースター!!」で寝不足
Unity、こういうことありませんか?
Unity、こういうことありませんか? オブジェクトを いい感じにソートしたい! オブジェクト名を 規則的に変更したい! オブジェクトを 整列させたい! 数式を使って 座標とか決めたい!
作りました
「Hierarchy Utility」 • 機能一覧 • 数式による座標・角度・スケール設定 • PowerPointやPhotoshopにあるような「整列」 • Blenderにあるような「配列」
• 一括名前変更 • 一括連番付け • 座標、名前によるソート • 数式によるフィールド、プロパティ設定 • 数式によるフィルタリング
数式による座標・角度・スケール設定 一様乱数 i = Hierarchy上の 選択番号 n = 選択されている オブジェクト数
整列 中央揃え 等間隔に配置
配列 指定したオブジェクトを 軸にして円状に配列 配列する個数 指定した間隔で 直線状に配置
一括名前変更 置換前の 正規表現 置換後の 正規表現
一括連番付け 書式 開始イン デックス
などなど…
mXparser • 文字列としての数式を計算できるライブラリ • Hierarchy Utilityの数式処理は全部コレ 【使い方】 1. http://mathparser.org/mxparser-downloads/ からダウンロード
2. Pluginsフォルダ内に.NET用のDLLファイルを入れる 3. で使えるようになる using org.mariuszgromada.math.mxparser;
mXparser • ビルトイン関数が大量に存在 • 三角関数はもちろん、πなどの定数、乱数も使用可能 • コード例 var exp =
new Expression("tan(x)"); exp.addArguments(new Argument("x", "pi/4")); Debug.Log(exp.getExpressionString() + " = " + exp.calculate());
実装に苦戦した部分 • Prefabの複製時、構造を維持したままコピーできない…!!!! • を使うと、Prefabじゃなくなってしまう • を使っても、 「GameObjectの子のPrefab」を構造を保ってコピーするのは大変だし、 値の変更を正しく反映させるのも難しい… •
う~~~~~~~ん… Instantiate PrefabUtility.InstancePrefab
待てよ…?
いつもやってる Ctrl+D が使えれば最強では??
Ctrl+Dの源を探しに行く • GitHubに上がっているUnityの内部コードで「Duplicate」を検索
Ctrl+Dの源を探しに行く •発見!!!!!!!!!!!!
Ctrl+Dの源を探しに行く
Ctrl+Dの源を探しに行く •internalやんけ!!!!!!!!!!!!!!!!!
リフレクションは面倒だし なんとかならないかなぁ…
なりました
InternalsVisibleTo
InternalsVisibleTo 【参考資料】https://qiita.com/mob-sakai/items/f3bbc0c45abc31ea7ac0 • 特定の名前を持つアセンブリに対して、 internalクラス・メソッドへのアクセスを許可する属性 • リフレクションと異なり、インテリセンスが効く • 実は、UnityEditor.dll は色々な名前のアセンブリに対して
internalクラス・メソッドへのアクセスを許可している • その中の一つが「Unity.InternalAPIEditorBridgeDev.001」
InternalsVisibleTo • internalクラス・メソッドにアクセスしたい C#スクリプトがあるフォルダで Assembly Definition を新規作成 • 名前は 「Unity.InternalAPIEditorBridgeDev.001」
としておく
InternalsVisibleTo • うわぁぁぁぁ 候補がちゃんと出てくる!!!!!!!!!! • うわぁぁ何のエラーもなく internalメソッドが使えている…!!!!!!!!!!
まとめ •mXparser • 文字列としての数式を計算できる! •InternalVisibleTo • Unityの内部機能を簡単に扱える! •どちらもとても便利なので エディタ拡張の際はぜひ!!
Unityエディタ拡張 mXparser と InternalsVisibleTo を駆使して Unityエディタ拡張 を作った話 齋田悠生@ゆーゆー 終