Unity-通过VS Form打开另一个exe可执行程序并传入参数

上一篇文章讲到了Unity-打开另一个exe可执行程序并传入参数,今天讲一下如何通过Visual studio的 windows窗体应用打开另一个exe可执行程序并传入参数。

本章主要涉及到三个方面的知识点,Visual studio的Form搭建、传入与接收参数、Json数据解析,如果还有不会json数据解析的同学进Json数据解析,了解json解析后可进行该课程学习。

此案例使用Visual studio 2017与Unity 2019.4.8

一、Visual studio Form窗口搭建

(1)新建windows窗体应用项目,此处为了方便测试,直接将项目创建于桌面,项目名称为StartConfig。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)项目建好以后默认窗口如上图,可点击(视图/工具箱)或使用快捷键Ctrl+Alt+X打开工具箱。
在这里插入图片描述
在这里插入图片描述
(3)编辑窗口标题名称,这里的窗口名称可任意编辑,有两种修改方式,一种直接在脚本内部修改,还有一种直接在编辑器窗口修改,个人建议采用第二种,编辑修改比较简单,直接鼠标左键选择窗口/控件,直接在解决方案资源管理器即可修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)利用工具箱中的公共控件,搭建一个比较简单的Form窗口,如下图。
在这里插入图片描述
这里为了方便测试,名称先与测试案例所有控件名称一致,方便和代码对应上,修改方式:鼠标左键点击控件,在右下角的面板修改,规则从上往下,从左往右控件名称如下:
label_UserName、textBox_UserName
label_Age、textBox_Age
label_SceneName、textBox_SceneName
label_Path、textBox_Path、button_Select
button_StartApplication
在这里插入图片描述
在这里插入图片描述

二、参数传入

完整Form1类如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using LitJson;

namespace StartConfig
{
    
    
    public partial class Form1 : Form
    {
    
    
        public Form1()
        {
    
    
            InitializeComponent();
        }

        /// <summary>
        /// 选择按钮函数
        /// 打开资源管理器 选择需要执行的exe可执行程序 并将exe路径进行赋值操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_Select_Click(object sender, EventArgs e)
        {
    
    
            OpenFileDialog file = new OpenFileDialog();
            file.ShowDialog();
            textBox_Path.Text = file.FileName;
        }

        /// <summary>
        /// 开始程序按钮函数
        /// 进行启动配置信息初始化 转化为json后 通过Process类进行程序启动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_StartApplication_Click(object sender, EventArgs e)
        {
    
    
            StartConfigInfo info = new StartConfigInfo()
            {
    
    
                userName = textBox_UserName.Text,
                age = int.Parse(textBox_Age.Text),
                sceneName = textBox_SceneName.Text
            };
            string configStr = JsonMapper.ToJson(info);

            Process process = new Process();
            process.StartInfo.FileName = textBox_Path.Text;
            process.StartInfo.Arguments = configStr;
            process.StartInfo.UseShellExecute = true;
            process.Start();
        }
    }

    /// <summary>
    /// 启动配置信息
    /// </summary>
    public class StartConfigInfo
    {
    
    
        public string userName;         //用户名
        public int age;                 //年龄
        public string sceneName;        //场景名称
    }
}

这里值得注意的地方是我们引用了LitJson命名空间,如果没有引用LitJson.dll类库文件,脚本内部会报错,引用方式如下:点击工具/NuGet包管理器/管理解决方案的NuGet程序包
在这里插入图片描述
在这里插入图片描述
安装后会自动引入项目,报错会得到解决,到这里该项目已经可以正常运行,在Unity中创建项目时也需要Litjson类库文件,有两种方式获取,第一种为:(StartConfig\packages\LitJson.0.17.0\lib\net45\LitJSON.dll),第二种为:点击生成/生成解决方案后,在(StartConfig\StartConfig\bin\Debug\LitJSON.dll),值得注意的是,第二种我们直接生成了exe可执行程序,这就是我们Form窗体程序最终打包出来的包体,后面结合参数接收的Unity打包项目就可以参与测试。

三、参数接收

(1)新建Unity项目:ReceiveParameter,Project视图层级如下:
在上述提到的LitJSON.dll导入Plugins文件夹内,方便后面引用,Game1与Game2很简单,和上一篇博客保持一致,弄一个text文本框说明该场景是那个场景即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)Start场景层级如图:主要包含用户名、年龄、进入游戏按钮,用于接收传入参数的显示和按钮事件的添加,各位同学自己搭建一下即可,非常简单。
在这里插入图片描述
(3)编写StartManager脚本,并挂载在StartUI上,将用户名、年龄、按钮拖入其中
在这里插入图片描述

using UnityEngine;
using UnityEngine.UI;
using LitJson;

public class StartManager : MonoBehaviour
{
    
    
    public Text text_UserName;
    public Text text_Age;
    public Button button_EnterGame;

    private StartConfigInfo startConfigInfo;

    private void Start()
    {
    
    
        Init();
    }

    /// <summary>
    /// 初始化
    /// </summary>
    private void Init()
    {
    
    
        string receiveStr = System.Environment.GetCommandLineArgs()[1];
        startConfigInfo = JsonMapper.ToObject<StartConfigInfo>(receiveStr);

        text_UserName.text += startConfigInfo.userName;
        text_Age.text += startConfigInfo.age.ToString();

        button_EnterGame.onClick.AddListener(() =>
        {
    
    
            UnityEngine.SceneManagement.SceneManager.LoadScene(startConfigInfo.sceneName);
        });
    }

    /// <summary>
    /// 启动配置信息
    /// </summary>
    public class StartConfigInfo
    {
    
    
        public string userName;
        public int age;
        public string sceneName;
    }
}

(4)最后打个包,利用Form窗口,选择我们打包的exe程序路径,运行后即可将参数带入所执行的exe程序中,在程序中,将会展示用户名和年龄,并通过不同的场景名称进入不同的场景。

四、展现效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38484443/article/details/111622800