Search Unity

Visual Studio 2019 を使って Unity のプログラミングワークフローを高速化する 10 の方法

, 7月 14, 2020

Visual Studio 2019 には、ワールドクラスのデバッグ機能に加え、新しいツールやカスタマイズオプションが多数用意されており、皆さんの思い通りのコーディング環境を構築できるようになっています。また、Unity で C# を使用して作業するための強力な機能の範囲が付属しており、以前よりも迅速にコードを書いたりリファクタリングしたりするのに役立ちます。今回のブログ記事では、ワークフローのスピードアップに役立つ機能について 10 のヒントをご紹介します。

Unity のエバンジェリストである Arturo Nereu と Microsoft の Visual Studio Tools for Unity のプログラムマネージャーである Abdullah Hamed 氏は先日、Unity で開発する際に Visual Studio 2019 を最大限に活用するためのヒントを紹介する Unite Now セッションを開催しました。

この記事では、セッションで紹介されたヒントのいくつかを簡単に紹介します。さらに深く掘り下げたい方のために、セッションの中でヒントに触れている箇所や他の関連コンテンツへの直接リンクも追加しました。

ヒント 1:Unity にデバッガーをアタッチして再生する

Console.Log の使用は、Unity のコンソールビューを利用してプロジェクトをデバッグするための簡単で迅速な方法です。しかし、Visual Studio はより効率的な方法を提供しており、この方法はプロジェクトが複雑になればなるほど価値を増していきます。Visual Studio では、Visual Studio メニューのAttach to Unity」ボタンをクリックするだけです。これにより、2 つのアプリケーション間の接続が作成されるので、Unity の再生モードでプレイしながら、ブレークポイントを挿入したり、コードをステップスルーしたりすることができます。また、「Attach to Unity and play」をクリックして再生すると、IDE から離れることなく実行を開始することができます。ここでの優れた点は、実行時にコードフローの状態やプロパティの値などを検査できることです。これは些細なことに思えるかもしれませんが、ゲームプレイ中にいつでも実行を一時停止して、ある特定のフレーム内でのゲームの特定の状態とプロパティの値を検査するためにステップスルーすることができる機能は、デバッグにおける非常に強力なツールとなります。


ブレークポイントを扱う際のもう 1 つの便利なオプションは、デバッグフローで適用する前に真として評価しなければならない条件式のような、関連するアクションに紐付いた
独自の条件を挿入することができるということです。

ヒント 2:パフォーマンスの見通しとベストプラクティスのための提案を得る

Visual Studio 2019 では、Unity 向けの解析ツールが導入されています。解析ツールはコードパターンを検出し、より推奨されるパターンへの置き換えを提案することができます。Unity 解析ツールは、Unity 固有のコード診断とコード修正を集めたもので、GitHub でオープンソースとして公開されています。解析ツールは、Unity 固有の診断をよりよく理解できるようにしたり、Unity プロジェクトには適用されない一般的な C#診断を省略してプロジェクトを支援したりするために利用できます。例としては、下に示したような、ゲームオブジェクトに特定の動作を適用するために、ゲームオブジェクトが特定のタグを持っているかをチェックする単純な条件文のようなものが挙げられます。

解析ツールは皆さんの書いているコードを分析することができ、パターンを検出し、代わりにより最適化されたメソッドを使用することを提案します。上の例の場合、解析ツールは、より効率のいい CompareTag メソッドを提案します。

上記の例では、1 つのゲームオブジェクトにアタッチされた 1 つのスクリプトに対する軽微な最適化のための調整を行っておりさほど大きな影響はありませんが、スクリプトがアタッチされた GameObject が 1000 個もあるような大規模なプロジェクトでは事情が違ってきます。パフォーマンスの最適化を検討する際には、すべての部分の合計が重要であり、解析ツールはコード構文を最適化することで不要なオーバーヘッドを減らすことで、パフォーマンスを特定して改善することを簡単にしてくれます。

また、解析ツールのリストをご覧になることもできます。さらに詳しく知りたい方は、このブログ記事をお読みになるか、Unite Now のセッションでこのヒントに関して説明しているので、そちらをご覧ください。

ヒント 3:タスクリストをフォローアップチェックリストとして活用する

スクリプトを作成する際によくある課題は、後で戻ってきてコードを再検討する必要があることです。これは、たとえばゲームメカニクスのテスト中に、最終的にはパフォーマンスを向上させるためにリファクタリングが必要になるかもしれないが、とにかく現在のニーズを満たすコードスニペットを実装したからという場合もあります。Visual Studio にはタスクリストという便利な機能があり、TODO や HACK などのトークンを使ったコードコメントやカスタムトークンを追跡することができます。また、コード内のあらかじめ定義された場所に直接移動するショートカットを管理することもできます。コードにトークンを追加するだけで、後で見直すためにタスクを作成することができます。

メニューの「View」からアクセスできる「Task List」ウィンドウでは、タグ付けしたすべてのタスクの概要が表示され、ワンクリックでコードの特定の部分にジャンプできるようリンクが張られています。

コード内の // TODO: に続けてコメントを追加することで、右上に表示されている Task List ウィンドウを使って、後でフォローアップしたいアクションアイテムを簡単に「タグ付け」できる。

プロジェクトのアクションアイテムのリストが長くなってきたら、タスクリストに独自のカスタムトークンを設定して、リファクタリングプロセスの優先順位を割り当てて効果的に整理することもできます。タスクリストのトークンをカスタマイズするには、Tools > Options を選択します。


詳細な例をこちらの
Unite Now セッションでご紹介しています。

ヒント 4:スニペットを使ってワークフローを高速化する

コードスニペットは再利用可能なコードの小さなブロックで、右クリックメニュー(コンテキストメニュー)のコマンドやホットキーの組み合わせを使用してコードファイルに挿入することができます。一般的には try-finally や if-else ブロックなどの一般的に使用されるコードブロックが含まれていますが、完全なクラスやメソッドを挿入するために使用することもできます。要するに、ボイラープレートコードを作成することで多くの時間を節約する便利な方法を提供してくれます。

コードを名前空間やリージョンなどのスニペットで囲むには、CTRL + K + S と入力します。この入力によって、下の動画のようにスニペットが適用されます。


Microsoft のドキュメント(
Visual Studio 用、および Visual Studio for Mac 用)には、独自のコードスニペットを作成するためのステップバイステップのチュートリアルが掲載されています。

ヒント 5:数回のクリックですべての変数の名前を変更する

コードをリファクタリングするときの一般的なワークフローは、変数の名前をより説明的で正確な名前に変更することです。ある場所で変数名を変更すると、その変数へのすべての参照を修正しなければならなくなります。しかし、Visual Studio には、1 回の操作でこれを行う簡単なショートカットが用意されています。名前を変更したい変数の名前をハイライトして右クリック(またはキーボードショートカットの CTRL + R を使用)し、変数の名前を変更します。変更を適用する前にプレビューして、影響の確認を行うには「preview changes」を選択します。


スクリプトのクラスを変更する際にも同じヒントを使用できますが、コンパイルエラーを避けるために、C# ファイルの名前も併せて変更する必要があることを覚えておいてください。クラスの名前変更の流れについては、Unite Now セッションの
この部分で詳しく説明しています。

ヒント 6:キーボードショートカットでコードをコメントアウトする

コードブロックのコメントやコメント解除は、コードをリファクタリングしたりデバッグしたりする際によく行われるワークフローです。一度に 1 行ずつ行うと、時間のかかる作業になります。しかし、Visual Studio では、シンプルなショートカットコマンドを使用してコードブロック全体をコメントアウトすることができます。CTRL + K + C でコメントアウト、CTRL + K + U でコメント解除することができます。Mac の場合は、CMD + K + C でコメントアウト、CMD + K + U でコメント解除します。


ブロック全体を素早くコメントアウトできるので、テストワークフロー中に特定のゲームロジックの無効化が効率的に行えます。

ヒント 7:GitHub 統合を数回のクリックで設定する

Unity Collaborate では、ユーザーフレンドリーなビジュアルインターフェイスで Unity から直接プロジェクトを保存、共有、同期することが簡単にできますが、チームや開発者によっては、GitHub のようなソース管理ソリューションを使用することが好まれることもあります。Github for Unity プラグインを使えば、GitHub でのソース管理作業が格段に簡単になります。この拡張機能は完全にオープンソースで、プロジェクトの履歴を表示したり、ブランチで実験したり、変更点からコミットを作成したり、Unity から離れることなく GitHub にコードをプッシュしたりすることができます。GitHub の認証は 2FA を含めて Unity に組み込まれており、ボタンをクリックするだけで、コマンドラインで命令を発行することなく、ゲームのリポジトリを素早く初期化することができます。Unity に特化した.gitignore ファイルを自動作成できるので、手動で設定する必要はありません。また、Visual Studio 2019 では、IDE で直接 GitHub を使用して作業することがより簡単になる新しいインターフェイスも提供されています。


Visual Studio で新しいインターフェイスを有効にするには
「Tools」 > 「Options」 > 「Environment」 > 「Preview features」 > 「New Git user experience」を選択します。

また、Unite Now のセッション動画の中の詳細なチュートリアルを見ながら皆さんご自身でもぜひお試しください。

ヒント 8:Live Share を使ってリアルタイムでリモートのコラボレーションを行う

Live Share を使用すると、リンクひとつで Visual Studio のインスタンスを直接チームメイトと共有することができ、チームメイトはリアルタイムでコードを編集したり、プロジェクトで共同作業を行うことができます。共有を行うためにレポジトリをクローンしたり、環境をセットアップしたりする必要はありません。どちらも Visual Studio がインストールされていれば、Live Share セッションを作成するためのボタンをクリックするだけで、簡単に共同作業を開始できます。

Visual Studio Live Share では、Visual Studio のセッションを共有し、他の人と直接リアルタイムで共同でコーディングすることができる。

共有したい相手が Visual Studio または Visual Studio Code をインストールしていれば、「Live Share」を選択するだけで共有したいコードの部分へのリンクを生成でき、共同作業を開始できます。共有セッションが作成され、皆さんと共同作業者はエディター以外のものをインストールする必要なく、皆さんのコードを見ることができるようになります。この機能はほぼ瞬時に動作します。

Live Share の詳細について知りたい方は、こちらの Unite セッションVisual Studio 製品ページをご覧ください。また、こちらのクイックスタートガイドを直接ご覧いただくのもおすすめです。

ヒント 9:Unity メッセージ用のボイラプレートコードを簡単に作成する

Unity のドキュメントを見れば確認することができますが、MonoBehaviour のすべてのメソッドのシグネチャを覚えるのは厄介です。Visual Studio には、IDE で直接調べることができる便利な機能があります。CTRL + Shift + M と入力して、実装したい関数を検索し、検索結果をフィルタリングしてメソッドを見つけます。チェックボックスを選択して [Ok] をクリックすると、メソッドのボイラプレートコードが直接コードに挿入され、すぐに使用できるようになります。

ヒント 10:キーボードショートカット

上記のヒントのいくつかは、便利なショートカットから実行可能です。つまるところ、たくさんショートカットを知っていることが最大の時間節約になるかもしれません。そこで、この記事の締めくくりとして、今回取り上げたヒントを実行するキーボードショートカットの要約と、いくつか追加のショートカットをここにリストアップします。

動作 Windows Mac
プロジェクト全体の検索 CTRL+T CMD + .
Unity メッセージの実装 CTRL + Shift + M CMD + Shift + M
コードをコメントアウト CTRL + K / CTRL + C CMD + /
コードブロックのコメント解除 CTRL + K / CTRL + U CMD + /
クリップボードの履歴からコピー CTRL + Shift + V
タスクリストの表示 CTRL + T デフォルトのキーバインドなし。バインド可能
名前空間などの雛形をスニペットとして挿入 CTRL + K + S: デフォルトのキーバインドなし。バインド可能
変数の名前を変更し、すべての参照を更新 CTRL + R CMD + R
コードをコンパイル CTRL + SHIFT + B CMD + Shift + B

皆さんのヒントをお寄せください

Visual Studio 2019 には豊富な機能が搭載されており、皆さんご自身のワークフローに応じて Unity での作業の生産性を高めることができる、非常に多くのカスタマイズオプションが用意されています。この記事だけでそれらをすべて網羅することが出来ないほど多数のオプションです。ここでご紹介したいくつかのヒントが、皆さんが Unity をさらに使い込むヒントとなり、また、このように便利な機能を使いこなすことの有用性を実感していただけることを願っています。また、ここで紹介しきれなかったヒントがありましたら、コメントでコミュニティと共有してください。また、Unity でのワークフローを改善するためのヒントや、今後のブログ記事で取り上げてほしいトピックがあれば、ぜひお聞かせください。

Visual Studio の改良に関するフィードバックをお求めの方へ

私たちは常にワークフローの改善に取り組んでおり、私たちのチームは最高の IDE エクスペリエンスを提供するという点で Microsoft と密接に協力しています。アイデアやフィードバックをお持ちの方はぜひご連絡ください。Microsoft の Visual Studio Tools for Unity のシニアプログラムマネージャーである John Miller (@jmillerdev) までご連絡いただくか、Unity の Scripting フォーラムでフィードバックを共有してください。

28 replies on “Visual Studio 2019 を使って Unity のプログラミングワークフローを高速化する 10 の方法”

The shortcut for renaming a variable (on Windows) is CTRL + R / R. The first key combination is for accessing the Refactor mode.

Visual Studio can now be used for diff/merge! In preferences, external tools just set the diff/merge tool to custom tool and set the path to devenv.exe. In the two way, 3way and merge set the parms.

Best blog post in a while I am searching for!
Hope to see more of those post often.

JetBrains (and the ReSharper plugin for Visual Studio) has so much possibility of options customization for code layouts, ad refactoring hints. Unfortunately, it’s not affordable for everyone.

I really love Unity, and I quite like Visual Studio and Github, but I must say: Please don’t recommend Github for Unity. It has lots of bugs, it doesn’t have anyone actively maintaining it, it hasn’t had a release in over a year. It’s so ridden with bugs that sometimes it’s even scary to use it. Instead of making users life easier, it ends up making it hard. Right now, I’ve just found it thousands of times better to just use git and git-lfs normally, and though I wish I had a friendlier option, I’d much rather have some tutorials on how to use tech that works, than being officially pointed to use abandonware.

I understand that there is a Git for Unity package (https://github.com/Unity-Technologies/Git-for-Unity) that might fill a lot of the git-shaped hole in Unity, if not now, in the future. It’d be awesome to have some information about its status. There’s some basic but useful documentation for this package on Github, but I can’t found documentation in Unity’s sites. I can’t find any official mention of it. It’s kind of confusing to be recommended a buggy, abandoned, solution instead of the existing project in progress at Unity. It makes me wonder if Unity’s own Git project has been abandoned, or if it’s still planned to be released out of preview.

I agree and recommend GitHub Desktop instead. It’s outside Unity (so no slowdowns) and can be used on other projects (not just unity) by both artists and newer programmers. I’ve been very happy with it for the few years I’ve used it now and it has active development so you have no fear of the future with it.

https://desktop.github.com/

True. Last time i used Github for Unity is with Unity 2019.4 but it seems not working as it should be.

Yes, I tried to set up GitHub for Unity and couldn’t get it to work. Authentication wouldn’t succeed no matter what I tried. The interface looked pretty unpolished as well, compared to SourceTree and Github Desktop.

I absolutely agree. Having a git tool embedded within Unity, while sounding good on paper, works terribly in practice. Doing small things, sure – but actually managing your project with it? I can’t imagine even trying. With an external client, you can push and pull and do whatever you need to do without fearing recompiling or reloading or anything. Things can seriously get messed up otherwise.

I HIGHLY recommend the Fork client (https://git-fork.com/), the free version is free forever, and it’s by far the most stable and reliable client I’ve ever used.

Tip for Unity for XboxOne:
– Do not install Visual Studio 2019. XboxOne development supports only Visual Studio 2017 and older, but Unity automatically gets newest Visual Studio for compilation so when you install Visual Studio 2019 you cannot compile for XboxOne (even if you have also installed Visual Studio 2017). You cannot change it anywhere in project. It is builtin Unity “feature”.

That was the case for the early days of Xbox One development. I think this might have changed.

Great advice.

Too bad I can’t use VS2019 because Microsoft account management is too much of a nightmare.

Tip 11
Use visual studio code…
Much faster, much more convenient, way better keyboard shortcuts.
Perfect for unity!

UsE vIsUaL sTuDiO cOdE.

I prefer the key bindings in VS 2019 so your point about them being “better” in code is just your opinion.

1. Ctrl + , brings up the “Go To” panel for looking up files, types, members, etc.
2. F12 while the cursor is over an item, goes to definition, Ctrl+F12 goes to implementation (Ctrl + F12 is for methods that are defined in an interface and implemented in a class).
3. While debugging in VS 2019, debug panels “watch”, “auto”, and “locals” let you search in object trees to find the current value for looked-up items.
4. If you don’t know where a certain item is located in VS, press Ctrl + Q and start typing, and VS shows a list of matched items with their keyboard shortcut.
5. View > Other Windows > C# interactive is a scratch pad that you can write some C# code and see the immediate result, without the need to put a breakpoint, etc.

In tip 2 there is a mistake.

if(collision.gameObject.CompareTag == “enemy”)

instead of

if(collision.gameObject.CompareTag(“enemy”))

Great post. There is a small problem with CompareTag code snippet, it should be if(collision.gameObject.CompareTag("enemy"))

Comments are closed.