Flat Leon Works

アプリやゲームを作ってます。

【Unity】ソースコード編集->エディタプレイの手間を減らす(Mac)

MacでのUnityのプログラミング環境に不満があったのでちょっと改善してみました。

2018/08/19 追記 : Visual Studio Codeの場合のやり方を追加しました。

MacでのUnityプログラミング作業フローの不満点

Unityでのプログラミングは以下のような手順になると思います。(Macの場合)

シンプルに見えますが、手順を詳しく見ると少し手間が多いです。

  • [1] VisualStudio for Macソースコードを編集
  • [2] Ctrl + Sで「ソースファイル保存」
  • [3] Ctrl + Tabで「Unityエディタへ切り替え」
  • [4] Unityエディタによる「アセットの自動リフレッシュ」で少し待たされる(2,3秒)
  • [5] Ctrl + P(または実行ボタン)で「実行(プレイ)」

特に不満だったのは、「アセットの自動リフレシュ」でUnityエディタが2,3秒固まり、それを待ってから実行(プレイ)ボタンを押す必要があったことです。

改善後の作業フロー

あれこれやってみた結果、以下のように改善することができました。

  • [1] VisualStudio For Macソースコードを編集
  • [2] Ctrl + Rで「ソースファイル保存」と「Unityへの切り替え」
  • [3] Ctrl + Rで「アセットのリフレッシュ」と「実行(プレイ)」

VisualStudio for Mac上からCtrl + Rを2回入力するだけです。楽です。

方法

VisualStudio For MacとUnityエディタ、それぞれで仕込みを行います。

VisualStudio For Mac側の仕込み

VisualStudio For Mac側の仕込みでは、「ソースコードの保存」と「Unityエディタへのアプリウインドウの切り替え」をキーボードショートカットでできるようにします。これにはVisualStudio For Macのカスタムツール(外部ツール)機能を使います。

カスタムツールを追加するにはメニューバーのユーザー設定->外部ツール->追加をクリックします。そして、カスタムツールの設定は以下のようにします。

  • コマンドをopen
  • 引数を/Applications/Unity/Unity.app
  • 好きなキーボードショートカットを設定する(私はCtrl + Rにしました)
  • 現在のファイルを保存にチェックを入れる

これで、Visual Studio for Mac上でCtrl+Rを押すと現在のファイルが保存され、さらにUnityエディタが表示されるようになりました。

Unityエディタ側の仕込み

Unityエディタ側の仕込みでは、「アセットの自動リフレッシュの無効化」と「アセットのリフレッシュと実行(プレイ)の1発実行機能の追加」を行います。

まず、「アセットの自動リフレッシュの無効化」の方法ですが、これはUnityエディタのPreference->General->Auto Refreshのチェックを外すことで設定ができます。これで、ソースコード編集後にUnityエディタが2,3秒固まることもなくなります。

次に、「アセットのリフレッシュと実行(プレイ)の1発実行機能の追加」です。これはエディタ拡張で行います。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class MyMenu
{
    [MenuItem("MyMenu/Play %r")] // MyMenu/Playという項目を追加。%rでCtrl+Rをキーボードショートカットとして指定
    private static void RefreshAndPlay()
    {
        AssetDatabase.Refresh(); // アセットリフレッシュを行う
        EditorApplication.isPlaying = true; // 実行(プレイ)開始
    }
}

これで、Unityエディタ上でCtrl+Rを押すと「アセットのリフレッシュ」と「実行(プレイ)」が行われるようになりました。キーボードショートカットのキーは何でもよいのですが、Visual Studio for MacとUnityエディタ側で同じにしておくと楽です。

まとめ

  • Visual Studio for Macの外部ツール機能を使って、キーボードショートカット1発で「ファイル保存」と「Unityエディタへの切り替え」をできるようにする
  • Unityエディタの設定で「アセットの自動リフレッシュ」を無効化する
  • Unityエディタのエディタ拡張で、キーボードショートカット1発で「アセットリフレッシュ」と「実行(プレイ)」をできるようにする

備考

  • Visual Studio for Macの外部ツール機能で設定できる「現在のファイルを保存」は現在開いているファイル1つだけしか保存されないので注意が必要です。保存忘れを防ぐために、毎回Ctrl+Rを押す前に、Ctrl+Shift+Sですべてのファイルを保存するようにした方がいいかもしれません。(ここは改善の余地がありそうです…)
  • 本当はVisual Studio for Mac上からキーボードショートカット1発で、「ファイル保存」「Unityエディタへの切り替え」「実行(プレイ)」ができるようにしたかったのですが、コマンドライン経由で現在開いているプロジェクトを実行(プレイ)できるようにする方法が見つからなかった*1ので、キーボードショートカット2発という妥協案になりました

追記 : Visual Studio Codeの場合

Visual Studio for Macの動作が重たくて我慢できなかったので、Visual Studio Code(以下VSCode)で上記のような「ファイル保存」と「Unityエディタへの切り替え」をキーボードショートカット1発でできる方法を探ってみました。VSCodeは動作が軽い上に、機能的にはVisual Studio for Macと遜色ないのでこっちの方が良いですね。

大まかな手順

  • VSCodeに外部コマンドを実行するためのタスク(tasks.json)を追加する
  • タスクの実行にキーボードショートカットを割り当てる

ちなみに、このVSCodeの方法だとプロジェクトのファイルがすべて保存された上でコマンドが実行されるので、現在開いているファイル1つしか保存されないというVisual Studio for Macで少し不便だった部分が解消されます。いい事ずくめです。

VSCodeに外部コマンドを実行するためのタスク(tasks.json)を追加する

  • UnityのプロジェクトをVSCodeで開く(タスクはワークスペースに追加されるのでプロジェクトを開いておく必要がある)
  • メニューから「タスク->タスクの構成->テンプレートからtasks.jsonを生成」を選択(tasks.jsonワークスペースディレクトリに追加される)
  • tasks.jsonの中身を以下のようにする
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Switch to Unity",
            "type": "shell",
            "command": "open /Applications/Unity/Unity.app",
            "presentation": {
                "reveal": "silent",
                "echo": false,
                "focus": false
            }
        }
    ]
}

これでタスクの追加は完了です。「タスクの実行」からSwitch to Unityを選択して、ちゃんとUnityエディタに切り替わるか確認してみましょう。

タスクの実行にキーボードショートカットを割り当てる

  • メニューの「基本設定->キーボードショートカット」を開く
  • 「高度なカスタマイズを行うには、次を開いて編集: keybinding.json」のkeybinding.jsonの部分をクリックしてkeybinding.jsonを開く
  • keybindings.jsonに以下のようなコードを追加する
    {
        "key": "cmd+r",
        "command": "workbench.action.tasks.runTask",
        "args": "Switch to Unity"
    }

これでSwitch to UnityのタスクをCtrl+R(Mac的にはCommand+R)で起動できるようになりました。

*1:このページを見る限りできなさそう->sassembla.github.io/Public/2013:03:17 13-53-03/2013:03:17 13-53-03.html