最近想开发一款多人在线网络游戏,使用unity3d的mirror插件可以提高开发效率,并且该插件免费。

但是由于使用插件开发效率太低,经过研究,ummorpg开发模板是居于该插件开发而来,使用它可以提高开发的效率,对于初学者来说比较友好,能够基于模板的修改快速做出属于自己的游戏,进一步激发初学者开发游戏的兴趣,兴趣才是最好的导师。

很多小白想开发游戏但更多的中途放弃,我认为游戏开发这个行业一是由于门槛较高,二是由于这个行业比较考验一个人的综合能力,做为一名初学者,没有资金,没有人脉,无法招聘、无法吸引志同道合、愿意不图回报的人员来一起做是非常少的,可以这么说:几乎没有。三是由于国外厂商的不断内卷,不缺各类3A大作,不管是在3D画面的精美上还是性能的优化上都已经做到行业顶尖,尽管玩法各式各样,也有一些小缺陷,但从技术上来说已经做到了无可挑剔的地步。

玩家的审美标准也随着各类出众的游戏技术标准而不断提升,中国的游戏开发者不缺游戏故事背景,中国是一个拥有上千年历史文明的国家,古代文人骚客的思想对后人的影响也是源远流长,有着取之不尽用之不竭的叙事思想。但要把这些传统文化很好的融入到历史背景当中却是不容易的。

一是技术,二是资本。

站在目前的技术上来说,已经不是什么大问题。

就资本而言,我觉得目前的游戏开发环境是劣币驱逐良币。

资本家投入资本来打造一款游戏,由于开发周期长和市场的不确定性因素太多,回报周期长导致大多数资本对游戏开不感兴趣。

也许,会有一些大的资本愿意,但是大资本有不会投入太多,他们投资的金额对我们来说已经非常大,但对他们来说就给你扔点零花钱这么简单。也不怕你破产或跑路。

能不能从技术上来解决资本的问题?答案是能。

随着技术发展,游戏开发的门槛也越来越低,各类插件和资源市场的建立,就是为了解决开发周期这一大问题的。

成就一番大事均是从小事开始,从做好今天开始,不积跬步无以至千里,万事有始有终,贵在坚持不懈。

我们开始使用ummorpg创建一个网络游戏,编译客户端和服务端并让他运行起来。

最终运行效果:

一、导入包

将uMMORPG Remastered - MMORPG Engine 2.37包拖到你的3D空项目中,找到场景,开始以demo场景进行修改,你所要做的就是修改场景,制作建筑、角色建模和动画等(这些在市场中均能购买到,愿意花钱不用请设计师了)。

二、制作自己的角色

导入角色到unity,角色至少包含贴图和动画吧

选中角色模型,修改animation type 为humanid,然后点击Apply。

在ummorpg项目目录下(路径:uMMORPG\Prefabs\Entities\players)找到两个玩家预制件,Archer是射手,Warrior是战士。

这里我们选中Archer,按Ctrl+D复制一份出来,并重命名。双击打开预制件,找到3d model,删除。

删除后,把我们准备好的角色3D模型拖拽上去,右键角色模型——》unpack解包,等下要往角色内添加元素。

选中根节点:

1、找到animator,给我们的角色指定好Avatar和Controller

2、找到player script脚本,这里需要一个碰撞体Collider

我们找到角色骨骼的root节点,选中并新建一个Capsule Collider,拖拽碰撞体直到调整到合适的位置。

2、在根节点中找到Combat脚本下的Collider,将刚刚制作好的碰撞体拖过来

3、新建武器挂载点

找到角色左手的根节点,新建一个空对象,并命名为WeaponMountPoint,将这个空对象调整好位置,拖拽给player skills脚本的Effect Mount。

4、添加角色到NetworkManager

选中NetworkManager并找到NetworkManagerMMO脚本,找到Registered spawnable prefab,点击下方+,新建一个,将刚刚做好的玩家预制件拖进来。

到这里

我们的角色已经制作好了。点击play进行测试:点击play&server,同时启动服务端和游戏客户端。

三、编译Linux服务端和windows64位客户端(官方为了代码复用,将服务器端和客户端融为一体了)

1、编译服务端前的准备工作

我们先来编译Linux服务器端。客户端和服务器端的工作原理是:用户登录,服务器端先创建玩家角色,再通知客户端创建,玩移动、砍杀、死亡等,客户端将帧同步到服务器端,服务器端向所有的玩家客户端进行帧同步。

提前准备好一台Linux云服务器或者你自己在局域网内架设好的Linux服务器(这里测试不一定非得用服务器,可以是一台普通电脑,安装好Linux系统,例如:centos、ubantu等)并未这台Linux系统配置一个固定的ip地址(如果不用固定ip,重启设备后将会得到新的ip地址,这时你要么重新编译,要么设置固定ip)

配置服务端ip:选中NetworkManager并找到NetworkManagerMMO脚本,找到server list,对ip和那么进行修改。

2、开始构建服务端:

点击file—》build seting,首先安装一下Linux客户端的编译环境,点击Android—》点击右侧install with unityhub

在弹出的界面找到linux dedicated server build sport,勾选点击安装。

安装后(可能要重启项目)点击file——》build seting,选中dedicated server,点击切换。

切换好后直接点击build按钮,选择一个保存位置。

3、Linux环境配置

使用ssh工具连接到你的服务器。由于ummorpg使用的数据库是sqlite,我们要在服务器上先安装sqlite的运行环境。后面会教大家如何将它改成mysql数据库。

到官方下载最新的sqlite for linux,使用xshell等工具将他上传到服务器。

tar xzf sqlite.tar.gz    ;#  解压
mkdir bld ;# 创建新文件夹
cd bld ;# 切换到新文件夹
../configure ;# 运行configure脚本
make ;# 运行makefile.
make install ;# 安装

  (如有需要,可以留言,我使用网盘分享)

如果上述步骤顺利,没有报错,说明你的sqlite已成功安装,如果报错,请检查你的GCC和G++是否安装。

官方推荐安装方法:

sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

  将你的游戏服务端使用tar压缩并上传到服务器,并进行解压,tar -zxvf swordgame.tar.gz

运行服务端:

例如:./SwordGame.x86_64

  在后台运行服务端:因为你的shell退出,那么服务端也会被关闭,后台运行是最好的解决方案:

nohup ./SwordGame.x86_64 &

  使用ps -A | grep SwordGame查看是否在运行

nohup会在运行目录下生成一个nohup文件用于存放服务端日志,使用cat nohup查看里面的内容。

到这里你的服务端已经成功的运行在服务器上了

下面我们开始编译客户端,然后把客户端发给你的小伙伴,大家一起测试,玩耍。

{持续更新中.......}

ummorpg中英对照翻译文档:https://files.cnblogs.com/files/Leekin/ummorpg%E4%B8%AD%E8%8B%B1%E5%AF%B9%E7%85%A7%E7%BF%BB%E8%AF%91.rar

unity3D mirror网络游戏开发笔记的更多相关文章

  1. [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出【转载自:酷小孩】

    原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...

  2. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  3. EasyUI 开发笔记(一)

    由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...

  4. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...

  5. Unity3D手游开发实践

    <腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...

  6. Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例

    引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...

  7. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

  8. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

  9. 轻松搭建Unity3D 安卓Android开发环境

    1,下载安装Java的JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html (JDK中,包含JRE) 如果是6 ...

  10. Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)

    一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...

随机推荐

  1. Java 进阶P-8.3+P-8.4

    捕捉到的异常 捉到了做什么? 拿到异常对象之后 String getMessage(); String toSTring(); void printStackTrace(); 但是肯定时回不去了,而具 ...

  2. VS保存后Unity不刷新

    目录 问题:Visual Studio写完代码保存好,Unity不会重新编译 三种解决方案 1.先选为默认.重启Unity.更改为想要的代码编写软件. 2.查看Auto Refresh是否开启 3. ...

  3. OpenMP For Construct dynamic 调度方式实现原理和源码分析

    OpenMP For Construct dynamic 调度方式实现原理和源码分析 前言 在本篇文章当中主要给大家介绍 OpenMp for construct 的实现原理,以及与他相关的动态库函数 ...

  4. Python 装饰器原理

    装饰器是 Python 编程中常用的一个功能,可以将通用的逻辑抽象成装饰器,通过装饰器语法应用到不同的目标上,达到增强或修改目标逻辑的目的. 先来看一个简单的例子 # 打印耗时的装饰器 def log ...

  5. Kubernetes(k8s)控制器(二):DaemonSet

    目录 一.系统环境 二.前言 三.DaemonSet 概览 四.创建DaemonSet 4.1 创建daemonset 让其在k8s集群所有worker节点运行pod 4.2 创建daemonset让 ...

  6. 对List集合进行分页

    1 简要说明 有时候,我们有一个list集合,需要对它进行分页处理 下面的根据类MyPageUtilVo就可以做到 它自带泛型,适合各种集合 可以设置每页的大小(默认为10) 根据页码(从1开始)就可 ...

  7. 上午小博(java小知识)

    使用super来引用父类的成分,使用this来引用当前对象 一个类从另一个类继承,new这个子类的实例的时候,使用super来引用父类对象,this是指当前对象的引用. 当new一个对象出来的时候,这 ...

  8. 你想知道的do{...}while(0)的作用,都在这里了

    0.引言         我们在嵌入式开发的过程中,经常可以碰到在一些宏定义或者是代码段中使用了do {...} while(0)的语句,从语义上理解,do {...} while(0)内的逻辑就只执 ...

  9. 置顶TOP

    HTML <a href="javascript:void(0)" class="go-top" @click="goTop"> ...

  10. computed与watch的区别

    1.computed表示的是计算属性,watch指的是监听属性,监听的值变化时执行回调函数 2.computed会使用缓存,而watch不使用缓存,每次监听都执行回调 3.computed需要retu ...