FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    カテゴリ: Visual Studio

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityではイベント関数と呼ばれる特殊な関数があります。これはゲームオブジェクトにアタッチされたスクリプトの中で特別な名前のメソッドがUnityから呼ばれるという機能です。

    よく使うものを挙げると、 
    • Awake()
    • Start()
    • Update()
    • OnDestroy()
    などです。

    イベント関数を使う上で問題になることが多いのが、名前を間違うことです。名前を間違えただけなので修正は容易なのですが、問題が発覚しにくいことが厄介なところです。
    名前を間違っていても特にコンパイルエラーは発生しません。そのためプログラム的な問題はないと判断されて、後になって実は問題があるということになります。Unityから呼び出されなくても文法的には問題ないため、検出できないバグになるのです。

    OnCollisionEnter(Collision)みたいに特定のクラスを引数に取る場合も注意が必要です。イベント関数の名前が合っていても引数の型が間違っているということがあります。このときどのようになるかを例を挙げて調べてみました。
    void OnCollisionStay(int n)のように定義すると、以下のようにエラーが発生しました。
    event-argerror
    しかしながら、void OnCollisionStay()というように引数を空にしてみるとイベントが発生したタイミングに正しく呼ばれていました。
    つまり、イベント関数が引数を取る場合、引数があっているか空であれば呼ばれるということです。(もちろん名前が合っているとして)

    イベント関数の名前を間違ったり、引数の型を間違っていてもエラーが発生しないことがあります。
    正しくないイベント関数を書かないようにすることは絶対には防げないので、起こりにくくする方法を紹介することにします。


    VSTUを使っている場合は便利機能でイベント関数を自動で実装することができます。これを使うのが最もミスの起こりにくい方法だと思います。あまり詳しくないイベントを使う時などはこの機能を使っておくのが良いです。

    Visual Studioでイベント関数を追加したいソースファイルを開いて、ソース上で右クリックをすると下のメニューが現れます。
    vs-event

    Implement MonoBehavioursとQuick MonoBehavioursとが用意されているので、どちらかをクリックします。

    Implement MonoBehavioursの場合は、次のウィンドウが現れます。
    vs-implement
    チェックしたイベント関数が一度に追加でき、メソッドの説明をコメントできたりするのでお勧めです。ソースに自動的にプログラムが書かれるので間違うことがなく、積極的に使うべき機能だと思います。

    Quick MonoBehavioursの場合は、次の小さなウィンドウが現れます。
    vs-quick
    入力欄にイベント名を一部でも入れると候補が検索して現れます。候補を選べばメソッドが追加されます。
    こちらの機能はイベントの名前を知っている場合、素早く追加することができるという熟練者向けの機能と言えます。一度に追加できるのは1つまでです。

    VSTUを使って自動的に追加されたイベント関数にはpublic void Awake()のようにpublicが付きますが、publicはなくても問題ありません。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    5.2以前ではVisual Studioを使うにはどうなっていたかというと、非常に手間のかかるものでした。
    Visual Studioは使いたい人は自分でVisual Studio Tools for Unity(VSTU別名UnityVSらしいです。)をインストールし、専用のアセットをインポートします。Preferenceの設定が変わってしまうために他のプロジェクトを使う時にいちいちPreferenceの設定を戻したり、アセットをインポートしてVisual Studioが使えるようにしなければならなく面倒です。
    大したことのないことですが、忘れるとうまく動かず「あ~設定し忘れた~」 みたいなことになります。不便なところがあると使いたくなくなるものですし、大勢で開発しているなら結構大きな問題になるでしょう。

    5.2になりVisual Studioが標準的なエディターになるようです。(MonoDevelopは相変わらず付属しています。MacとかLinuxとかありますしね……)これにより改善されていることがあります。
    連係のために必要だったアセットのインポートが不要になります。つまり、インストールするだけで使えるということです。(古いプロジェクトで既にVisual Studioを連携させていた場合アセットのインポート時にUnityVSというフォルダができていたはずです。これは不要になったので消してください。)インポートがなくなったことにより自分の好きなエディターを簡単に使えるようになり、切り替えも自由に行いやすくなりました。(2013と2015の切り替えがPreferenceの設定だけでできます。)
    これについては英語のドキュメントに言及されています。プロジェクトフォルダ内のVSTUではなくVSTUのインストールフォルダから自動で読み込むようになっているらしいです。

    Visual Studioをエディターとして使うにはPreferenceの設定を変更します。External Script Editorの設定を使いたいVisual Studioにします。(下の画像では2013を設定しています。2015でも構いません。)Editor Attachingのチェックをつけておきます。Unityでの設定は以上です。
    v2013
    デバッグの方法は以前と同じですが、うまくいかない場合は「Unity5.2でVisual Studioでデバッグする」の記事を参考にしてみてください。

    Unity Project Explorerがいつのまにか追加されました。
    upe
    Unity Project Explorerを表示に追加することができます。これによりUnityのフォルダ構成をVisual Studioでも表示できるようになりました。Solution ExplorerだとEditorフォルダやPluginsフォルダ等があるといくつかの(Visual Studioの意味で)プロジェクトにわかれてしまい見にくくなります。Unity上と同じように見えると違和感なくVisual Studio上でも作業できるでしょう。
    VSの機能のSolution Explorerでの表示だといくつかのプロジェクトにわかれて表示されます。ビルドしたときのdllごとにプロジェクトがわかれているようです。下の画像だと、Unity.CSharpがC#のスクリプト、Unity.CSharp.EditorがC#のEditorスクリプト、Unity.CSharp.Pluginsがプラグインになります。
    sol

    下のようにUnity Project Explorerの見た目はUnity上のプロジェクトブラウザーの構成と同じです。フォルダが同じになったことでどこにスクリプトがあるのかわかりやすくなります。
    upes

    デバッグ時にブレークポイントで自動的にVisual Studioに移り、処理を抜けるとUnityに戻るというようになっていました。これはいちいちツールを選択しないで流れるように作業ができるので楽です。 たまに反応しないことがありますが……

    今やUnityのスクリプト用の言語はC#ですね。メニューに表示されるボタンにもC#と書いてあるようになりました。 
    opc

    Unity Script(Unity用にJavaScriptを拡張したプログラミング言語)は消えていく運命にありそうです。IL2CPPがあるのでむしろC++が使えるようになる気もしますね。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    UnityとVisual Studioを連携させる」という記事ではUnityでVisual Studioを使ってデバッグができるということを書きました。その時はUnity4.6とUnity5.0での内容だったため、Unity5.2とは大分やり方が異なっています。今回は5.2でVisual Studioを使えるようにする方法について説明します。
    私は以前からVisual Studioでデバッグしていたのですが、今回Unity5.2にアップデートしたところデバッグができなくなってしまいました。後で詳しく書きますが、原因としてはVisual Studio Tools for Unity(VSTU)のバージョンが古かったためでした。スクリプトの編集はできていたので、デバッグもできるだろうと思いこんでいてはまりました。Unity5.2にアップデートしたら、自動でVSTUのバージョンアップしてくれればいいのですが、そうはなってくれませんでした。



    以前からVisual Studioを使っていた人は既にVSTUがインストールされているでしょうからアップデートが必要です。使いたいVisual Studioに対応するVSTUのバージョンアップをしてください。Unity5.2ではVSTUの2.1を要求するので、それ以降のバージョンでないとデバッグできません。(編集は可能ですが、デバッグができません。) VSTUのインストーラをダウンロードして、インストールすると正しく動くようになるはずです。

    none 

    on
    Help->About Unity...を開くと、デバッグできない場合は上の図のように表示されていると思います。正しいバージョンのVSTUがインストールされている場合は下の図のように表示されます。 このようになっていれば、Visual Studioでデバッグできます。

    デバッグの方法は
    buatt
    このAttach to Unityボタンを押してUnityで再生することでできます。

    もしくはDEBUGを選び、
    attau
    メニューからAttach Unity Debuggerを押すと、Select Unity Instanceというウィンドウが開かれます。
    sel
    このウィンドウで対象となるものを選びOKを押します。Unityで再生を行えばデバッグが可能です。

    Attach to Unityボタンを押す方が簡単なので、そちらを利用する方が普通だと思います。 


    新しくUnity5.2から始める人はUnityのインストール時にVisual Studioも入れるか設定できます。VSTUも入るのだと思いますが、試していないのでそれについてはわかりません。
    Help->About Unity...を開いて、VSTUが正しくインストールされているか確認してください。
    520p
     


    MicrosoftのページでVSTUについての記事があったのでリンクを載せておきます。英語ですが、詳しく説明が載っています。
     「Unity 5.2 and Visual Studio Tools for Unity 2.1」と「Native support for VSTU 2.1 in Unity 5.2」が参考になると思います。

    デバッグできない人には「Native support for VSTU 2.1 in Unity 5.2」の一番下にあるChecklistが役に立つので訳しておきます。

    Visual Studioを使用する手順のまとめ
    • Visual StudioとVisual Studio Tools for Unityのバージョン2.1をインストールします。
    • 以前からVSTUを使っている場合、Unity上でUnityVSフォルダがあるはずなのでそれを消します。
    • Unity上でPreferenceのExternal Script Editorを使用するVisual Studioに設定する。
    • Unity上でAbout Unityウィンドウを開きVSTUが有効になっているか確認する。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    以前書いた『UnityでVisual Studioを使う』よりも進んだ内容です。
    具体的にはVisual Studioでデバッグできます。ブレークポイントをVisual Studioで設定して、Unityでゲームを実行するとブレークポイントにひっかけることができます。

    MicrosoftのこのページにVisual Studio Tools for Unity(VSTU)というものがあります。
    これがUnityとVisual Studioを連携させるためのツールです。

    Visual Studioのバージョンによりダウンロードするべきファイルが違います。
    対応しているバージョンは以下の4つです。
    • Visual Studio 2015 Preview

    • Visual Studio 2013

    • Visual Studio 2012

    • Visual Studio 2010

    ただし、Visual Studio Expressという無償版は対応していないそうです。
    私は2010 Expressを使用していたので、今までこのツールを使えなかったのです。

    しかしながら、Visual Studio Community 2013 において個人開発者であれば、これを無償で使えるということになりました。Visual Studio Community 2013は機能の拡張ができます。つまり、個人開発者であれば、Visual Studio Tools for Unityが無償で利用できるということです。

    まずVisual Studio Community 2013をここからダウンロードします。
    ダイアログに従ってインストールを行います。(かなりの時間がかかります。30分~1時間程)

    2013用のVSTUをここからダウンロードします。
    これもインストールします。

    Visual Studio Community 2013とVisual Studio Tools for Unityのインストールが終われば、もう少しでUnityとVisual Studioを連携させることができるようになります。
    UnityのメニューのAssets->Import Packase->Visual Studio 2013 Toolsを選んでください。(どうもUnity5になってからはメニューの表示がなされないようです。C:\Program Files (x86)\Microsoft Visual Studio Tools for Unity\2013にVisual Studio 2013 Tools.unitypackageがあるのでダブルクリックしてインポートするかメニューからインポートするファイルを指定してインポートしてください。)
    インポートができると、プロジェクトビューにUnityVSというフォルダができます。
    ここで一度Unityを終了させます。再起動しないとEditorスクリプトが反映されません。

    メニューにVisual Studio Toolsというものができます。
    Open in Visual Studioを押せば、Visual Studioでスクリプトの編集が可能です。

    Visual StudioにAttach to Unityというボタンが出ているので、それを押すとUnityの実行時にブレークポイントを利用できます。このあたりの使い方はMonoDevelopと似てます。

    最後に重要なこととして、VSTUをインストールするとUnityのPreferenceを設定されてしまいます。
    デフォルトのエディターとしてVisual Studioが設定されるので、プロジェクトにVSTU用のパッケージのインストールが必須になります。Visual Studioを使ってみようかなという程度の人は、まずはVSTUではなく『UnityでVisual Studioを使う』で紹介したVS用のプロジェクトファイルを生成するのを試した方が良いと思います。その上でVisual Studioを使い、MonoDevelopはもう使わないというのならVSTUをインストールしてください。



    Preference->External ToolsのExternal Script EditorをMonoDevelopに設定するとエディターをMonoDevelopに戻すこともできました。

    その後、エディターにVisual Studioを設定するには、画像のようにすると再度戻りました。
    External Script EditorをUnityVS.OpenFileにし、External Script Editor Argsをに"$(File)" $(Line)します。
    VSpreference.png



    (Visual Studio 2013 Language Packをインストールして日本語の表示にしたかったのですが、インストールが終わらなくなってしまいあきらめました。Language PackがなくてもVSTUは動いたので、良しとしました。)

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityでスクリプトを編集するときはMonoDevelopが基本です。
    良いところもありますが、私はこれをあまり使っていません。
    JavaScriptやBooでスクリプトを書くならこれでも良いと思いますが、C#の場合はVisual Studioを使う方が好きです。

    コメントを日本語で書きづらいのが、MonoDevelopの最大の欠点だと思っています。
    書けるけども確定するまで表示されないので、わかりにくいです。
    MonoDevelopを使うのは、デバッグのときとちょっとした編集の時です。

    Visual Studioを使うには、
    UnityのメニューのAssets->Sync MonoDevelop Projectを押せばVisual Studio用のファイルが作られます。
    Assembly-CSharp.csprojとか*.slnとかができるので、それを開けばスクリプトの編集が行えます。

    Visual StudioとUnityをもっと連携させる方法もあるようですが、とりあえず使ってみたいなら上記の方法が簡単です。

    このページのトップヘ