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游戏引擎改造兼容Codis。

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

  3. scut服务器引擎 性能,Scut游戏引擎

    本词条缺少信息栏.概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Scut游戏引擎是一款免费开源的游戏服务器引擎,适用于开发AVG.SLG.RPG.MMOG等类型的网络游戏. Scut ...

  4. 我们月光工作室和我们的3款游戏被国内Unity3D游戏引擎第一技术论坛--“游戏蛮牛” 报道啦!...

    注明:目前月光工作室已经停止更新,因为创业伙伴回国,小编自己忙于<程序员联盟>社区的各样事务.以后也许会重拾App开发吧.谨以此文纪念那段美好的时光!以下的某些链接也已失效. 我们月光工作 ...

  5. 如何学好游戏3D引擎编程(摘抄)

    网上看到,觉得很好,因此收藏一下,侵删. <如何学好游戏3D引擎编程> 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术 ...

  6. 虚幻引擎4简介,UE4简介--这是一个强大的游戏开发引擎

    虚幻引擎4简介 这是一个强大的游戏开发引擎 虚幻引擎(Unreal Engine /UE)是EpicGames公司打造的游戏引擎,而UE4则其第四个大版本.虽然目前UE 5已经发布,但是仅仅是发布,U ...

  7. 如何学好游戏3D引擎编程

    <如何学好游戏3D引擎编程>     此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 --阿哲VS自己 QQ7 ...

  8. 爆款小游戏用的都是什么游戏开发引擎?

    随着微信生态中,小程序应用指数级的增长,许多休闲游戏变成为了众多游戏厂商流量变现的新手段.以近期很火的"羊了个羊"为例,它便是我们常常所说的小游戏. 游戏和小游戏的区别 要盘点小游 ...

  9. Unity,最炙手可热的游戏开发引擎

    近日,Unity亚洲开发者大会在国家会议中心成功举行,引得业内人士高度关注.而纵观各大网站招聘信息,用人单位对unity开发人员的招聘可谓求贤若渴,除去高薪诱惑.升职诱惑,甚至不惜打起感情牌,动之以情 ...

  10. Unity+GME 腾讯新版的游戏语音(游戏多媒体引擎)

    前言: 之前用的GCloudVoice,一个很坑的SDK.后来用着用着突然发现不能用了,神奇!然后去登录控制台一查,发现腾讯把这个东西的相关网页从腾讯云平台上删除了.现在只能在百度上面搜到他的原始网页 ...

最新文章

  1. Java ExecutorService 线程池
  2. 如何看待 70% 的程序员,缺乏数据结构和算法知识?
  3. python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践
  4. mysql命令导出数据库_MYSQL 数据库导入导出命令
  5. MIP 脚本域名地址变更公告
  6. 华为Mate 50系列明年亮相:或首发高通骁龙898 4G芯片
  7. 【翻译】IdentityServer4:基于资源的配置
  8. 可管理多台远程mysql服务器的phpmyadmin_修改phpMyAdmin使其能够管理多台远程MySQL服务器...
  9. 使用VS2012新建空白解决方案
  10. java对接金蝶webapi
  11. android 7.0 so.toc,[toc]文档导航 侧边栏目录 markdown
  12. sin_cos_tan_cot_sec_cosec 三角函数计算器
  13. SD卡和SDHC卡操作
  14. 了凡四训 第一篇《立命之学》
  15. jqgrid实现表头合并功能
  16. python自带库zlib_python中的zlib解压
  17. 如何有效的对云专线进行测速
  18. Window10设置图标名、文件名的字体大小方法
  19. python写金字塔(数字金字塔)
  20. UE4鼠标滚轮轴缩放事件设置无效

热门文章

  1. asp.net 设置敲回车触发按钮
  2. PHP - Redis实现入队出队
  3. 如何写出优质干净的代码,这6个技巧你不能错过
  4. MySQL使用规范手册,程序员必知必会
  5. Matlab函数——wgn
  6. config.guess: unable to guess system type、config.sub: missing argument
  7. 代码管理学:常量类应该单独一个目录,还是在模块目录下?
  8. 编译WINDOWS版FFmpeg:编译FFmpeg
  9. 编译OpenJDK8:NMAKE : fatal error U1077
  10. NWT纪事:说是闷声发大财,不干活就发财了?