找回密码
 注册帐号

扫一扫,访问微社区

unity与其他程序之间的通信

15
回复
3384
查看
[ 复制链接 ]
7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

2017-6-8 13:54:56 显示全部楼层 阅读模式
30蛮牛币
现在需要实现一个这样的功能,unity build之后的EXE的中,场景里有很多按钮,点击任何一个按钮,都可以弹出另一个独立的程序(该程序是由VS写的) ,点击场景中不同的按钮,对应的VS程序中的某一栏的text发生相应的变化;你们觉得我用什么方式实现这个功能合适?socket还是其他?有没有好的demo借鉴一下,给个地址或者什么的;
回复

使用道具 举报

排名
667
昨日变化

20

主题

1195

帖子

3828

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
14
蛮牛币
19348
威望
0
注册时间
2015-1-14
在线时间
1235 小时
最后登录
2021-4-14
2017-6-8 13:54:57 显示全部楼层
1, socket  通信,,但是这种通信,是 Unity exe,跟 其他程序 必须是建立连接的状态,意思就是必须同时现在都在执行过程中,且 连接已经建立
   这样定义 消息接受,发送 机制就可以了
2, 假如要求 untiy  exe 去启动一个 为启动的程序,那么使用进程启动,具体代码网上有,c# ,c++ 都可以,可携带参数启动~~在启动后,Unity 内可记录进程句柄,进程句柄间直接通信,也是可以带参数的~~~不使用 socket ~

两种方式认选,代码不能帮你了,自行百度吧~
回复

使用道具 举报

7日久生情
2051/5000
排名
1989
昨日变化

8

主题

783

帖子

2051

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17912
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-10-17
2017-6-8 16:18:22 显示全部楼层
好像直接启动就行吧 我记得好像有这种方法 最多是在exe里面再包一层  
回复

使用道具 举报

7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

楼主 2017-6-8 16:57:48 显示全部楼层
zhulin5230 发表于 2017-6-8 16:18
好像直接启动就行吧 我记得好像有这种方法 最多是在exe里面再包一层

老哥,现在已经实现了点击按钮弹出另外一个程序,我现在要做的是,点击Unity bulid出来的的程序上的不同按钮,都弹出另外一个程序,但是程序中的某个字段的值是根据点击的具体按钮 一一对应的;
回复

使用道具 举报

7日久生情
2051/5000
排名
1989
昨日变化

8

主题

783

帖子

2051

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17912
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-10-17
2017-6-8 17:11:15 显示全部楼层
马云 发表于 2017-6-8 16:57
老哥,现在已经实现了点击按钮弹出另外一个程序,我现在要做的是,点击Unity bulid出来的的程序上的不同 ...

启动的程序不是可以传参数的么
回复

使用道具 举报

7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

楼主 2017-6-8 17:17:20 显示全部楼层
zhulin5230 发表于 2017-6-8 17:11
启动的程序不是可以传参数的么

现在就是不知道如何 将unity build的程序A 与另外一个程序B联系起来 ,通过点击A上面不同的按钮 来改变B程序上显示的值;
回复

使用道具 举报

6蛮牛粉丝
1073/1500
排名
3696
昨日变化

1

主题

193

帖子

1073

积分

Rank: 6Rank: 6Rank: 6

UID
13769
好友
8
蛮牛币
2126
威望
0
注册时间
2014-2-6
在线时间
469 小时
最后登录
2018-5-15
QQ
2017-6-8 17:25:21 显示全部楼层
在windows上的话直接启动B程序就好了
回复

使用道具 举报

7日久生情
2051/5000
排名
1989
昨日变化

8

主题

783

帖子

2051

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17912
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-10-17
2017-6-8 17:31:03 显示全部楼层
Process.Start("C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe");
这种的是启动程序吧
public static Process Start (string fileName, string arguments)
{
        return Process.Start (new ProcessStartInfo (fileName, arguments));
}

后面这个就是参数 你可以调用的时候将按钮上的数值传进去
然后在B的exe中接收一下就好了 如果B是你们自己写的
回复

使用道具 举报

9以坛为家
20452/50000
排名
458
昨日变化

236

主题

1万

帖子

2万

积分

Rank: 9Rank: 9Rank: 9

UID
78862
好友
19
蛮牛币
42588
威望
0
注册时间
2015-3-11
在线时间
3350 小时
最后登录
2021-4-15
QQ
2017-6-8 17:59:27 来自Mobile--- 显示全部楼层
socket通信就行啊
回复

使用道具 举报

9以坛为家
20452/50000
排名
458
昨日变化

236

主题

1万

帖子

2万

积分

Rank: 9Rank: 9Rank: 9

UID
78862
好友
19
蛮牛币
42588
威望
0
注册时间
2015-3-11
在线时间
3350 小时
最后登录
2021-4-15
QQ
2017-6-8 18:00:31 来自Mobile--- 显示全部楼层
http://www.manew.com/thread-95818-1-1.html这个改改就可以了
回复

使用道具 举报

7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

楼主 2017-6-12 08:57:05 显示全部楼层
zhulin5230 发表于 2017-6-8 17:31
Process.Start("C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe");
这种的是启动程序吧
public static Proce ...

哥们,VS程序中怎么获取传过去的参数呢?实现了的话给你分。
回复

使用道具 举报

7日久生情
2051/5000
排名
1989
昨日变化

8

主题

783

帖子

2051

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17912
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-10-17
2017-6-12 09:41:29 显示全部楼层
马云 发表于 2017-6-12 08:57
哥们,VS程序中怎么获取传过去的参数呢?实现了的话给你分。

不是为了分 是见过这个思路 做出的东西 下面是代码 你看看能不能用
(一)、先制作一个带启动参数的EXE文件。

步骤:

           1、定义全局私有变量:private string[] s = new string[1];  //这里为了简单起见,只做一个参数

           2、  在窗体的构造函数中初始化启动参数  

          public Form1(string[] p)
        {
            InitializeComponent();
            s = p;
        }



          3、在main()函数中进行参数判断

        static void Main(string[]   args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (args.Length <= 0)
            {
                MessageBox.Show("请输入启动参数");
                Application.Exit();
            }
            if (args.Length == 1)
            {
                if (args[0] == "Test")
                {
                    Application.Run(new Form1(args));
                }
                else
                {
                    MessageBox.Show("启动参数错误,请输入Test");
                    Application.Exit();
                }
            }
        }

到这里,带启动参数的EXE文件制作完成



(二)调用带参数EXE文件(调用刚才做的程序),我写了下面这个简单的函数

        public bool StartProcess(string filename, string[] args)
        {
            try
            {
                string s="";
                foreach(string arg in args)
                {
                s=s+arg+" ";
                }
                s=s.Trim();
                Process myprocess = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo(filename,s);
                myprocess.StartInfo = startInfo;

//通过以下参数可以控制exe的启动方式,具体参照 myprocess.StartInfo.下面的参数,如以无界面方式启动exe等
                myprocess.StartInfo.UseShellExecute = false;
                myprocess.Start();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("启动应用程序时出错!原因:" + ex.Message);
            }
            return false;
        }

接着,在调用的地方调用此函数

        private void button1_Click(object sender, EventArgs e)
        {
            string[] arg = new string[1];
            arg[0] = textBox1.Text.Trim();
            StartProcess(@"E:/ZHOUXL/C#/FileOP/FileOP/bin/Debug/FileOP.exe",arg);
        }
回复

使用道具 举报

7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

楼主 2017-6-12 10:03:00 显示全部楼层
zhulin5230 发表于 2017-6-12 09:41
不是为了分 是见过这个思路 做出的东西 下面是代码 你看看能不能用
(一)、先制作一个带启动参数的EXE文 ...

你说的这个代码我见过,我不需要弄得那么麻烦,下面的代码是A程序 ,点击打开B给B 传参数,B是怎么怎么获取这个"192.168.1.1"的,有什么方法没
        if (GUI.Button(new Rect(50, 50, 100, 30), "Click"))
        {
            Process process = new Process();
            process.StartInfo.FileName = @"openExe\\PreviewDemo\\bin\\PreviewDemo.exe";
            process.StartInfo.Arguments = "192.168.1.1";
            process.Start();
        }
回复

使用道具 举报

7日久生情
2490/5000
排名
1286
昨日变化

14

主题

89

帖子

2490

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
187775
好友
6
蛮牛币
3649
威望
0
注册时间
2016-11-28
在线时间
1455 小时
最后登录
2021-4-16

活力之星

楼主 2017-6-12 10:20:41 显示全部楼层
绝世love情缘 发表于 2017-6-8 18:42
1, socket  通信,,但是这种通信,是 Unity exe,跟 其他程序 必须是建立连接的状态,意思就是必须同时现 ...

第二种方法,启动的时候携带参数,那B程序是通过什么方式获取这个参数改变字段的值的。
回复

使用道具 举报

7日久生情
2051/5000
排名
1989
昨日变化

8

主题

783

帖子

2051

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17912
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-10-17
2017-6-12 10:26:28 显示全部楼层
马云 发表于 2017-6-12 10:03
你说的这个代码我见过,我不需要弄得那么麻烦,下面的代码是A程序 ,点击打开B给B 传参数,B是怎么怎么获 ...

我也是醉了
tatic void Main(string[]   args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (args.Length <= 0)
            {
                MessageBox.Show("请输入启动参数");
                Application.Exit();
            }
            if (args.Length == 1)
            {
                if (args[0] == "Test")
                {
                    Application.Run(new Form1(args));
                }
                else
                {
                    MessageBox.Show("启动参数错误,请输入Test");
                    Application.Exit();
                }
            }
        }


if (args[0] == "Test") 这个就是啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关注游戏蛮牛公众号送vip