Scut游戏server引擎Unity3d访问

Scut游戏server引擎Unity3d访问

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

启动Unity3d项目

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

Scut游戏server引擎Unity3d访问

Scut游戏server引擎Unity3d访问

点击Scut游戏server引擎Unity3d访问执行。例如以下:
Scut游戏server引擎Unity3d访问
 

文件夹层次说明
1)       Net:封装HttpSocket请求操作,以及网络协议的数据解析和请求參数的打包,当中NetWriter里有SetMd5Key为设置网络协议请求參数的Key,用于跟服务校验请求參数的有效性
2)       Reflect层:提供高性能的反射功能
3)       Security层:加密操作
4)       Serialization层:封装对象的序列化操作
5)       Game:游戏业务逻辑层代码实现功能,此文件夹下的ActionBehaviour文件夹,依据业务自己实现代码
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,
ActionBehaviour文件夹下实现自己的业务代码

自定头部解析类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源代码下载

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117324.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月7日 下午5:00
下一篇 2022年1月7日 下午5:00


相关推荐

  • 【数学基础】矩阵的特征向量、特征值及其含义

    【数学基础】矩阵的特征向量、特征值及其含义在线代课上 老师会教我们怎么求矩阵的特征值与特征向量 但是并不会讲特征值与特征向量到底有着什么样的几何意义或者物理意义 或许讲了但也比较模糊 矩阵的特征值与特征向量在各种机器学习算法与应用场景中都有出现 每次出现都有着其独特的意义 在这里也只是简述一二 一 方阵的特征值与特征向量 1 特征值与特征向量的定义 定义 1 设是阶方阵 若数和维非零列向量 使得成立 则称是方阵的一个特征值 为方阵

    2026年3月18日
    2
  • 你走后,我才真的爱上你

    你走后,我才真的爱上你你走后,我才真的爱上你

    2022年4月23日
    48
  • 流媒体服务器搭建亲测有效(srs)

    流媒体服务器搭建亲测有效(srs)流媒体服务器搭建流程第一步去官网下载 srs 的源码文件官网地址 https github com ossrs srs usage 说明 建议下载 4 0 版本 3 0 的需要 flash 的支持 目前谷歌浏览器已经停止了 flash 的使用 第二步按照官网的步骤进行操作 1 进行解压文件包 linux 命令 unzip 文件名 2 进入到解压的文件目录 cdsrs trunk3 执行编译 configure amp amp make4 启动项目 objs srs cconf srs con

    2026年3月17日
    2
  • windows开启远程桌面命令

    windows开启远程桌面命令开启远程桌面命令 关闭远程桌面 设置远程桌面端口 默认开启 3389 检查默认端口状态非命令行打开方式 1 打开 控制面板 怎么开启远程桌面连接详细教程 2 点击 系统 怎么开启远程桌面连接详细教程 3 选择 远程设置 怎么开启远程桌面连接详细教程 4 点击 远程 勾选 允许远程协助连接这台计算机 和 允许远程连接到此计算机 点击 确定 怎么开启远程桌面连接详细教程 5 在任务栏搜索 远程桌面连接 并打开 怎么开启远程桌面连接详细教程 6 输入 ip 地址后点击 连接 即可

    2026年3月18日
    2
  • Maven常用指令和配置说明

    Maven常用指令和配置说明本文总结日常工作中经常用到的Maven命令,作为总结,以便学习和回顾。

    2022年6月17日
    45
  • 微信rpc服务器不可用怎么办,Win7提示rpc服务器不可用怎么办 提示rpc服务器不可用解决办法…

    微信rpc服务器不可用怎么办,Win7提示rpc服务器不可用怎么办 提示rpc服务器不可用解决办法…电脑系统存在各种服务器 这些服务器都在同时为系统服务着 也许您遇到过这种故障 就是当你输入 netsh 命令中添加 ip 地址或添加打印机的时候 这个系统就会提示 rpc 服务器不可用 对于 Win7 系统用户来说 遇到这个问题算是比较常见的 但往往大部分用户遇到这个问题不知道如何解决 那么 Win7 提示 rpc 服务器不可用怎么办呢 下面小编为大家分享一种 Win7 系统提示 rpc 服务器不可用的解决办法 rpc 服务器不

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号