Scut提供Unity3d Sdk包。便利的高速发展和Scut游戏server对接; 看Unity3d示为以下的比率:

启动Unity3d项目




打开Scutc.svn\SDK\Unity3d\Assets文件夹下的TestScene.unity项目文件,选中Main
Camera。将TestGUI.cs文件拖动到Inspector窗体的Script,如图:




















点击执行。例如以下:




 



文件夹层次说明


1)      
Net层:封装Http与Socket请求操作,以及网络协议的数据解析和请求參数的打包,当中NetWriter里有SetMd5Key为设置网络协议请求參数的Key,用于跟服务校验请求參数的有效性


2)      
Reflect层:提供高性能的反射功能


3)      
Security层:加密操作


4)      
Serialization层:封装对象的序列化操作


5)      
Game层:游戏业务逻辑层代码实现功能,此文件夹下的Action和Behaviour文件夹,依据业务自己实现代码


6)      
CustomHeadFormater类:自定的结构消息头解析器


7)      
TestGUI.cs为測试脚本

 



TestGUI代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using
UnityEngine;
  
public
class
TestGUI : MonoBehaviour
{
  
    // Use this for initialization
    void
Start()
    {
        //todo 启用自定的结构
        Net.Instance.HeadFormater =
new CustomHeadFormater();
    }
  
    // Update is called once per frame
    void
Update()
    {
  
    }
  
    void
OnGUI()
    {
  
        // Now create any Controls you like, and they will be displayed with the custom Skin
        if
(GUILayout.Button("Click Http"))
        {
            NetWriter.SetUrl("http://ph.scutgame.com/service.aspx");
            Net.Instance.Send((int)ActionType.RankSelect,
null);
        }
  
        // Any Controls created here will use the default Skin and not the custom Skin
        if
(GUILayout.Button("Click Socket"))
        {
            NetWriter.SetUrl("ph.scutgame.com:9001");
            Net.Instance.Send((int)ActionType.RankSelect,
null);
        }
    }
}

  

Send方法接口会依据url是否带http字段来推断是否是用http还是socket,


Action和Behaviour文件夹下实现自己的业务代码

自定头部解析类CustomHeadFormater代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using
System;
using
GameRanking.Pack;
using
ZyGames.Framework.Common.Serialization;
  
/// <summary>
/// 定制的头部结构解析
/// </summary>
public
class
CustomHeadFormater : IHeadFormater
{
    public
bool TryParse(byte[] data,
out PackageHead head,
out byte[] bodyBytes)
    {
        bodyBytes =
null;
        head =
null;
        int
pos = 0;
        if
(data == null
|| data.Length == 0)
        {
            return
false;
        }
        int
headSize = GetInt(data, ref
pos);
        byte[] headBytes =
new byte[headSize];
        Buffer.BlockCopy(data, pos, headBytes, 0, headBytes.Length);
        pos += headSize;
        ResponsePack resPack = ProtoBufUtils.Deserialize<ResponsePack>(headBytes);
  
        head =
new PackageHead();
        head.StatusCode = resPack.ErrorCode;
        head.MsgId = resPack.MsgId;
        head.Description = resPack.ErrorInfo;
        head.ActionId = resPack.ActionId;
        head.StrTime = resPack.St;
  
        int
bodyLen = data.Length - pos;
        if
(bodyLen > 0)
        {
            bodyBytes =
new byte[bodyLen];
            Buffer.BlockCopy(data, pos, bodyBytes, 0, bodyLen);
        }
        else
        {
            bodyBytes =
new byte[0];
        }
  
        //UnityEngine.Debug.Log(string.Format("ActionId:{0}, ErrorCode:{1}, len:{2}", resPack.ActionId, resPack.ErrorCode, bodyBytes.Length));
  
        return
true;
    }
  
    private
int GetInt(byte[] data,
ref int
pos)
    {
        int
val = BitConverter.ToInt32(data, pos);
        pos +=
sizeof(int);
        return
val;
    }
}

  

BaseAction代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/// <summary>
/// 自定结构Action代理基类
/// </summary>
public
abstract
class
BaseAction : GameAction
{
    protected
BaseAction(int
actionId)
        :
base(actionId)
    {
    }
  
    protected
override void
SetActionHead(NetWriter writer)
    {
        MessagePack headPack =
new MessagePack()
        {
            MsgId = Head.MsgId,
            ActionId = ActionId,
            SessionId = Head.SessionId,
            UserId = Head.UserId
        };
        byte[] data = ProtoBufUtils.Serialize(headPack);
        writer.SetHeadBuffer(data);
        writer.SetBodyData(null);
    }
}

  

Action1001代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using
System;
using
System.Collections.Generic;
using
GameRanking.Pack;
using
ZyGames.Framework.Common.Serialization;
  
public
class
Action1001 : BaseAction
{
    private
Response1001Pack _responseData;
  
    public
Action1001()
        :
base((int)ActionType.RankSelect)
    {
    }
  
    protected
override void
SendParameter(NetWriter writer, object
userData)
    {
    //自定对象參数格式
    Request1001Pack requestPack =
new Request1001Pack()
    {
        PageIndex = 1,
        PageSize = 10
    };
    byte[] data = ProtoBufUtils.Serialize(requestPack);
    writer.SetBodyData(data);
    }
  
    protected
override void
DecodePackage(NetReader reader)
    {
        if
(reader.StatusCode == 0)
        {
        //自定对象格式解包
        _responseData = ProtoBufUtils.Deserialize<Response1001Pack>(reader.Buffer);
              
        }
    }
  
    protected
override void
Process(object
userData)
    {
        if
(_responseData != null)
        {
            UnityEngine.Debug.Log(string.Format("ok,
count:{0}"
, _responseData.PageCount));
        }
    }
}

  

一个完整的样本Sample For Unity3d源代码下载

Scut游戏server引擎Unity3d访问的更多相关文章

  1. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新

    1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...

  2. Scut游戏服务器引擎6.0.5.0发布-支持C#脚本

    1. 增加C#脚本支持2. 增加Pay和Sns中间件对Mysql数据库支持3. 精简布署步骤,取消Redis写入程序,将其移到游戏底层运行4. 修正Mysql对中文可能会出现乱码的BUG 点击下载:S ...

  3. Scut游戏服务器引擎之Unity3d接入

    Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets目录 ...

  4. Scut游戏服务器引擎之新手入门

    1. 开发语言:Scut提供C#或Python两种脚本语言开发,Python脚本的性能会比较差,建议使用编译执行的C#代码: 2. 运行平台:Scut可以Window与Linux平台上运行,Linux ...

  5. Scut游戏服务器引擎6.5.8.6发布

    1.增加从Redis中加载数据到Cache可设置筛选条件2.修改在Web项目中的不能支持自定协议问题3.修改Share类型的Model在Redis中为空时会尝试从DB中加载数据4.修改Model命名空 ...

  6. Scut游戏服务器引擎6.0.5.2发布

    1. 增加C#脚本中能引用多个C#脚本文件的支持2. 修正Web应用程序中使用C#脚本解析不到Bin目录的问题

  7. Scut游戏服务器引擎6.0.5.1发布

    1. 修正缓存删除时不会更新到Redis的问题 2. 修正Model组合3个以上子类时Change事件未绑定的问题 3. 修正中间层MySql与MsSql数据库Sql语句分页问题

  8. Scut游戏服务器引擎5.6.3.5发布

    版本:5.6.3.5 (2013-11-25) 1. 优化实体ChangeKey队列,减少写库IO(默认为5分钟写入一次数据库) 2. 优化Protobuf序列化启用自动GZip压缩,减少Redis内 ...

  9. Scut游戏引擎改造兼容Codis。

    原生的Scut引擎是采用redis来做数据缓存层,引擎在以异步的方式(时间可配置,默认100ms)实现数据同步.为了提高redis的可扩展性.高可用性,把redis换成codis,因为codis有部分 ...

随机推荐

  1. POJ 1515 Street Directions

    题意: 一幅无向图  将尽量多的无向边定向成有向边  使得图强连通  无向图保证是连通的且没有重边 思路: 桥必须是双向的  因此先求边双连通分量  并将桥保存在ans中 每一个双连通分量内的边一定都 ...

  2. 树上第k小,可持久化线段树+倍增lca

    给定一颗树,树的每个结点都有权值, 有q个询问,每个询问是 u v k ,表示u到v路径上第k小的权值是多少. 每个结点所表示的线段树,是父亲结点的线段树添加该结点的权值之后形成的新的线段树 c[ro ...

  3. PB数据库相关

    ---------------------------------------------------------------- 数据库画板: 一张表定义了主键或者唯一索引,则能够在Results视窗 ...

  4. android一些面试题目

    1.ListView怎么提高滑动效率 2.说下你做过项目的包的构架,(联网,解析,activity,database) 重点 3.载入大量图片怎么做(包含小图和查看大图) 怎么降低一次跟server的 ...

  5. Java的Log系统介绍和切换(转)

    Java的log系统比较繁杂.在这里梳理一下.本文只涉及log系统介绍和处理log系统之间的切换.不涉及如何配置和使用. 具体的log系统 Log4j:准确的说是log4j 1.x版.是之前使用最广泛 ...

  6. Effective C++规定45 额外的代码

    这部分是额外的代码博客,关键45术语思想已经实现. #include<iostream> using namespace std; template<typename T> c ...

  7. 【数据结构&amp;&amp;等差数列】KMP简介和算法的实现(c++ &amp;&amp; java)

    KMP算法假定了解案件的原则,其实很easy. KMP算法简述 关于根据自己的理解在这里. KMP该算法由三个发明人的名称(Knuth.Morris.Pratt)的首字母组成,又称字符串查找算法. 个 ...

  8. hdu 4524 郑厂长系列故事——逃离迷宫 小水题

    郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  9. 阿里云server该数据光盘安装操作

    猛击这里:阿里云server该数据光盘安装操作

  10. 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

    (1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navig ...