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
550
正規表現とReDoS.pdf
akatsukinewgrad
0
540
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
580
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
510
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
680
7分でわかるアカツキゲームス
akatsukinewgrad
0
550
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
870
Other Decks in Programming
See All in Programming
C++20 射影変換
faithandbrave
0
460
DroidKnights 2025 - 다양한 스크롤 뷰에서의 영상 재생
gaeun5744
3
180
Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門 / A Guide to Metaprogramming: Lessons from Forbidden Techniques and Their Price
nrslib
3
2k
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
10
1.8k
Java on Azure で LangGraph!
kohei3110
0
120
Gleamという選択肢
comamoca
6
720
インターフェース設計のコツとツボ
togishima
2
710
GoのGenericsによるslice操作との付き合い方
syumai
2
590
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
650
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
22
6k
[初登壇@jAZUG]アプリ開発者が気になるGoogleCloud/Azure+wasm/wasi
asaringo
0
130
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
260
Featured
See All Featured
Become a Pro
speakerdeck
PRO
28
5.4k
Statistics for Hackers
jakevdp
799
220k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
123
52k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Building Adaptive Systems
keathley
43
2.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Language of Interfaces
destraynor
158
25k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
910
A better future with KSS
kneath
239
17k
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エディタ拡張 を作った話 齋田悠生@ゆーゆー 終