vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

【Windows】Unityでコマンドライン引数の受け渡し

はじめに

ちょっと必要になったので。

UnityでWindows用に出力したexeファイルを開くときに、 合わせて引数となる文字列を受け取る(コマンドライン引数)ことで起動後の処理を変える方法。

そしてコマンドライン引数を指定してアプリを開く方法についてまとめます。

コマンドライン引数を受け取る

コマンドライン引数を受け取るには、ズバリ「System.Environment.GetCommandLineArgs()」を使います。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MainController : MonoBehaviour
{
    public Text ResultText;
    private void Start () {
        var args = System.Environment.GetCommandLineArgs();
        var resultString = "";

        for (var i = 0; i < args.Length; i++)
        {
            resultString += i.ToString();
            resultString += ": ";
            resultString += args[i];
            resultString += ", ";
        }
        ResultText.text = resultString;
    }
}

配列の0番目にはexeファイルのパスが入り、1番目以降にコマンドライン引数が入ります。

またコマンドライン引数は半角スペースで区切られます。

コマンドライン引数を送る

「System.Diagnostics.Process」を使って別のアプリを開きます。

その際、コマンドライン引数を指定することができます。

using System.Diagnostics;
using UnityEngine;
using UnityEngine.UI;

public class MainController : MonoBehaviour
{
    public Button OpenProcessButton;
    private void Start () {
        OpenProcessButton.onClick.AddListener(() =>
        {
            var process = new Process
            {
                StartInfo =
                {
                    FileName = @"C:\Users\{{Exeファイルのパス}}\GetCommandlineArgs.exe",
                    Arguments = "arg arg2"
                }
            };
            process.Start();

        });
    }
}

上記のように引数を半角スペースで区切ると、受け取る側では2つの引数として認識されます。

参照