SlideShare a Scribd company logo
Unityと.NET
Aiming 大阪 開発グループ
松田理孝
自己紹介
● 2012年新卒エンジニア
● .NET/Mono/C#er
○ 今の業務はC++
○ 担当はWebAPI、鯖、蔵、サポート、メンテ、KPT
■ 浅く広く
● 好きなゲーム
○ ブラフ(ボードゲーム)
○ ガンスリンガーストラトス(アーケード)
○ Tokyo 7th シスターズ(iOS)
● 業務Unity暦
○ 2年くらい前に半年ほど
自己紹介
● 好きな食べ物
○ ホワイトチョコレート
○ イリー(エスプレッソ)
○ ジャック・ダニエル(ウィスキー)
● 趣味
○ テニス
○ アクアリウム
● 休日はイラストレータ
○ 趣味の延長
はじめに
● セッションの動機
○ ゲームエンジンとしてのUnityは優秀
○ しかし不幸になる人が多いのは何故か
はじめに
● セッションの目的
○ .NET/Monoから見たUnityとは何か
○ Unityを使う上で.NETにできる事
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード
6. UnityとDLL
7. .NETをさらに有効活用していくには
.NET Frameworkとは
● Microsoftが開発したアプリケーション開発、実
行環境
● .NET FrameworkはCLRにその他ライブラリ群
を加えたものと言える。
○ Wikipediaより
お前は何を言ってるんだ?
.NET Frameworkは巨大
● まだまだ序の口
○ 基本ライブラリ
○ UI(WPF、XNA(MonoGames))
○ Web(OWIN, One ASP.NET)
○ データアクセス(EF、ADO.NET)
○ DIコンテナ(MEF)
○ 言語統合クエリ(LINQ)
○ 動的言語ランタイム(DLR)
○ ReactiveExtensions
○ 非同期(async/await)
○ 実行環境(CLR、Mono)
.NETに関わる部分も巨大
● 連携技術
○ Visual Studio
○ Nuget
○ Team Foundation Server
■ Visual Studio Online
○ Microsoft Azure
■ Hyper-V
■ Windows Server
■ SQL Server
○ WinRT(Windows Store App)
○ Win32 API
○ etc...
.NETは巨大過ぎてわからない
● MSが関わる部分ほとんどに関わるから巨大
● 最近はオープンソース化もしてるし
でも実際にやることって
.NETでは役割は2つにわかれている
ランタイム上で
中間言語を実行する
各言語(C#など)を
中間言語に変換する
.NETでは役割は2つにわかれている
ランタイム上で
中間言語を実行する
各言語(C#など)を
中間言語に変換する
中間言語 #とは
Common Intermediate Language
● 共通中間言語
○ .NETに対応している全ての言語は、コンパイラによって
この中間言語(のバイナリ)に変換される
■ UnityだとC#、Boo、JScript.NET
■ 他にはF#、VB.NET、C++/CLIなど
○ バイナリを逆コンパイルするとテキスト形式になる
■ 一応、人間が読める程度
■ 直接編集できる
○ 自分で編集したものを再コンパイルすれば当然使える
■ マシン語のアセンブラと同じ
Common Intermediate Language
● .NETランタイムに対するアセンブリ言語
○ アセンブリレベルでオブジェクト指向をサポート
○ 自分で直接エディタで書いてもOK
■ ちなみにC#コンパイラはCILの全ての機能をサポー
トしていない
● 実行時パフォーマンスや開発効率などを考えてそうなっている
● .NETランタイムはこの中間言語を、各環境に合
わせたマシン語に実行時コンパイルする
○ JITと呼ばれる
Common Intermediate Language
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
Common Intermediate Language
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
C#コンパイラ
Common Intermediate Language
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
C#コンパイラ ランタイム
Common Intermediate Language
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
C#コンパイラ ランタイム
IL逆アセンブラ ILアセンブラ
おさらい
● コンパイラは中間言語のバイナリを吐く
○ .NETの各ライブラリ等は、このバイナリの状態でやり取
りされる
■ マネージドなDLLという事
■ みんなが泥沼に嵌ったネイティブのDLLとは根本的
に仕組みが違う
○ 当然Roslyn(次期C#/VBコンパイラ)でも変わらない
● ネイティブを吐くときに必要なリンクが無い
○ ビルドが非常に高速
○ リンク作業はランタイムが動的に行う
アジェンダ
1. .NETとは
2. .NETとMonoの関係 ←まだここ
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード
6. UnityとDLL
7. .NETをさらに有効活用していくには
Mono
● .NET Framework互換環境を実現するための
オープンソースのソフトウェア群
● 共通言語基盤 (CLI) の実装やC#のコンパイラ
などが含まれる
○ Wikipediaより
お前は何を言ってるんだ?
実はこの図、.NETに限定していない
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
IL逆アセンブラ ILアセンブラ
C#コンパイラ ランタイム
.NETとMonoの比較
● C#コンパイラ
○ csc.exe (.NET)
○ mcs (Mono)
■ コマンドライン引数も同じようになってる
● つまり、XamarinStudioからRoslynを使うことも可能
● 実行方法
○ Windows上では、exeのメタデータを読み込んで.NETラ
ンタイム上で自動で動く
○ 例えばLinux上のMonoだとコマンドラインで動かす
■ mono hogehoge.exe
コンパイラとランタイムを置き換えると
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
IL逆アセンブラ ILアセンブラ
csc.exe
mcs
CLR(.NET)
Mono
.NETとMonoの比較
● 中間言語は実行環境に依存しないので
○ csc.exeで作成したexeファイルがMono上で動く
○ その逆も然り
■ ただMono上で実装されていない機能、またはその
逆等もあるので注意
● .NETは他のMS製品と連携できる
○ IISと連携したASP.NETなどはデバッグが非常に楽
■ IE/VisualStudioを使って徹底的にやれる
○ MonoだとApacheで動かすことになるので面倒
■ できなくも無いレベル
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割 ←ここ
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード
6. UnityとDLL
7. .NETをさらに有効活用していくには
ゲームを作るうえでのUnityの役割
● Unity
○ みんな大好きゲームエンジン
■ ありがちな名前でいろいろ被ってややこしい
MO・MMOで必要なサービス
サーバ
クライアント
ツール
MO・MMOで必要なサービス
サーバ
● リアルタイム系
○ C++
● WebAPI系
○ ruby on rails
○ Python
○ PHP
クライアント
MO・MMOで必要なサービス
● Cocos2d-x
● Unity
● Win32/DirectX
● Flash(AIR)
ツール
MO・MMOで必要なサービス
● 設定系
○ Excel
○ Unity
○ その他ツール
■ WPFとか?
● サポート系
○ ruby on rails
● 運用系
○ シェルスクリプト
○ ロガー
Unityの役割とは
● クライアント
○ 描画エンジン
○ 物理エンジン
● 設定ツール(レベルデザイン)
○ 細かな数値設定には向いてない気がする
■ 膨大な数の武器とか美麗カードの設定とか
● を、マルチプラットフォームで実現できる
○ マルチプラットフォームも2つに分けられて、
■ Unity自体がWinでもMacでも動く
■ 成果物をAndroidやiOS向けに出力できる
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割 ←ここ
5. Unityとスクリプトコード
6. UnityとDLL
7. .NETをさらに有効活用していくには
UnityにおけるMonoの役割とは
● クライアント
○ 描画エンジン
○ 物理エンジン
● 設定ツール(レベルデザイン)
● を、マルチプラットフォームで実現できる
○ マルチプラットフォームも2つに分けられて、
■ Unity自体がWinでもMacでも動く
■ 成果物をAndroidやiOS向けに出力できる
この部分!
Monoのサブプロジェクト
● Monodroid
● Mono touch
○ 今は名前が変わって
■ Xamarin Android
■ Xamarin iOS
○ みたいになってる
● Monoは実行環境
○ ということは?
UnityにおけるMonoとは
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
IL逆アセンブラ ILアセンブラ
C#コンパイラ ランタイム
そうか、中間言語をAndroidやiOSで
動くようにしているのか!!
Unityと.NET
Unity5では
● Androidなんかでも、マネージドコードを送らず
に、iOSと同じAOTでネイティブコードを送って
パフォーマンスを上げようって言う話が出ている
らしい
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード ←ここ
6. UnityとDLL
7. .NETをさらに有効活用していくには
Unityとスクリプトコード
● Unityで使える言語
○ C#
■ JScript.NET
● Boo
○ もうC#だけでいいよね
■ 変数小文字だったりするのはJScript由来だけど
● Unityで使えるC#のバージョン
○ 3.0
C# 3.0で使える構文
● 型推論var
● 拡張メソッド
● ラムダ式
● LINQ
○ from x in numbers where …
○ numbers.Where()....
● 匿名型
○ var point = new { X = 0, Y = 0 };
● C# 2.0からのもの
○ ジェネリクス
他言語から見たら今風だけど
● C# 4.0
○ DLR
○ Task
● C# 5.0
○ async/await
● 有意義に使いたい
● C# 6.0
○ Roslyn
■ C#コンパイラ
■ IL吐くだけだから基準満たせばUnityでも使えそう
Unityにおけるスクリプトとは
.cs
(テキスト)
.dll 
.exe
(バイナリ)
マシン語
.il
(テキスト)
IL逆アセンブラ ILアセンブラ
C#コンパイラ ランタイム
Unityにおけるスクリプトとは
● DLLに変換できればなんでもいい
● ただし
○ UnityのMonoが認識できるもの
○ Unityのライセンス内のもの
■ 無償版だとモバイルでSocket使えないよ
● だからJScriptやBooでも書ける
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード
6. UnityとDLL ←ここ
7. .NETをさらに有効活用していくには
C#とDLL
● Dynamic Link Library
○ しつこいけど、ネイティブのDLLとは別物
● 単純にクラスをまとめたという認識でOK
○ 厳密には色々あるけどまた今度
DLL
namespace A;
class A;
class B;
class C;
namespace B;
class A;
class B;
class C;
UnityとDLL
● Unityでは2つのライブラリが用意されてる
○ UnityEngine.dll
■ ゲームそのものに必要なクラス群
○ UnityEditor.dll
■ エディタを拡張するのに必要なクラス群
● Unityにも自作のDLLを放り込める
○ Assetフォルダ内に配置するだけ
Unity依存な部分をライブラリに
UnityEngine.dll
MyGameLibrary.dll
Assetフォルダ内に
入れた
もともと見てる
Unity依存な部分をライブラリに
UnityEngine.dll
MyGameLibrary.dll
MonoBehaviour使いたい><。
Unity依存な部分をライブラリに
UnityEngine.dll
MyGameLibrary.dll
Unityが見てるDLLを
参照すればいいだけ
Unityのエディタ拡張も共有
UnityEditor.dll
MyEditor.dll
他チームで使いたいときは、
このDLL一個送るだけで良い
なぜDLLに分離するのか
● そもそも、Unityのコンパイルの手順は
○ Asset内のスクリプトをまとめDLLの様なものにする
○ DLLをリフレクション使って解析してアレコレしてるはず
■ DLLにしてもそのまま.cs書いても変わらない
● ちゃんと動作保障できたDLL単位で分離できれ
ば、次のプロジェクトに対する資産にもなる
○ この辺.NETの十八番のようなもの
■ Win32で痛い目見た経験
■ Fakesはよ、VS Proにはよ
アジェンダ
1. .NETとは
2. .NETとMonoの関係
3. ゲームを作るうえでのUnityの役割
4. UnityにおけるMonoの役割
5. Unityとスクリプトコード
6. UnityとDLL
7. .NETをさらに有効活用していくには ←最後
開発に時間はかけていられない
● で、求められる内容
○ もっとリッチに、快適に
○ リアルタイム通信
■ ないかもしれないけど
○ 仕様変更とか余裕で対処してね
○ サーバとか落としていられない
○ アプリだって落としていられない
■ 審査にも落としていられない
○ 設定だって効率よくしたい
○ サポートエンジニアなんて沢山割けない
○ 人を増やすほど人海戦術の効果は薄くなっていく
■ 人を増やしても開発期間伸びるでしょ?
MO・MMOで必要なサービス
サーバ
クライアント
ツール
MO・MMOで必要なサービス
サーバ
● リアルタイム系
○ C++
○ C#/.NET
● WebAPI系
○ ruby on rails
○ Python
○ PHP
○ ASP.NET
● データベース
○ ADO.NET
■ EntityFramework
クライアント
MO・MMOで必要なサービス
● Cocos2d-x
● Unity(C#/Mono)
○ 他にもC#あるはず…
● Win32/DirectX
● Flash(AIR)
ツール
MO・MMOで必要なサービス
● 設定系
○ Excel
○ Unity
○ その他ツール
■ WPFとか
● サポート系
○ ruby on rails
○ ASP.NET
● 運用系
○ PowerShell
共通化した時のメリット
● ちゃんと動作保障できたDLL単位で分離できれ
ば、資産になる
○ 設定ファイルの読み書きDLLを各部分から使用できるよ
うになる
○ サポートツール上のログ検索ロジックの入ったDLLを、
運用中のサーバにアクセスしたPowerShellで叩けるよ
うになる(ツールを開かなくても良い)
○ Unityに依存する部分を少なく設計すれば移植も楽
● コードを共通化することで保守部分が減る
● 車輪の再発明も少なくなる
.NET Frameworkを手に入れられる
● まだまだ序の口
○ 基本ライブラリ
○ UI(WPF、XNA(MonoGames))
○ Web(OWIN, One ASP.NET)
○ データアクセス(EF、ADO.NET)
○ DIコンテナ(MEF)
○ 言語統合クエリ(LINQ)
○ 動的言語ランタイム(DLR)
○ ReactiveExtensions
○ 非同期(async/await)
○ 実行環境(CLR、Mono)
.NETに関わる部分も使えるようになる
● 連携技術
○ Visual Studio
○ Nuget
○ Team Foundation Server
■ Visual Studio Online
○ Microsoft Azure
■ Hyper-V
■ Windows Server
■ SQL Server
○ WinRT(Windows Store App)
○ Win32 API
○ etc...
.NETは巨大
=共有化の可能性が無限大
ご静聴ありがとうございました

More Related Content

PDF
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
PPTX
UniRxでMV(R)Pパターン をやってみた
PDF
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
PPTX
shared_ptrとゲームプログラミングでのメモリ管理
PDF
Epic Online Services でできること
PDF
Unity開発で使える設計の話+Zenjectの紹介
PPTX
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
PPTX
大規模ゲーム開発における build 高速化と安定化
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
UniRxでMV(R)Pパターン をやってみた
UE4 MultiPlayer Online Deep Dive 実践編2 (ソレイユ株式会社様ご講演) #UE4DD
shared_ptrとゲームプログラミングでのメモリ管理
Epic Online Services でできること
Unity開発で使える設計の話+Zenjectの紹介
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
大規模ゲーム開発における build 高速化と安定化

What's hot (20)

PDF
Assembly Definition あれやこれ
PPTX
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
PDF
UE4でマルチプレイヤーゲームを作ろう
PDF
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
PPTX
ゲーム開発とデザインパターン
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
PPTX
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
PDF
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
PDF
UniRx完全に理解した
PDF
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
PPTX
UE4におけるLoadingとGCのProfilingと最適化手法
PDF
UE4とUnrealC++について
PPTX
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
PDF
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
PDF
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
Assembly Definition あれやこれ
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
UE4でマルチプレイヤーゲームを作ろう
UE4×Switchで60FPSの(ネットワーク)対戦アクションをなんとかして作る! | UNREAL FEST EXTREME 2020 WINTER
ゲーム開発とデザインパターン
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
MetaHumanサンプル解体新書 UNREAL FEST EXTREME 2021 SUMMER
【Unite Tokyo 2019】Understanding C# Struct All Things
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
UniRx完全に理解した
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
UE4におけるLoadingとGCのProfilingと最適化手法
UE4とUnrealC++について
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
【Unite Tokyo 2018】その最適化、本当に最適ですか!? ~正しい最適化を行うためのテクニック~
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
Ad

Viewers also liked (11)

PDF
Unity に於けるモバイルプラットフォーム向けビルド自動化のおはなし
PDF
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
PDF
ゲームエンジンとMVC
PPTX
HoloLens x Graphics 入門
PPTX
Cloud Native Application on DEIS by using 12 factor
PPTX
Preparation to Start the Microservice for Java EE developers
PDF
Unity道場aseスペシャル補足資料
PDF
Unity dojo amplifyshadereditor101_jpn-jp
PPTX
HttpClient詳解、或いは非同期の落とし穴について
PDF
Binary Reading in C#
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Unity に於けるモバイルプラットフォーム向けビルド自動化のおはなし
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ゲームエンジンとMVC
HoloLens x Graphics 入門
Cloud Native Application on DEIS by using 12 factor
Preparation to Start the Microservice for Java EE developers
Unity道場aseスペシャル補足資料
Unity dojo amplifyshadereditor101_jpn-jp
HttpClient詳解、或いは非同期の落とし穴について
Binary Reading in C#
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Ad

Similar to Unityと.NET (20)

PPTX
C# で i phone ゲーム開発
PPTX
Unity ゲーム開発
PPTX
Unity講座
PDF
Webプログラマの為のUnity入門
PDF
Unityを触ってみた話
PDF
Let’s study unity
PDF
ゲムつくプログラミング講座
PPTX
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
 
PDF
いろいろ見せますLord of Knightsのクライアント開発事例紹介
PDF
Techhills 6.18
PPTX
はじめてのUnity教室 講義用ppt
PPTX
スマートフォン勉強会 関東 19
PDF
Unity講習会(初級)
PDF
Unity初心者が2 d sprite使ってゲームを作ってみた【前半戦】
PDF
波に乗ってUnity3Dを使ってみているんだが (Ameba x Pixiv 合同勉強会LT)
PDF
UnityでVRアプリを作ってみよう! (講演編)
PPTX
ゲームエンジンの違い
PDF
Androidアプリ開発を楽にするために
PPTX
Unity って何?
PDF
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
C# で i phone ゲーム開発
Unity ゲーム開発
Unity講座
Webプログラマの為のUnity入門
Unityを触ってみた話
Let’s study unity
ゲムつくプログラミング講座
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
 
いろいろ見せますLord of Knightsのクライアント開発事例紹介
Techhills 6.18
はじめてのUnity教室 講義用ppt
スマートフォン勉強会 関東 19
Unity講習会(初級)
Unity初心者が2 d sprite使ってゲームを作ってみた【前半戦】
波に乗ってUnity3Dを使ってみているんだが (Ameba x Pixiv 合同勉強会LT)
UnityでVRアプリを作ってみよう! (講演編)
ゲームエンジンの違い
Androidアプリ開発を楽にするために
Unity って何?
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -

More from AimingStudy (12)

PDF
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
PDF
デザイナーがMELスクリプトを書いて工数削減した話
PDF
剣と魔法のログレス(PC版)の自慢と課題
PDF
3D描画基礎知識
PPTX
Node.jsではじめるサーバ構築
PPTX
AWSではじめるお手軽オンラインゲーム開発
PPTX
C++のビルド高速化について
PPT
SVN経験者のためのGIT入門
PDF
Flashをcocos2dxで再生
PPTX
1日で始めるglsl
PPTX
Adobe scoutの紹介
PDF
C++によるソート入門
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
デザイナーがMELスクリプトを書いて工数削減した話
剣と魔法のログレス(PC版)の自慢と課題
3D描画基礎知識
Node.jsではじめるサーバ構築
AWSではじめるお手軽オンラインゲーム開発
C++のビルド高速化について
SVN経験者のためのGIT入門
Flashをcocos2dxで再生
1日で始めるglsl
Adobe scoutの紹介
C++によるソート入門

Unityと.NET