【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2438

当前位置:游戏蛮牛 技术专区 开发者专栏

查看: 4316|回复: 38

[提笔写忧伤] exe传参启动

[复制链接]  [移动端链接]
排名
672
昨日变化
1

18

主题

1162

帖子

3510

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
13
蛮牛币
18222
威望
0
注册时间
2015-1-14
在线时间
954 小时
最后登录
2019-3-20
发表于 2018-8-17 18:51:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
    最近刚刚换了个公司,项目端游,定位海外市场,进公司首先安排些launcher 登录器启动unity exe 程序,使用MFC编写,写了花大概近2个月,各种趟坑,现在总算主要功能,以及他们的要求作完了。其实写这篇文章是想写一个unity的exe 程序结合 launcher 登录器,或者 dos命令行传参启动的,外部传参接受存储,提取功能。   好了转正文:
unity的exe 启动接受参数的关键函数是:System.Environment.GetCommandLineArgs();函数返回  string[] 数组;
解释以下这个数组:下标0为我们的exe 程序的全路径,下标1往后面的为我们的启动传入的参数,但是通常我的设计是不会让它下标超过2个的,因为对于我的解析来说现对于那样使用不是很方便。因此我的设计下标只要0,1
说道这里其实使用一个string存储下标1 就完事了,要讲的也就讲完了!
其实不然!!那么下面是我如何存储解析这个参数的,使用一个全局脚本CommandLineMgr 来管理存储参数,静态接口,方便游戏内其他模块随时访问提取,好了代码如下:
1> 接受参数就是使用上面说道关键函数
[AppleScript] 纯文本查看 复制代码
    /// <summary>
    /// 接受方法
    /// </summary>
    /// <returns></returns>
    public static void Accept()
    {
        try
        {
            string[] args = System.Environment.GetCommandLineArgs();
            if (args.Length > 1)
            {
                string rcom = args[1];
                AnalyticalParameter(rcom);
            }
        }
        catch (Exception e)
        {
            Debug.Log("获取命令行参数失败!");
        }
    }



然后我定义了参数类型 使用了一个枚举
[AppleScript] 纯文本查看 复制代码
    public enum CommandLineType
    {
        Account,                                            //账号
        Password,                                          //密码
    }



然后存储,提取都会是根据枚举,得到想要得到的数据


好了,以下是解析函数就是对于 刚才说到的下标1 的string解析,存储到枚举值对应到的容器内
注:参数间使用 ; 分号分割,当然你如果喜欢其他符号分割也是可以的。
[AppleScript] 纯文本查看 复制代码
    /// <summary>
    /// 解析参数
    /// </summary>
    /// <param name="Command">参数字符</param>
    /// <returns></returns>
    private static void AnalyticalParameter(string Command)
    {
        string[] paramArray = Command.Split(';');
        for (int i = 0 ; i < paramArray.Length; i ++)
        {
            string param = paramArray[i];
            string[] pair = param.Split('=');

            if(pair.Length != 2)
                continue;

            string key = pair[0];
            string value = pair[1];

            CommandLineType type = (CommandLineType)Enum.Parse(typeof(CommandLineType), key);
            CommandLineParameter.Add(type, value);
        }
    }




好了到关键了,这时参数都存储到容器内了,怎么在需要模块内提取到信息呢?有人说了,简单!既然我上面都说了,枚举就是数据的key ,直接取出来就完了!不是不行,我是觉得这样子不太方便,看我是如何做的
[AppleScript] 纯文本查看 复制代码
public static T GetParam<T>(CommandLineType ctype)
    {
        System.Object obj = default(T);

        Type type = typeof(T);

        if(CommandLineParameter.ContainsKey(ctype))
        {
            string valueStr = CommandLineParameter[ctype];
            if (!string.IsNullOrEmpty(valueStr))
            {
                if (type == typeof(int))
                {
                    int n = -1;
                    if (int.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(float))
                {
                    float n = -1;
                    if (float.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(double))
                {
                    double n = -1;
                    if (double.TryParse(valueStr, out n))
                        obj = n;
                }
                if (type == typeof(string))
                {
                    obj = valueStr;
                }
                if (type == typeof(bool))
                {
                    bool boolValue;
                    if (!bool.TryParse(valueStr, out boolValue) && valueStr != "否" && valueStr != "0")
                    {
                        boolValue = true;
                    }
                    obj = boolValue;
                }
            }
        }
        return (T)obj;
    }




我是根据想要的这个枚举数据,你认为它是什么基础类型,就传入对应 T,就输出对应类型,比如我提供了2个测试数据,账号跟密码,我都可以以为它们是数字类型,也可以是string 类型,看你的应用需求而定


好了,有点基础的人都能看得懂这部分代码,其实简单~主要想申明的是一种“懒人”的思想~,模块能封装的尽量封装出方便使用的方法或者接口,便于使用,便于扩展,对于维护量,bug 率的效果都是有很好的体现


下面放出测试工程,要学习的附件提取哦~
另外如果想测试效果,将他们打成EXE,使用命令行启动(由于你们没有launcher启动,命令行启动也是可以的) 输入例子: 112.png CommandLine.zip (4.71 KB, 下载次数: 295)

评分

参与人数 1鲜花 +2 收起 理由
镜月之言 + 2 很给力!

查看全部评分


回复

使用道具 举报

2初来乍到
118/150
排名
15584
昨日变化
2

0

主题

19

帖子

118

积分

Rank: 2Rank: 2

UID
224263
好友
0
蛮牛币
9
威望
0
注册时间
2017-5-30
在线时间
52 小时
最后登录
2019-3-20
发表于 2018-8-17 20:20:54 | 显示全部楼层
学习了!
[发帖际遇]: 一个袋子砸在了 a2298752 头上,a2298752 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

7日久生情
1513/5000
排名
2101
昨日变化
5

1

主题

498

帖子

1513

积分

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

UID
56245
好友
1
蛮牛币
4062
威望
0
注册时间
2014-11-18
在线时间
354 小时
最后登录
2019-3-20
发表于 2018-8-17 22:40:05 | 显示全部楼层
难得的经验,好好学学习一下
[发帖际遇]: l_mzg 在网吧通宵,花了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

3偶尔光临
298/300
排名
6931
昨日变化
1

0

主题

47

帖子

298

积分

Rank: 3Rank: 3Rank: 3

UID
292147
好友
0
蛮牛币
917
威望
0
注册时间
2018-8-1
在线时间
61 小时
最后登录
2018-12-19
发表于 2018-8-18 07:59:52 | 显示全部楼层
66666666666666

回复

使用道具 举报

7日久生情
1623/5000
排名
1992
昨日变化
13

5

主题

482

帖子

1623

积分

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

UID
54335
好友
2
蛮牛币
5511
威望
0
注册时间
2014-11-9
在线时间
456 小时
最后登录
2019-3-20
发表于 2018-8-18 10:39:51 | 显示全部楼层
多谢楼主分享

回复

使用道具 举报

5熟悉之中
982/1000
排名
1979
昨日变化
6

0

主题

9

帖子

982

积分

Rank: 5Rank: 5

UID
152977
好友
0
蛮牛币
2290
威望
0
注册时间
2016-6-21
在线时间
291 小时
最后登录
2019-3-20
发表于 2018-8-18 11:22:44 | 显示全部楼层
我一般都直接传个json进去,简单通用

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1335/1500
排名
1480
昨日变化
3

1

主题

234

帖子

1335

积分

Rank: 6Rank: 6Rank: 6

UID
2627
好友
0
蛮牛币
1127
威望
0
注册时间
2013-8-26
在线时间
246 小时
最后登录
2019-3-20

社区QQ达人

发表于 2018-8-18 16:01:01 | 显示全部楼层
我一般都直接传个json进去,简单通用

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1290/1500
排名
2342
昨日变化
8

0

主题

311

帖子

1290

积分

Rank: 6Rank: 6Rank: 6

UID
119648
好友
3
蛮牛币
1790
威望
0
注册时间
2015-8-25
在线时间
375 小时
最后登录
2019-3-20
QQ
发表于 2018-8-20 09:07:32 | 显示全部楼层
学习了!

回复

使用道具 举报

7日久生情
1524/5000
排名
3443
昨日变化
1

0

主题

886

帖子

1524

积分

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

UID
210390
好友
0
蛮牛币
1842
威望
0
注册时间
2017-3-7
在线时间
204 小时
最后登录
2019-3-19
发表于 2018-8-20 10:24:08 | 显示全部楼层

回复

使用道具 举报

6蛮牛粉丝
1413/1500
排名
1707
昨日变化
5

0

主题

220

帖子

1413

积分

Rank: 6Rank: 6Rank: 6

UID
224749
好友
1
蛮牛币
2143
威望
0
注册时间
2017-6-2
在线时间
429 小时
最后登录
2019-3-20
发表于 2018-8-21 09:35:50 | 显示全部楼层
学习学习

回复

使用道具 举报

7日久生情
2320/5000
排名
1613
昨日变化

72

主题

476

帖子

2320

积分

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

UID
71862
好友
28
蛮牛币
4164
威望
0
注册时间
2015-1-29
在线时间
744 小时
最后登录
2019-1-16

专栏作家蛮牛译员

发表于 2018-8-21 13:39:32 | 显示全部楼层
谢谢楼主分享,学习了

回复 支持 反对

使用道具 举报

5熟悉之中
876/1000
排名
2501
昨日变化
2

0

主题

66

帖子

876

积分

Rank: 5Rank: 5

UID
231194
好友
0
蛮牛币
2843
威望
0
注册时间
2017-7-10
在线时间
226 小时
最后登录
2019-3-12
发表于 2018-8-24 08:23:23 | 显示全部楼层
多谢楼主分享
[发帖际遇]: 简简单单happy 在网吧通宵,花了 1 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

5熟悉之中
613/1000
排名
6773
昨日变化

0

主题

286

帖子

613

积分

Rank: 5Rank: 5

UID
250350
好友
2
蛮牛币
612
威望
0
注册时间
2017-10-23
在线时间
131 小时
最后登录
2019-3-9
发表于 2018-8-25 14:07:40 | 显示全部楼层
多谢楼主分享

回复

使用道具 举报

5熟悉之中
957/1000
排名
2331
昨日变化

7

主题

95

帖子

957

积分

Rank: 5Rank: 5

UID
31690
好友
5
蛮牛币
17216
威望
0
注册时间
2014-6-28
在线时间
247 小时
最后登录
2018-10-26
发表于 2018-8-27 10:04:21 | 显示全部楼层
学习学习

回复

使用道具 举报

6蛮牛粉丝
1036/1500
排名
3329
昨日变化
1

3

主题

187

帖子

1036

积分

Rank: 6Rank: 6Rank: 6

UID
62741
好友
1
蛮牛币
1418
威望
0
注册时间
2014-12-21
在线时间
403 小时
最后登录
2019-3-18
发表于 2018-8-28 16:06:39 | 显示全部楼层
给力........................

回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表