<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>環境構築 | 藤原工房</title>
	<atom:link href="https://fujiwarakoubou.jp/category/game-development/kankyokoutiku/feed/" rel="self" type="application/rss+xml" />
	<link>https://fujiwarakoubou.jp</link>
	<description>とあるアプリ開発者のブログ</description>
	<lastBuildDate>Wed, 17 Apr 2024 16:07:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2017/10/cropped-job_programmer.png?fit=32%2C32&#038;ssl=1</url>
	<title>環境構築 | 藤原工房</title>
	<link>https://fujiwarakoubou.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://fujiwarakoubou.jp/category/game-development/kankyokoutiku/feed/"/>
<site xmlns="com-wordpress:feed-additions:1">117887618</site>	<item>
		<title>Unity+MagicOnion+VSCodeの環境構築などの二番煎じ</title>
		<link>https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/</link>
					<comments>https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/#respond</comments>
		
		<dc:creator><![CDATA[fujiwarakoubou]]></dc:creator>
		<pubDate>Sun, 24 Apr 2022 03:58:15 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<category><![CDATA[Unity]]></category>
		<guid isPermaLink="false">https://fujiwarakoubou.jp/?p=1094</guid>

					<description><![CDATA[<p>プリグラ（プリコネ！グランドマスターズ）で少し話題になったMagicOnionを試しに使ってみたいって方が環境構築するときに参考になれば幸いです。結構二番煎じだと思いますが、まだMagicOnionの文献が少ないので少し [&#8230;]</p>
The post <a href="https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/">Unity+MagicOnion+VSCodeの環境構築などの二番煎じ</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_hatena" href="https://www.addtoany.com/add_to/hatena?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Hatena" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pocket" href="https://www.addtoany.com/add_to/pocket?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Pocket" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&amp;linkname=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Ffujiwarakoubou.jp%2F2022%2F04%2F24%2Funity-magiconion-vscode%2F&#038;title=Unity%2BMagicOnion%2BVSCode%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AA%E3%81%A9%E3%81%AE%E4%BA%8C%E7%95%AA%E7%85%8E%E3%81%98" data-a2a-url="https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/" data-a2a-title="Unity+MagicOnion+VSCodeの環境構築などの二番煎じ"></a></p>
<p>プリグラ（<em>プリコネ</em>！<em>グランド</em>マスターズ）で少し話題になったMagicOnionを試しに使ってみたいって方が環境構築するときに参考になれば幸いです。結構二番煎じだと思いますが、まだMagicOnionの文献が少ないので少しでも貢献できればいいな。</p>



<h2 class="wp-block-heading">はじめに</h2>



<p>MagicOnionは、アプリとサーバーをC#言語で統一しgRPCでつないでしまおうという通信フレームワークです。</p>



<p>何でC#言語かというとUnityがC#ってのが影響力大きいと思います（ただUnityのC#は「Unity独自のC#」なので厄介な問題があるんですけどね）。</p>



<p>Unityで使える貴重な通信フレームワーク（他には最近だと開発途上のNetcodeなど）なので詳しく知りたいという人はかなり多いと思いますし、最近は確実に企業での採用実績も増えてきています。</p>



<p>ただMagicOnion、環境構築が少しクセがあります。</p>



<p>アプリとサーバーを共通化する以上、環境構築の際に必要な知識もアプリ側、サーバー側と、今まで別々に担当者が分かれていた両面必要になるので、そこが曲者となってきます。</p>



<p>この記事では、その辺りも踏まえて解説していこうと思います。</p>



<h2 class="wp-block-heading">ディレクトリ構成の完成予想図</h2>



<p>まず最初に全体像を見てもらった方が分かりやすいかな。</p>



<p>MagicOnionは共通化という概念の自由度の高さから、各々のプロジェクトの都合に合わせて様々な構成を作ることができます。</p>



<p>逆に言えば千差万別になりやすく、それ故に初学者が目標を見失いやすい部分があります。</p>



<p>分かりやすさ重視として、私は今回こんな感じのディレクトリ構成にしました。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/312c86a099b27382f4a2675763a41164-3.png?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="596" height="890" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/312c86a099b27382f4a2675763a41164-3.png?resize=596%2C890&#038;ssl=1" alt="" class="wp-image-1101" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/312c86a099b27382f4a2675763a41164-3.png?w=596&amp;ssl=1 596w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/312c86a099b27382f4a2675763a41164-3.png?resize=201%2C300&amp;ssl=1 201w" sizes="(max-width: 596px) 100vw, 596px" /></a><figcaption class="wp-element-caption">VisualStudioCodeでの全体図</figcaption></figure>



<p class="has-text-align-left">オレンジ：Unityプロジェクト<br>赤：アプリ側<br>黄緑：サーバー側</p>



<p>MagicOnion2というひとつの大きなUnityプロジェクト（3Dテンプレート）の中に、サーバー用のフォルダが内臓されている形になっています。</p>



<p>サーバー用のフォルダ（Server）をUnityプロジェクトの外に出して管理することも出来ますが、今回は分かりやすさ重視で。</p>



<p>この完成形を目指して環境構築を始めます。</p>



<h2 class="wp-block-heading">Unityプロジェクトの作成</h2>



<p>アプリ側の環境構築から行きますね。</p>



<p>Unityプロジェクトの作成については特に不要かと思いますが、UnityHubから「新しいプロジェクト」→テンプレート「3D」→エディタバージョン「2021.3.0f1」を選んでプロジェクト名（私のはMagicOnion2）を指定して「プロジェクトを作成」って感じです。</p>



<p>※今回はUnity2021での動作確認もかねていました。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/56af0e7bea32d6237691faf7dd128347.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" decoding="async" width="1014" height="585" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/56af0e7bea32d6237691faf7dd128347.png?resize=1014%2C585&#038;ssl=1" alt="" class="wp-image-1103" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/56af0e7bea32d6237691faf7dd128347.png?w=1014&amp;ssl=1 1014w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/56af0e7bea32d6237691faf7dd128347.png?resize=300%2C173&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/56af0e7bea32d6237691faf7dd128347.png?resize=768%2C443&amp;ssl=1 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">UnityHubのデザインが黒基調になった！</figcaption></figure>



<p class="has-text-align-left">プロジェクトが作成出来たら、プロジェクト設定を少し変更する。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" decoding="async" width="1024" height="468" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?resize=1024%2C468&#038;ssl=1" alt="" class="wp-image-1105" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?resize=1024%2C468&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?resize=300%2C137&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?resize=768%2C351&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?resize=1200%2C549&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/4bbfc0eff61b7165611a3b31b1b118be.png?w=1340&amp;ssl=1 1340w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">日本語化は各自やってね！</figcaption></figure>



<p>API互換性レベルを「.NET standard 2.1」から「.NET Framework」に変更する。<br>（理由についてはアプリ実装の部分で解説します）</p>



<p>他所様では「スクリプティングバックエンドをIL2CPPにしなさい」ってあったりしますが、今回は不要です。</p>



<p>IL2CPPはC#をC++として変換する仕組みで、iOSビルドなどに必要になります。<br>（通常はMonoというUnity独自の.NET互換C#コンパイラを使います）</p>



<p>MagicOnionはC#で出来ているので、IL2CPPで構成する場合は同じようにC++変換する作業が必要です。その場合、コードジェネレーター（moc.zip）を使う必要があり環境構築が複雑になります。・・・ので、今回は使いません！</p>



<p>気付いた方もいらっしゃると思いますが、「スクリプティング ランタイム バージョン（Scripting Runtime Version）」という項目が無くなっています。</p>



<p>以前はそこで「.NET 4.x Equivalent」などを選択する必要がありましたが、Unity2019から「.Net3.5」が無くなったので項目が無くなりAPI互換性レベル（Api Compatibility Level）に統一されました。</p>



<p>つまりAPI互換性レベルを「.NET Framework」にしておけば、「.NET 4.x Equivalent」を選択するのと同じになります。</p>



<h2 class="wp-block-heading">MagicOnionをプロジェクトに追加</h2>



<p>公式ドキュメントから<br><a href="https://github.com/Cysharp/MagicOnion#support-for-unity-client">https://github.com/Cysharp/MagicOnion#support-for-unity-client</a></p>



<p>MagicOnionリリースページへ<br><a href="https://github.com/cysharp/MagicOnion/releases">https://github.com/cysharp/MagicOnion/releases</a></p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="755" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?resize=1024%2C755&#038;ssl=1" alt="" class="wp-image-1106" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?resize=1024%2C755&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?resize=300%2C221&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?resize=768%2C566&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/magiconion.png?w=1148&amp;ssl=1 1148w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">moc.4.4.1.zipは今回不要</figcaption></figure>



<p>そして「MagicOnion.Client.Unity.unitypackage」をダウンロードして、Unityプロジェクトにインポートします。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="499" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=1024%2C499&#038;ssl=1" alt="" class="wp-image-1113" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=1024%2C499&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=300%2C146&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=768%2C374&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=1536%2C748&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?resize=1200%2C585&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/cb0eeba7ea370e5093fe4147662801e3.png?w=1886&amp;ssl=1 1886w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<h2 class="wp-block-heading">gRPCをプロジェクトに追加</h2>



<p>公式ドキュメントからgRPC公式ページに行き<br><a href="https://packages.grpc.io/">https://packages.grpc.io/</a></p>



<p>最新の「Build ID」項目にあるリンク→「C#」の「grpc_unity_package.2.47.0-dev202204190851.zip」をダウンロードして展開します。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="476" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=1024%2C476&#038;ssl=1" alt="" class="wp-image-1108" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=1024%2C476&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=300%2C140&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=768%2C357&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=1536%2C714&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?resize=1200%2C558&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc.png?w=1834&amp;ssl=1 1834w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">右下のf15a2c1c-582b-4c51-acf2-ab6d711d2c59</figcaption></figure>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="471" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=1024%2C471&#038;ssl=1" alt="" class="wp-image-1109" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=1024%2C471&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=300%2C138&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=768%2C353&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=1536%2C706&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?resize=1200%2C552&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc2.png?w=1857&amp;ssl=1 1857w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>zip展開した中の「Google.Protobuf」「Grpc.Core」「Grpc.Core.Api」だけをUnityプロジェクトのAsset/Pluginsにコピーします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="272" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?resize=1024%2C272&#038;ssl=1" alt="" class="wp-image-1110" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?resize=1024%2C272&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?resize=300%2C80&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?resize=768%2C204&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?resize=1200%2C318&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/grpc3.png?w=1527&amp;ssl=1 1527w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">zipの中には他にもあるけど、この3つだけでいい</figcaption></figure>



<p>間違って全部コピーすると画像のようなエラーが発生しますが、先ほどの3つのフォルダ以外を削除すれば大丈夫です。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="636" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=1024%2C636&#038;ssl=1" alt="" class="wp-image-1114" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=1024%2C636&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=300%2C186&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=768%2C477&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=1536%2C954&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?resize=1200%2C745&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/20c2bd2a5bf4e3bde16adc8849f3d5d3.png?w=1548&amp;ssl=1 1548w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="550" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=1024%2C550&#038;ssl=1" alt="" class="wp-image-1115" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=1024%2C550&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=300%2C161&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=768%2C412&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=1536%2C825&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?resize=1200%2C644&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/3cf715be6e88431fb78a82041b36cd4d.png?w=1905&amp;ssl=1 1905w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<h2 class="wp-block-heading">MessagePackをプロジェクトに追加</h2>



<p>公式ドキュメントからMessagePackのリリースページに行き<br><a href="https://github.com/neuecc/MessagePack-CSharp/releases">https://github.com/neuecc/MessagePack-CSharp/releases</a></p>



<p>「MessagePack.Unity.2.3.85.unitypackage」をダウンロードしてUnityプロジェクトにインポートします。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="650" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?resize=1024%2C650&#038;ssl=1" alt="" class="wp-image-1111" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?resize=1024%2C650&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?resize=300%2C190&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?resize=768%2C488&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?resize=1200%2C762&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/messagepack.png?w=1315&amp;ssl=1 1315w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">alpha版じゃなくてlatest版で</figcaption></figure>



<p>インポートの際にMagicOnionの「System.Buffers.dll」「System.Memory.dll」「System.Runtime.CompilerServices.Unsafe.dll」「System.Threading.Tasks.Extensions.dll」の重複警告が出ますが上書きしてしまって大丈夫です。</p>



<h2 class="wp-block-heading">VisualStudioCodeの環境構築</h2>



<p>UnityプロジェクトにMagicOnionでアプリを作る準備は出来ました。</p>



<p>次はサーバーと行きたいところですが、その前にVSCodeでC#開発できるように環境構築をします。以下の参考サイト様とやることはほぼ同じです。</p>



<p><em><strong>どうしてもC#をVSCodeで書きたい</strong></em><br><a href="https://qiita.com/_patrush/items/dc8b2f8ea4c59d49c1fd">https://qiita.com/_patrush/items/dc8b2f8ea4c59d49c1fd</a></p>



<p>参考サイトに従って必要な拡張機能をインストール</p>



<figure class="wp-block-image size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="442" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=1024%2C442&#038;ssl=1" alt="" class="wp-image-1120" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=1024%2C442&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=300%2C129&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=768%2C331&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=1536%2C663&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?resize=1200%2C518&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5bbfc433b50bd2209197528ee76ab674.png?w=1717&amp;ssl=1 1717w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">拡張機能の追加はVSCodeの左メニューアイコンのテトリスみたいなマーク</figcaption></figure>



<p>Unityプロジェクトのフォルダを開いて</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="554" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=1024%2C554&#038;ssl=1" alt="" class="wp-image-1118" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=1024%2C554&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=768%2C415&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=1536%2C831&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?resize=1200%2C649&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/5cdf7d85bff97a5096166b40a58083e7.png?w=1899&amp;ssl=1 1899w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">「作業の開始」は閉じてOK</figcaption></figure>



<p>「フォルダーをワークスペースに追加」をやって保存すればワークスペースファイルが作成されるので、サイトの内容をコピペした後、「**/Assets/Scripts/Generated」「**/Assets/Scripts/MagicOnion*」「**/Assets/Scripts/MessagePack」の行をコメントアウトします。</p>



<p>こうするとAssetsのスクリプトも見えるようになります。<br>（参考サイトでは非表示設定だけど、アプリ実装で表示する必要がある）</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="556" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=1024%2C556&#038;ssl=1" alt="" class="wp-image-1119" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=1024%2C556&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=768%2C417&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=1536%2C835&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?resize=1200%2C652&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/51c8dac5be329765e5c8d14a588c51a2.png?w=1905&amp;ssl=1 1905w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="554" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=1024%2C554&#038;ssl=1" alt="" class="wp-image-1116" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=1024%2C554&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=768%2C416&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=1536%2C831&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?resize=1200%2C649&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/a1748a1cc1d8a668209e52c1fe2ea346.png?w=1879&amp;ssl=1 1879w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">magiconion2.code-workspaceがワークスペースファイル</figcaption></figure>



<p>「extensions.json」はUnityプロジェクトの「.vscode」フォルダの中に入れます。<br>（VSCodeで開いたときに.vscodeフォルダが自動生成されるはず？）</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="556" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=1024%2C556&#038;ssl=1" alt="" class="wp-image-1117" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=1024%2C556&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=768%2C417&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=1536%2C835&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?resize=1200%2C652&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/extensions.png?w=1879&amp;ssl=1 1879w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">正直不要だけどまぁ一応</figcaption></figure>



<p>これでC#の開発環境はだいたいOKだと思います。</p>



<h2 class="wp-block-heading">MagicOnionサーバーの環境構築</h2>



<p>VSCodeの設定が終わったら、そのままServerフォルダを作成して、その中にMagicOnionのサーバーを構築します。<br>（アプリもMagicOnionというのでややこしいです）</p>



<p>公式ドキュメントには「dotnet app package MagicOnion.Sever」（.NETコマンド）を使って追加すると書いてありますが、ちょっと初心者には説明不足で、そのまま実行すると失敗します。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="525" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=1024%2C525&#038;ssl=1" alt="" class="wp-image-1121" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=1024%2C525&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=300%2C154&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=768%2C394&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=1536%2C787&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?resize=1200%2C615&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet1.png?w=1883&amp;ssl=1 1883w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">こんな感じにエラーになる</figcaption></figure>



<p>（既に開いてるかもですが）先ほど作成したSeverフォルダを右クリックして「統合ターミナルで開く」を選択します。</p>



<p>メニュー「ターミナル」からでもいいですが、フォルダから開くとコマンドラインのパスがそこになるので便利です。</p>



<p>Severの中で「dotnet new grpc」を実行します。</p>



<p>MagicOnionはgRPCで作られているので、gRPCプロジェクトを指定して作成します。<br>（Severフォルダの中に色々追加されます）</p>



<p>その後に「dotnet add package MagicOnion.Sever」を実行します。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="552" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=1024%2C552&#038;ssl=1" alt="" class="wp-image-1122" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=1024%2C552&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=768%2C414&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=1536%2C828&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?resize=1200%2C647&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/dotnet2.png?w=1889&amp;ssl=1 1889w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>後は公式ドキュメントにある通り、Severの中に作成されたStartup.csの内容を変更します。</p>



<p>最後に「dotnet run」でサーバーが起動すれば完了です。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="558" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=1024%2C558&#038;ssl=1" alt="" class="wp-image-1123" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=1024%2C558&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=768%2C418&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=1536%2C836&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?resize=1200%2C653&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/startup.png?w=1873&amp;ssl=1 1873w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">Ctrl+Cで停止できます</figcaption></figure>



<h2 class="wp-block-heading">共通インタフェースの作成</h2>



<p>ここまでお疲れさまでした。</p>



<p>環境構築が終わったら、いよいよ通信アプリの実装をやって行こうと思います。</p>



<p>まずはMagicOnionでの共通インタフェース「IMyFirstService.cs」を作成します。</p>



<p>IMyFirstServiceの内容は公式ドキュメントと同じで大丈夫です。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="554" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=1024%2C554&#038;ssl=1" alt="" class="wp-image-1128" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=1024%2C554&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=768%2C415&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=1536%2C830&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?resize=1200%2C649&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/imyfirstservice.png?w=1883&amp;ssl=1 1883w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>ファイルの位置だけ注意が必要で、このIMyFirstServiceをサーバーから参照設定するので、他の共通化しないファイルと別々に分ける必要があります。</p>



<p>また、UnityでIMyFirstServiceを使いたい場合、これをUnityコンパイルする必要があるので、Asset内に存在していないといけません。</p>



<p>ディレクトリ構成は自分も悩みましたが、namespaceと同じようなフォルダ構成で「Assets/Scrips/MyApp/Shared/IMyFirstService.cs」としました。ここら辺は割と自由だと思います。</p>



<h2 class="wp-block-heading">アプリ部分の実装</h2>



<p>次に通信アプリの実装を行います。</p>



<p>公式ドキュメントと以下のサイト様を参考に「SampleAppCall.cs」作りました。</p>



<p><strong><em>UnityとMagicOnionの環境構築（IL2CPP）</em></strong><br><a href="https://zenn.dev/kumatta_ss/articles/dab376b180aa85">https://zenn.dev/kumatta_ss/articles/dab376b180aa85</a></p>



<p>注意点としては、公式ドキュメントでは「GrpcChannel」を使っていますが、これはUnityでは利用することが出来ませんのでコメントアウトして、2行下の「new Channel」の方を使います。</p>



<p>またgRPCのssl通信が今のUnity環境では出来ないっぽい？ので、ポート番号5001を5000にして、ChannelCredentials.Insecure（安全でないセキュア）を指定します。</p>



<p>この辺りの問題は、Unityのプロジェクト設定「.NET standard 2.1」「.NET Framework」と密接に関係しています。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="542" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=1024%2C542&#038;ssl=1" alt="" class="wp-image-1125" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=1024%2C542&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=300%2C159&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=768%2C406&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=1536%2C813&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?resize=1200%2C635&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/sampleAppcall.png?w=1896&amp;ssl=1 1896w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">async/await指定が必要なのは注意</figcaption></figure>



<p>アプリのUnityコンパイルが通ったら、Unity上に空のオブジェクトを作成してコンポーネントにこの作成したスクリプトを設定して準備完了です。</p>



<h2 class="wp-block-heading">サーバー部分の実装</h2>



<p>まず共通インタフェースを参照できるようにします。</p>



<p>Severフォルダ内の「Sever.csproj」に「&lt;Compile Include=&#8221;..\Assets\Scripts\MyApp\Shared\**\*.cs&#8221; LinkBase=&#8221;LinkFromUnity&#8221; /&gt;」を追加します。</p>



<p>これでShared以下のスクリプトを全て参照できるようになりました。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="553" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=1024%2C553&#038;ssl=1" alt="" class="wp-image-1127" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=1024%2C553&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=768%2C415&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=1536%2C829&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?resize=1200%2C648&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/server.png?w=1888&amp;ssl=1 1888w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">VSCodeだとLinkBaseは意味ないっぽい？</figcaption></figure>



<p>コンパイル参照が出来たら、Sever/Servicesの中に「MyFirstService.cs」を作成します。<br>（内容は公式ドキュメントにある通りです）</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="550" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=1024%2C550&#038;ssl=1" alt="" class="wp-image-1143" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=1024%2C550&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=300%2C161&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=768%2C412&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=1536%2C825&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?resize=1200%2C644&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/myfirstservice.png?w=1894&amp;ssl=1 1894w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>出来たらServerのターミナルを開いて、「dotnet run」を実行します。</p>



<p>asyncに関する警告が表示されますが、とりあえず無視でOK<br>（公式ドキュメント通りだもの）</p>



<p>サーバーを待機中にしたまま、Unityに戻ります。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="545" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=1024%2C545&#038;ssl=1" alt="" class="wp-image-1131" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=1024%2C545&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=300%2C160&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=768%2C409&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=1536%2C818&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?resize=1200%2C639&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/08756c0c1b5a74c01efc8ea135b498bb.png?w=1896&amp;ssl=1 1896w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">awaitを使ってないので非同期処理にならず、同期処理になります警告</figcaption></figure>



<h2 class="wp-block-heading">最後にUnityで動作確認</h2>



<p>後はUnityプロジェクトをテスト実行するだけです。</p>



<p>上手く行けば、Unityのコンソールと、VSCodeのターミナルにログが表示されます。</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="557" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=1024%2C557&#038;ssl=1" alt="" class="wp-image-1133" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=1024%2C557&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=300%2C163&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=768%2C418&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=1536%2C836&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?resize=1200%2C653&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/e6f2f7d8c9d66d207d9aa17a322b32c1.png?w=1907&amp;ssl=1 1907w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">プログラムに書かれた足し算の結果が表示される</figcaption></figure>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="552" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=1024%2C552&#038;ssl=1" alt="" class="wp-image-1134" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=1024%2C552&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=768%2C414&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=1536%2C829&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?resize=1200%2C647&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/6fe23069e59d7ad28931f96cbf21a263.png?w=1900&amp;ssl=1 1900w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">ちなみにブラウザからlocalhost:5000とかやってもサーバーが反応してくれるよ！</figcaption></figure>



<p>サーバーが起動していなかったり、何らかの問題があった時は、Unityのコンソールにエラーが表示されます。<br>（以下はサーバーが起動していなかったとき）</p>



<figure class="wp-block-image aligncenter size-large"><a href="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?ssl=1" target="_blank" rel="noopener noreferrer"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="530" src="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=1024%2C530&#038;ssl=1" alt="" class="wp-image-1132" srcset="https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=1024%2C530&amp;ssl=1 1024w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=300%2C155&amp;ssl=1 300w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=768%2C397&amp;ssl=1 768w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=1536%2C795&amp;ssl=1 1536w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?resize=1200%2C621&amp;ssl=1 1200w, https://i0.wp.com/fujiwarakoubou.jp/wp-content/uploads/2022/04/2955acb66ce0ef4c07ce96e7fab7b3af.png?w=1898&amp;ssl=1 1898w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a><figcaption class="wp-element-caption">エラーログ詳細の「grpc_stats : 14」の部分が解決のヒントになるかも</figcaption></figure>



<h2 class="wp-block-heading">おまけ</h2>



<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagicOnionの環境構築またやるか（3回目）</p>&mdash; 藤原工房 (@FujiwaraKoubou) <a href="https://twitter.com/FujiwaraKoubou/status/1517282608194801664?ref_src=twsrc%5Etfw">April 21, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>The post <a href="https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/">Unity+MagicOnion+VSCodeの環境構築などの二番煎じ</a> first appeared on <a href="https://fujiwarakoubou.jp">藤原工房</a>.]]></content:encoded>
					
					<wfw:commentRss>https://fujiwarakoubou.jp/2022/04/24/unity-magiconion-vscode/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1094</post-id>	</item>
	</channel>
</rss>
