Scut游戏server引擎Unity3d访问

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源代码下载

时间: 2024-10-27 08:05:25

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

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

[狗刨学习网] Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svnSDKUnity3dAssets目录下的TestScene.unity项目文件,选中Main Camera,将TestGUI.cs文件拖动到Inspector窗口的Script,如图: 点击运行,如下: 目录层次说明 1)       Net层:封装Http与Socket请求操作,以及网络协议的数据解析和请求参数的打包,其中

手机游戏服务器引擎Scut免费开源

scut 官网:http://www.scutgame.com/ Scut是一个开源.免费.稳定.快速开发的手机游戏服务器引擎,支持开发人员使用Python脚本语言或C#语言开发:底层采用C#编写,基于MVC框架思想设计, 开发人员只需要关注如何定义数据实体类及属性,不再需要关注多据库(MSSQL.MySql等)及表设计,Scut会帮助你自动检测生成相应数据库的表结构:它还提供了丰富的AIP和成熟的游戏模块中间件,快速开发你的游戏服务器应用,和Cocos2d-x完美结合,提供基于Cocos2d-

2014-07-30 MVC框架中对SQL Server数据库的访问

今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如图1所示: 图1 第二步,在上述Movies.cs文件中的namespace MvcTest.Models{}中输入如下代码: 1 public class Movie 2 { 3 public int ID { get; set; } 4 public string Title { get; se

Unity3D游戏开发之Unity3D动画与Mecanim动画系统

Unity3D游戏开发之Unity3D动画与Mecanim动画系统 欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. Mecanim是Unity新增的动画系统,其功能强大而灵活,让人类和非人类角色栩栩如生.Mecanim的重定向极大的提供了工作效率,而且占用极少CPU周期.使用从Unity资源商店找到的动画资源,或

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

注:本文是网上看到的一篇文章,感觉写的很好,因此收藏了下来 <如何学好游戏3D引擎编程>此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰--阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是我一年半前,找工作时候写的,那时是发到学校的BBS上.现在我工作了,想法和以前也有不同,但对游戏引擎编程理念还是基本差不多.在我没遇到U3以前,一直研究WILDMAGIC,可以说是GAMEBRYO的前身吧,他们基

使用GoWorld游戏服务器引擎轻松实现分布式聊天服务器

GoWorld游戏服务器引擎简介 GoWorld是一款开源的分布式可扩展的游戏服务器引擎,使用Go语言(Golang)编写.它采用类似BigWorld的结构,使用了简化的场景-对象框架.以一个典型的MMORPG为例,每个服务器上会有多个场景,每个场景里可以包含多个对象,这些对象包括玩家.NPC.怪物等.GoWorld服务器可以将场景分配到在不同的进程甚至不同的机器上,从而使得游戏服务器的负载是可扩展的. 开源分布式游戏服务器引擎:https://github.com/xiaonanln/gowo

Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作

前段时间我们游戏server升级到开发环境Java8,这些天,我再次server的线程模型再次设计了一下,耗费Lambda表情. LambdaJava代码.特别是丑陋不堪的匿名内部类,这篇文章主要就是想和大家分享这一点. 线程模型 首先简介一下我们游戏server的线程模型.大致例如以下图所看到的: Netty线程池仅仅处理消息的收发,当Netty收到消息之后.会交给游戏逻辑线程处理.因为是单线程在处理游戏逻辑,所以每个消息必须非常快处理完.也就是说,不能有数据库等耗时操作.不然逻辑线程非常可能

HTML5游戏开发引擎Pixi.js新手入门讲解

在线演示 本地下载 ?这篇文章中,介绍HTML5游戏引擎pixi.js的基本使用. 相关代码如下: Javascript 导入类库:(使用极客的cdn服务:http://cdn.gbtags.com) <scripttype="text/javascript"src="http://cdn.gbtags.com/pixi.js/1.6.1/pixi.js"></script> 引擎使用: .... .... 阅读原文:HTML5游戏开发引擎P

SQL Server跨库访问

MSSQLServer不同服务器数据库之间的数据操作 方法1: --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址' exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名', '密码' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.db