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
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
(ゆーゆー)mXparserとInternalsVisibleToを駆使して超便利なUnityエディタ拡張を作った話
akatsukinewgrad
August 02, 2021
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
180
成果発表資料.pdf
akatsukinewgrad
0
2.2k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
680
正規表現とReDoS.pdf
akatsukinewgrad
0
660
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
710
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
640
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
820
7分でわかるアカツキゲームス
akatsukinewgrad
0
670
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
1.1k
Other Decks in Programming
See All in Programming
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
510
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
630
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
230
React本体のコードリーディング
high_g_engineer
1
150
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
150
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
200
リアルな遅延を測る仕様
kota_yata
1
120
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
280
Cloudflare is Agents
chimame
0
170
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Product Roadmaps are Hard
iamctodd
55
12k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Designing for humans not robots
tammielis
254
26k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
450
The Pragmatic Product Professional
lauravandoore
37
7.4k
Chasing Engaging Ingredients in Design
codingconduct
0
270
Why Our Code Smells
bkeepers
PRO
340
58k
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エディタ拡張 を作った話 齋田悠生@ゆーゆー 終