游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2356

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

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 3272|回复: 37

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

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

17

主题

1148

帖子

3292

积分

Rank: 9Rank: 9Rank: 9

UID
68430
好友
13
蛮牛币
11907
威望
0
注册时间
2015-1-14
在线时间
891 小时
最后登录
2018-11-21
发表于 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, 下载次数: 196)

评分

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

查看全部评分


回复

使用道具 举报

排名
23396
昨日变化
18

0

主题

13

帖子

55

积分

Rank: 2Rank: 2

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

回复

使用道具 举报

6蛮牛粉丝
1124/1500
排名
2779
昨日变化

1

主题

359

帖子

1124

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

3偶尔光临
281/300
排名
7061
昨日变化
38

0

主题

47

帖子

281

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

6蛮牛粉丝
1302/1500
排名
2558
昨日变化
1

5

主题

409

帖子

1302

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
697/1000
排名
2922
昨日变化
7

0

主题

7

帖子

697

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1256/1500
排名
1508
昨日变化
1

1

主题

224

帖子

1256

积分

Rank: 6Rank: 6Rank: 6

UID
2627
好友
0
蛮牛币
1161
威望
0
注册时间
2013-8-26
在线时间
221 小时
最后登录
2018-11-13

社区QQ达人

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1176/1500
排名
2558
昨日变化
1

0

主题

297

帖子

1176

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1298/1500
排名
3961
昨日变化
2

0

主题

766

帖子

1298

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1239/1500
排名
2040
昨日变化
4

0

主题

213

帖子

1239

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

7日久生情
2317/5000
排名
1530
昨日变化

72

主题

475

帖子

2317

积分

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

UID
71862
好友
28
蛮牛币
4160
威望
0
注册时间
2015-1-29
在线时间
742 小时
最后登录
2018-11-21

专栏作家蛮牛译员

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

回复 支持 反对

使用道具 举报

5熟悉之中
806/1000
排名
2622
昨日变化
1

0

主题

62

帖子

806

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

5熟悉之中
591/1000
排名
6850
昨日变化
3

0

主题

285

帖子

591

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

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

7

主题

95

帖子

957

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

5熟悉之中
956/1000
排名
3566
昨日变化
3

3

主题

184

帖子

956

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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