unity3d 网游源码

2018-03-16 15:16:05 MadBam_boo 阅读数 1152
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3d实战之Unity3d网络游戏实战篇(6):服务端框架的搭建

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍
以下为个人的学习简记,与诸君共论 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述,因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建
如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!

 整个服务端框架分为3层:
这里写图片描述
 底层:负责Client的监听、数据处理、协议构建、数据库操作等。
 中间层:对客观世界事物的抽象,实现类对象的各种方法;
 逻辑层:实现游戏逻辑,根据接收到的不同协议实现不同的逻辑。

 服务端框架的目录结构如下:
 这里写图片描述
 底层:
  ServNet:处理Server与各Client的连接以及数据接收;
  DataMgr:根据需求实现对数据库的各种操作;
  Protocol:编写协议实现Server与Client之间的有效通信;
 中间层:
  Player:对玩家的抽象,拥有玩家id、角色、下线等方法的实现;
  Conn:实现Server与Client之间的连接的管理,其作用与第四节描述的一致;
 逻辑层:
  HandleConnMsg:处理连接相关的事务,如心跳机制、用户登陆登出等;
  HandlePlayerMsg:处理玩家相关的事务,如位置同步、得分获取等;
  HandlePlayerEvent:处理玩家事件,某个时间发生时要处理的事情,如玩家登陆登出等;
  PlayerData:指定需要保存到数据库的角色属性,如金币、等级、胜负数等;
  PlayerTempData:指定玩家角色的临时属性,如是否在房间内、是否在战斗中、是否已准备等;

2019-04-13 19:49:52 weixin_34148340 阅读数 84
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D ×××游戏完整源码 GI Racing 2
http://www.idoubi.net/unity3d/complete-project/3570.html
Unity3D 街机几何跳跃 完整游戏源码 Geometry Jump
http://www.idoubi.net/unity3d/complete-project/3561.html
Unity3D Q版糖果消消乐 完整源码 Candy Match 3 Kit v1.1.0
http://www.idoubi.net/unity3d/complete-project/2057.html
Unity3D 2D 街机投篮游戏 完整源码 2D Basketball Game
http://www.idoubi.net/unity3d/complete-project/3559.html
Unity3D 3d越野车游戏模板 Off-Road Truck Template 2
http://www.idoubi.net/unity3d/complete-project/558.html
Unity3D 回合制游戏 完整源码 Turnbase RPG Template v1.06b
http://www.idoubi.net/unity3d/complete-project/2600.html
Unity3D 2D游戏制作套件 Super Platformer 2D v1.2.8
http://www.idoubi.net/unity3d/complete-project/3156.html
Unity3D 玩具车总动员 完整源码 Toy Car Simulator
http://www.idoubi.net/unity3d/complete-project/3158.html
Unity3D MOBA游戏 完整源码 uMOBAv 1.34
http://www.idoubi.net/unity3d/complete-project/2809.html
Unity3D 通用格斗游戏 完整源码Universal Fighting Engine (Basic) v1.8.1
http://www.idoubi.net/unity3d/complete-project/2513.html
Unreal 战争迷雾效果资源包 Fog of War
http://www.idoubi.net/unreal/blueprints/2899.html
Unity3D 格斗游戏 忍者无敌 Real Smart Ninja
http://www.idoubi.net/unity3d/complete-project/2532.html
Unity3D 像素风格塔防游戏 完整源码 Tower Defense Basic Pixel Art Pack v2.0
http://www.idoubi.net/unity3d/complete-project/2492.html
Unity3D 3d卡丁车×××游戏源码 Speed For Beat.
http://www.idoubi.net/unity3d/complete-project/564.html
Unity3D 体育休闲游戏 乒乓王者 完整源码 Ping Pong Complete Game Tepmplate v1.1
http://www.idoubi.net/unity3d/complete-project/2490.html
Unity3D 休闲挑战游戏 勇敢的海盗 完整源码 The Pirates
http://www.idoubi.net/unity3d/complete-project/2446.html
Unity3D Arena战场求生 Arena Battle Starter Kitv1.0
http://www.idoubi.net/unity3d/complete-project/2159.html
Unity3D 冒险益智游戏 完整源码 Starship v1.0
http://www.idoubi.net/unity3d/complete-project/2350.html
Unity3D 射击游戏 轨道枪手 完整源码 On Rails Shooter System v1.20
http://www.idoubi.net/unity3d/complete-project/2120.html
Unity3D 多人射击高仿吃鸡游戏源码 MFPS 2.0 Multiplayer FPS
http://www.idoubi.net/unity3d/complete-project/242.html
Unity3D 高速飙车游戏 完整源码 Traffic Ride Templatev1.1
http://www.idoubi.net/unity3d/complete-project/2118.html
Unity3D 横版动作游戏 完整源码 Beat ‘Em Up – Game Template 3D
http://www.idoubi.net/unity3d/complete-project/2136.html

转载于:https://blog.51cto.com/14259258/2378337

2018-11-08 14:37:01 q764424567 阅读数 5252
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

一、前言

本文转自:GameRes游资网
原文作者:zhihudaye
原文链接:https://bbs.gameres.com/forum.php?mod=viewthread&tid=307874&extra=page%3D1%26filter%3Dsortid%26sortid%3D6

二、服务器源码

https://github.com/kbengine/kbengine

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、游戏源码

https://github.com/kbengine/kbengine_unity3d_warring
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开发

2018-03-14 15:40:43 MadBam_boo 阅读数 1361
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3d实战之Unity3d网络游戏实战篇(2):代码资源分离的界面系统

  • 阅读文章前请细读以下几点:
  • 学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版。
  • 本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍 以下为个人的学习简记,与诸君共论。
  • 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述(其实是我懒..),因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建。
  • 如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!

代码资源分离的界面系统
 刚刚入门U3D的时候,如果要写一个界面系统肯定会瞎写一通(抱歉我菜,基础功不扎实..),比如说,当需要在其他面板的逻辑中关闭另一个面板时,通常都是xxx.enable = false就ok了,或者在每一个面板的逻辑中都写了关闭面板的public方法供其他调用,当做的游戏渐渐大了起来之后发现有些地方很不好管理,而且代码也显得凌乱,每次写新面板的时候都要重新造轮子,看着心烦。这时就要找回基础(没错,基础功不扎实说的就是我…),复习一下类的继承、虚函数、泛型编程等。要记住,我们是面向对象…编程的!
 要构建一个通用的界面系统,首先要了解到代码与资源分离是游戏程序设计的核心思想之一,因为游戏公司里,美工和程序是两个人,如果代码和资源是黏在一起的话会有很多问题产生,而且不利于代码的重复使用。
 然后构思面板的生命周期(即面板对象被创建出来后到销毁的整个过程),书中对面板周期这样定义:
 Init -> OnShowing -> OnShowed -> Update -> OnClosing -> OnClosed
 
 Init:面板初始化阶段,用于处理一些参数;
 OnShowing:面板显示前调用OnShowing,可用于处理面板中的监听事件;
 OnShowed:面板显示后调用OnShowed,可在OnShowed前插播一个面板飞入动画;
 Update:每帧更新一些东东
 OnClosing:面板关闭前调用OnClosing;
 OnClosed:面板关闭后调用OnClosed,可在OnClosed前插播一个面板飞出动画
 
 插入一段面板基类的定义:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PanelBase : MonoBehaviour {

    #region Properties
    public string skinPath;             // skin's actual path = 'Assets/Resources/' + skinPath
    public GameObject skin;             // an instance based on skinPath.
    public PanelMgr.PanelLayer layer;   // current panel's layer(equal to which group the panel belong to.)
    public object[] args;               // panel's arguments.
    #endregion

    #region Operation Cycle
    /*
     *  Panel's basic life-time:
     *      Init -> OnShowing -> OnShowed -> Update -> OnClosing -> OnClosed
     */
    /// <summary>
    /// Init the panel with args.
    /// </summary>
    /// <param name="args">panel initia arguments.</param>
    public virtual void Init(params object[] args)
    {
        this.args = args;
    }
    /// <summary>
    /// Do something before show the panel.
    /// </summary>
    public virtual void OnShowing() { }

    /// <summary>
    /// Do something after show the panel.
    /// </summary>
    public virtual void OnShowed() { }

    /// <summary>
    /// Update info each frame during the panel is opening.
    /// </summary>
    public virtual void Update() { }

    /// <summary>
    /// Do something before close the panel.
    /// </summary>
    public virtual void OnClosing() { }

    /// <summary>
    /// Do something after close the panel.
    /// </summary>
    public virtual void OnClosed() { }
    #endregion

    #region Operation
    /// <summary>
    /// Close the panel by calling PanelMgr.ClosePanel function.
    /// </summary>
    protected virtual void Close()
    {
        string name = this.GetType ().ToString ();
        PanelMgr.instance.ClosePanel (name);
    }
    #endregion
}

 往后创建的任何面板都继承自PanelBase并根据需要对生命周期内的方法进行重载。
 例如:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LoginPanel : PanelBase {

    private InputField idInput;
    private InputField pwInput;
    private Button loginBtn;
    private Button regBtn;
    private Button exitBtn;

    #region Operation-Cycle
    public override void Init (params object[] args)
    {
        base.Init (args);
        skinPath = "LoginPanel";
        layer = PanelMgr.PanelLayer.Panel;
    }

    public override void OnShowing ()
    {
        base.OnShowing ();
        Transform skinTrans = skin.transform;
        idInput = skinTrans.Find ("idInput").GetComponent<InputField> ();
        pwInput = skinTrans.Find ("pwInput").GetComponent<InputField> ();
        loginBtn = skinTrans.Find ("loginBtn").GetComponent<Button> ();
        regBtn = skinTrans.Find ("regBtn").GetComponent<Button> ();
        exitBtn = skinTrans.Find ("exitBtn").GetComponent<Button> ();

        loginBtn.onClick.AddListener (OnLoginButtonClick);
        regBtn.onClick.AddListener (OnRegisterButtonClick);
        exitBtn.onClick.AddListener (OnExitButtonClick);
    }
    #endregion

    #region OnButtonClickEvent
    void OnLoginButtonClick()
    {
        // write you logic
    }
    void OnRegisterButtonClick()
    {
        PanelMgr.instance.OpenPanel<RegisterPanel> ("");
        Close ();
    }

    void OnExitButtonClick()
    {
        Application.Quit ();
    }
    #endregion


}

想必细心的同学都发现了PanelMgr这一个类,PanelMgr使用了单例模式(即整个Scene中只能有一个PanelMgr实例),用于管理当前场景中的各个面板,其中使用泛型编程实现了对面板的打开方法以及关闭方法,并在打开面板方法中调用了面板的Init->OnShowed周期。
具体代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PanelMgr : MonoBehaviour {

    #region Properties
    public enum PanelLayer                                  // panel layer list.
    {
        Panel,
        Tips,
    }

    public static PanelMgr instance;                        // PanelMgr's single instance.

    public Dictionary<string, PanelBase> dict;              // key:paneltype value:panel instance.

    private GameObject canvas;                              // current panel's canvas.
    private Dictionary<PanelLayer, Transform> layerDict;    // each layer's actual transfrom in scenes.
    #endregion

    #region Operation Cycle
    void Awake()
    {
        instance = this;
        InitLayer ();
        dict = new Dictionary<string, PanelBase> ();
    }
    #endregion

    #region Help Function
    /// <summary>
    /// Initialize layerDict.
    /// </summary>
    void InitLayer()
    {
        canvas = GameObject.Find ("Canvas");
        if (canvas == null) {
            Debug.LogError ("[PanelMgr.InitLayer] GameObject canvas is not exist.");
        }

        layerDict = new Dictionary<PanelLayer, Transform> ();
        foreach (PanelLayer pl in Enum.GetValues(typeof(PanelLayer))) {
            string name = pl.ToString ();
            Transform transform = canvas.transform.Find (name);
            layerDict.Add (pl, transform);
        }
    }
    #endregion

    #region Operation Function
    /// <summary>
    /// Open a panel which type is skinPath. At the same time, current scene's canvas will add a same type script.
    /// </summary>
    /// <param name="skinPath">Skin path.</param>
    /// <param name="args">Arguments.</param>
    /// <typeparam name="T">Type T must inherit PanelBase</typeparam>
    public void OpenPanel<T> (string skinPath, params object[] args)
        where T : PanelBase
    {
        string name = typeof(T).ToString ();
        if (dict.ContainsKey (name))
            return;

        PanelBase panel = canvas.AddComponent<T> ();
        panel.Init (args);
        dict.Add (name, panel);

        skinPath = (skinPath != "" ? skinPath : panel.skinPath);
        GameObject skin = Resources.Load<GameObject> (skinPath);
        if (skin == null) {
            Debug.LogError ("[PanelMgr.OpenPanel] Can't find " + skinPath + " under Assets/Resources/");
        }
        PanelLayer layer = panel.layer;
        Transform parent = layerDict [layer];
        panel.skin = (GameObject)Instantiate (skin, parent);

        panel.OnShowing ();

        panel.OnShowed ();
    }

    /// <summary>
    /// Close a panel which type is name.
    /// </summary>
    /// <param name="name">Panel Instance's name</param>
    public void ClosePanel(string name)
    {
        PanelBase panel = (PanelBase)dict [name];
        if (panel == null)
            return;

        panel.OnClosing ();
        dict.Remove (name);
        panel.OnClosed ();
        GameObject.Destroy (panel.skin);
        Component.Destroy (panel);
    }
    #endregion
}

 Scene中的Canvas下有两个空物体分别为Panel和Tips,两者的作用仅在于分组。
 PanelLayer的意义在于对Scene中的所有面板进行一个分组,面板为Panel组,提示为Tips组。
 美工通过把制作好的面板拖到Asset/Resources中,程序便可以通过代码实例化对应的面板,以此实现了代码与资源的分离。(你说不清楚Resources的作用?传送门了解一下)

2019-06-15 12:22:43 xiumang 阅读数 1035
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D 飞机生死大战 完整源码 Jet Fighter Zero Life
http://www.idoubi.net/unity3d/complete-project/5678.html
Unity3D益智休闲游戏 秀才找字 完整源码 Word Search template v1.6
http://www.idoubi.net/unity3d/complete-project/5670.html
Unity3D 休闲益智游戏 另类贪吃蛇 Snake VS Block Template v1.4.0
http://www.idoubi.net/unity3d/complete-project/5665.html
Unity3D 射击生存游戏 狙击丧尸 完整源码 Zombie Shooting
http://www.idoubi.net/unity3d/complete-project/5653.html
Unity3D 恐怖逃生游戏 丧尸丛林 完整源码 Walking Dead In Jungle
http://www.idoubi.net/unity3d/complete-project/5649.html
Unity3D 休闲游戏 弹力兔 完整源码 Bouncing Rabbit
http://www.idoubi.net/unity3d/complete-project/5648.html
Unity3D 赛车游戏 完整源码 Racing Game Template v1.054
http://www.idoubi.net/unity3d/complete-project/5626.html
Unity3D 休闲游戏 命运转盘 Stop The Wheel
http://www.idoubi.net/unity3d/complete-project/5610.html
Unity3D 僵尸射击游戏源码 Zombie Shooter 2D
http://www.idoubi.net/unity3d/complete-project/306.html
Unity3D 益智休闲游戏 不可思议的小圈圈 完整源码Impossible Circle – Round The Ball v1.0.4
http://www.idoubi.net/unity3d/complete-project/5587.html
Unity3D 3d卡丁车赛车游戏源码 Speed For Beat.
http://www.idoubi.net/unity3d/complete-project/564.html
Unity3D 头脑爆裂 益智游戏 完整源码 Math Game – Brain Workout v1.1.2a
http://www.idoubi.net/unity3d/complete-project/5586.html
Unity3D 闲置点击 休闲游戏 完整源码 Clicker-Idle Game Template v2.62
http://www.idoubi.net/unity3d/complete-project/5582.html
Unity3D 不同风格的oooO贪吃蛇 完整源码 Modern Snake oooO – Complete Game Template
http://www.idoubi.net/unity3d/complete-project/5562.html
Unity3D 太空战机 完整源码 Neon Space Fighter – shooting asteroids and spaceships v1.01
http://www.idoubi.net/unity3d/complete-project/5560.html
Unity3D RTS即时战略游戏引擎 完整源码 Unity RTS Engine v1.4.0
http://www.idoubi.net/unity3d/complete-project/5558.html
Unity3D 休闲跑酷游戏 方块人神庙逃亡 完整源码 Temple Escape v1.2.0
http://www.idoubi.net/unity3d/complete-project/5555.html
Unity3D 多人射击高仿吃鸡游戏源码 MFPS 2.0 Multiplayer FPS
http://www.idoubi.net/unity3d/complete-project/242.html
Unity3D 像素风格45度俯视角射击游戏 完整源码 Pixel TopDown Shooter Engine v1.0
http://www.idoubi.net/unity3d/complete-project/5553.html
Unity3D 经营策略游戏 城主攻略 完整源码 City Builder Starter Kit v2.0.0
http://www.idoubi.net/unity3d/complete-project/3787.html

Unity_游戏源码

阅读数 34676