常常在想,有没有好的方式,让开发变得简单,让团队合作更加容易。

于是,某一天 动手写一个 架构, 目前版本 暂定 0.1 版本。(unity5.0.0f4 版本以上)

我打算 开源出来

0.1有什么功能?

首先类结构图

前台包括:事件类,视图逻辑类,单例数据类

后台包括:私聊,公聊,人机通信

如何二次开发?

参考view 文件夹。

举例

FamilyView.cs

FamilyCommand.cs

using UnityEngine;
using System.Collections;
using System;
using System.ComponentModel;
using WebSocket4Net;
using LitJson;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Text.RegularExpressions;
/// <summary>
/// 主界面
/// </summary>
public class FamilyView : FamilyCommand
{
public Queue<JsonData> JsonList;
public Transform Button; //绑定一个按钮,推荐(单层界面中使用)
public Transform Button1; //绑定一个按钮,推荐(单层界面中使用)* 注意如果是列表,那么必须每个item一个view类
public Transform Button2; //绑定一个按钮,推荐(单层界面中使用)* 注意如果是列表,那么必须每个item一个view类 void Start()
{
JsonList = GameModel.getInstance().JsonList;
addlistener();//添加视图层监听
addListenerSocket();//添加服务器监听 FamilyView.Get(Button.gameObject).onClick = ButtonClick;
FamilyView.Get(Button1.gameObject).onClick = Button1Click;
FamilyView.Get(Button2.gameObject).onClick = Button2Click; } //弹出 换装系统
private void Button2Click(GameObject obj)
{
SendWeapon(this);
} //ugui 事件测试 按钮点击
private void ButtonClick(GameObject obj)
{
//Despawner(gameObject, 0.1f);//删除战斗界面 可以自动删除监听
SendEvent(this);
}
//ugui 事件测试 按钮点击
private void Button1Click(GameObject obj)
{
SendSocketEvent(this);
} // Update is called once per frame
void Update()
{
//通过队列,获得服务器数据
if (JsonList.Count > )
{
JsonData mes = JsonList.Dequeue();
SplitDisposal(mes);//拿到数据,处理 ,并删除队列
}
} //登录返回的数据
public override void user_login_return(JsonData jsontext)
{
//如果需要 特殊处理 ,比如脏话 变星号
base.user_login_return(jsontext); print(jsontext.ToJson());
JsonList.Enqueue(jsontext);// 加入队列
} //回调服务器事件 聊天信息(测试)
public override void user_chat_return(JsonData jsontext)
{
//如果需要 特殊处理 ,比如脏话 变星号
base.user_chat_return(jsontext);
print(jsontext["username"] + "== 异步得到服务器数据,但unity只能同步赋值===" + jsontext["for"]);
JsonList.Enqueue(jsontext);// 加入队列
} //回调视图 事件
public override void ActionHandle(JsonData jsontext)
{
print("委托事件得来的数据:" + jsontext["Agreement"] + "" + jsontext["username"] + "" + jsontext["message"]);
} void OnDestroy()
{
removelistener();//删除视图监听
removeListenerSocket();//删除服务器监听
}
}
using UnityEngine;
using System.Collections;
using System;
using System.ComponentModel;
using WebSocket4Net;
using LitJson;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Text.RegularExpressions; public class FamilyCommand : SocketEvent
{ //中英文 字符识别
public void Character_processing(string str)
{
Regex regChina = new Regex("^[^\x00-\xFF]");
if (regChina.IsMatch(str))
{
print("中文");
}
else
{
print("其他");
}
} //服务端返回后,数据赋值这里处理
public void SplitDisposal(JsonData jsontext)
{
String Agreementstr = jsontext["Agreement"].ToString();
switch (Agreementstr)
{
case Agreement.user_chat_return: print(jsontext["username"] + "--服务器数据 同步---------" + jsontext["for"]);
break;
case Agreement.user_login_return://登录
//角色基础值
OnNameperson(jsontext);
//头盔
OnHelmet(jsontext);
//护肩
OnPauldron(jsontext);
break;
default: break;
}
}
//角色基础值
public void OnNameperson(JsonData jsontext)
{
Dictionary<string, GamePerson> GamePersonDictionary = GameModel.getInstance().GamePersonDictionary;
for (int i = ; i < ; i++)
{
string nameperson = "person" + i;
string PersonId = jsontext[nameperson]["PersonId"].ToString(); GamePerson gamePerson = new GamePerson();
gamePerson.Attack = jsontext[nameperson]["Attack"].ToString();
gamePerson.Defense = jsontext[nameperson]["Defense"].ToString();
gamePerson.Distance = jsontext[nameperson]["Distance"].ToString();
gamePerson.Life = jsontext[nameperson]["Life"].ToString();
gamePerson.Anger = jsontext[nameperson]["Anger"].ToString();
gamePerson.HelmetId = jsontext[nameperson]["HelmetId"].ToString();
gamePerson.PauldronId = jsontext[nameperson]["PauldronId"].ToString(); GamePersonDictionary.Add(PersonId, gamePerson);
}
GameModel.getInstance().userplay.Gold = jsontext["Gold"].ToString();
GameModel.getInstance().userplay.Diamonds = jsontext["Diamonds"].ToString(); } //护肩
public void OnPauldron(JsonData jsontext)
{
for (int i = ; i < ; i++)
{
string Pauldron = "Pauldron" + i.ToString(); // print(jsontext[Pauldron]["PauldronId"]); //护肩id
// print(jsontext[Pauldron]["Attack"] + " " + jsontext[Pauldron]["Defense"] + "" + jsontext[Pauldron]["Distance"]);
string MagicGemType = "MagicGemType" + i.ToString();
for (int j = ; j < ; j++)
{
// print(jsontext[Pauldron][MagicGemType]);//魔法宝石
}
}
}
//头盔
public void OnHelmet(JsonData jsontext)
{
Dictionary<string, WeaponHelmet> WeaponHelmetDictionary = GameModel.getInstance().WeaponHelmetDictionary;
//头盔
for (int i = ; i < ; i++)
{
string Helmet = "Helmet" + i.ToString();
string HelmetId = jsontext[Helmet]["HelmetId"].ToString();//头盔id
string MagicGemType = "MagicGemType" + i.ToString(); WeaponHelmet weaponHelmet = new WeaponHelmet();
weaponHelmet.Attack = jsontext[Helmet]["Attack"].ToString();
weaponHelmet.Defense = jsontext[Helmet]["Defense"].ToString();
weaponHelmet.Distance = jsontext[Helmet]["Distance"].ToString(); for (int j = ; j < ; j++)
{
weaponHelmet.MagicGemType1 = jsontext[Helmet][MagicGemType].ToString();
} WeaponHelmetDictionary.Add(HelmetId, weaponHelmet);
}
} //弹出换装系统
public void SendWeapon(FamilyView familyView)
{
Spawner("CanvasWeaponScene"); } //(测试)某个unity 事件类
public void SendEvent(FamilyView familyView)
{
//用过 familyView 获得组件上的 数据, 赋给 JsonData
if (OnDelegateEvent().callbackEvent != null)
{
//实例化自定义类和 协议
JsonData message = new JsonData();
message["Agreement"] = "weewewwe"; //这里的值 可以通过actionView 获得,也可以通过GameModel得到
message["username"] = "";
message["message"] = "哈哈哈";
OnDelegateEvent().callbackEvent(Protocol.Action, message);
}
}
private WebSocket ws;
public void SendSocketEvent(FamilyView familyView)
{
ws = GameModel.getInstance().socketModel.websocket;
JsonData message = new JsonData();
message["Agreement"] = Agreement.user_public_chat_return;
message["username"] = GameModel.getInstance().userplay.play_name;
ws.Send(message.ToJson());//这个是发到消息端
}
}

前后台 事件和unity内部事件,都是通过协议来 分配的。

内部事件:DelegateSubEvent类中 分配

socket事件 :SocketEvent 类中分配

下一个版本,加入动画事件,以及四叉树 范围监测处理(假设渲染不限制,可以让几千人 智能对战)。

gameUnity 网络游戏框架的更多相关文章

  1. gameUnity 0.2 网络游戏框架(计划)

    能说的就是 请大家都耐心等待,不做国产垃圾,只追求国外经典,这就是 这套框架未来的发展 一:2d 3d场景融合  人物移动 2d 3d 层 移动 有差值(共6层,2d天空层.前景3d物体层有 景深), ...

  2. gameUnity 0.15 beta 网络游戏框架

    增加了 换人 和换衣服 ,加入了动画事件.beta版本 0.15测试版本 目前就到此,正式版本 会在7月底  和 0.2版本一起推出.届时,换装系统 将不仅仅是 换装备,而是有 换装后 打怪的体验,更 ...

  3. gameUnity 0.15alpha 网络游戏框架

    在重要版本 0.2之前,先 出一个 0.15alpha 版本热热身. 0.15主要是添加了 动画事件 和一些 动画特效的类,比如快进,慢进,(类似被冰冻效果),但这些都不在这个  alpha版本中出现 ...

  4. GameUnity 2.0 发布倒计时

    万众期待的 gameunity 网络游戏框架 已经完成了,现在在最后的检验调试阶段. 因为版本 改动非常之大,所以 版本号 从0.2版本 改成 2.0版本. gameunity事件部分,一如既往保持高 ...

  5. 基于C/S架构的3D对战网络游戏C++框架 _【不定期更新通知】

    由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _01服务器端与客户端需求分析

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. 基于C/S架构的3D对战网络游戏C++框架 _06搭建C/S架构的基本通信框架(尚未写完会重新编辑后再发出)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  8. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  9. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

随机推荐

  1. DIV层漂浮居中

    <style type="text/css" title="currentStyle" media="screen" mce_bogu ...

  2. 3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。

    package zuoye; import java.io.FileInputStream; import java.io.FileOutputStream; public class BinIoDe ...

  3. 2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  4. 基于Centos6.6的R720服务器四网口端口聚合的实践

    服务器多网口端口聚合,其目的主要在于网卡容灾和提升带宽.linux端口绑定,提供7种模式,如下: 关于mode共有0-6等7种模式,详细请参考官方手册!mode的值表示工作模式,他共有0,1,2,3, ...

  5. android常用工具类

    import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ...

  6. HDU 4381 Grid

    背包变形. 将操作分为了两类,可以分开处理. 可以dp处理出L[i]:L[i]=-1代表从左到右 i 长度不能被拼凑出来,L[i]!=-1表示从左到右 i 长度能被拼凑出,并且最小费用为L[i]. 反 ...

  7. linux 备份 文件+sql

    sql 1 2 3 rm -f /bak/bak.sql mysqldump --databases nl -uroot -p413121 > /bak/bak.sql curl http:// ...

  8. Nginx 和 IIS 实现动静分离【转载】

    前段时间,搞Nginx+IIS的负载均衡,想了解的朋友,可以看这篇文章:<nginx 和 IIS 实现负载均衡>,然后也就顺便研究了Nginx + IIS 实现动静分离.所以,一起总结出来 ...

  9. listview解决滑动条目的时候背景变为黑色的问题

    方式一:java代码: listView.setCacheColorHint(0); 方式二:布局文件 <ListView android:id="@+id/listView1&quo ...

  10. linux git升级到1.8.3

    1. Download PUIAS repo: wget -O /etc/yum.repos.d/PUIAS_6_computational.repo https://gitlab.com/gitla ...