Scut游戏服务器引擎之Unity3d接入
Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接; 先看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代码
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代码
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代码
/// <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代码
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游戏服务器引擎之Unity3d接入的更多相关文章
- Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...
- Scut游戏服务器引擎6.0.5.0发布-支持C#脚本
1. 增加C#脚本支持2. 增加Pay和Sns中间件对Mysql数据库支持3. 精简布署步骤,取消Redis写入程序,将其移到游戏底层运行4. 修正Mysql对中文可能会出现乱码的BUG 点击下载:S ...
- Scut游戏服务器引擎之新手入门
1. 开发语言:Scut提供C#或Python两种脚本语言开发,Python脚本的性能会比较差,建议使用编译执行的C#代码: 2. 运行平台:Scut可以Window与Linux平台上运行,Linux ...
- Scut游戏服务器引擎6.5.8.6发布
1.增加从Redis中加载数据到Cache可设置筛选条件2.修改在Web项目中的不能支持自定协议问题3.修改Share类型的Model在Redis中为空时会尝试从DB中加载数据4.修改Model命名空 ...
- Scut游戏服务器引擎6.0.5.2发布
1. 增加C#脚本中能引用多个C#脚本文件的支持2. 修正Web应用程序中使用C#脚本解析不到Bin目录的问题
- Scut游戏服务器引擎6.0.5.1发布
1. 修正缓存删除时不会更新到Redis的问题 2. 修正Model组合3个以上子类时Change事件未绑定的问题 3. 修正中间层MySql与MsSql数据库Sql语句分页问题
- Scut游戏服务器引擎5.6.3.5发布
版本:5.6.3.5 (2013-11-25) 1. 优化实体ChangeKey队列,减少写库IO(默认为5分钟写入一次数据库) 2. 优化Protobuf序列化启用自动GZip压缩,减少Redis内 ...
- Scut游戏服务器免费开源框架-3
Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1 开发环境 需要安装的软件 a) 消息队列 b) 数据库,Sql2005以上版本 ...
- Scut游戏server引擎Unity3d访问
Scut提供Unity3d Sdk包.便利的高速发展和Scut游戏server对接: 看Unity3d示为以下的比率: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Asse ...
随机推荐
- python - 接口自动化测试 - TestRegister - 注册接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_register.py @ide: PyChar ...
- c语言入门-02-第一个c程序开始
我们来开我们第一个c代码 #include<stdio.h> int main(){ // print num int num; num = 1; printf("%d\n&qu ...
- 实战项目——获取图片中的GPS位置信息和拍摄时间
今天突然看到有人写过获取图片中位置信息的程序.我觉得很有趣,也就自己实践了一下,研究了一下 话不多说,先上代码 #!/usr/bin/env python3 # -*- coding: utf-8 - ...
- 初识面向对象-python
Python 面向对象 一.概念的区分: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好 ...
- 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】
上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...
- Android数据储存之SharedPreferences
Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...
- BZOJ3999 [TJOI2015]旅游 【树剖 + 线段树】
题目 为了提高智商,ZJY准备去往一个新世界去旅游.这个世界的城市布局像一棵树.每两座城市之间只有一条路径可 以互达.每座城市都有一种宝石,有一定的价格.ZJY为了赚取最高利益,她会选择从A城市买入再 ...
- canvas小图123
1 绘制扇形图 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- 【CF1016D】Vasya And The Matrix(构造)
题意: 思路:构造方式见代码…… #include<cstdio> #include<cstring> #include<iostream> #include< ...
- FusionCharts参数说明补充
原文发布时间为:2010-09-14 -- 来源于本人的百度文章 [由搬家工具导入] 功能特性animation 是否动画显示数据,默认为1(True)showN ...