Skip to main content
 首页 » 资源教程

基于Unity的多层级-多人游戏模型

2017年03月03日 12:01:499310蛮牛网

本文将描述通过Unity创建一个多层级-多人游戏模型3D应用程序的经历。这里并不称之为“游戏”,因为这里并不需要射击,破坏,赚钱,或其他游戏性的东西。

那么该应用程序在做什么呢:在3D环境的街道/建筑中你可以直接与其他用户交流,或在他们的家里留个口信。这很简单,但在未来我希望启用声音和家庭定制以及不同类型的建筑,例如:学校/公司/组织/会议建筑。

基于Unity的多层级-多人游戏模型 资源教程 第1张基于Unity的多层级-多人游戏模型 资源教程 第2张

你可以在这个网址上尝试下: http://www.meeworld.net

开发思路

Unity是一个伟大的工具,你能直接在3D场景中添加工作对象和操作地形。每个对象可以添加不同的组件,这都是已经在Unity中存在的,当然你也可以自己实现。Unity有资源商店,你可以找到很多3D对象/脚本。调试部分也非常有趣,当运行应用程序切换到场景视图时可以直接在游戏中修改你想要看到的结果。

我考虑Unity的原因是我使用.NET 6年了,因此我已经习惯它了。Unity也可以使用JavaScript,但对我来说使用C#更容易点。

网络体系

有很多关于Unity网络的文章,我不想深入探讨,大体上说就是有一个MasterServer来处理应用程序之间的通信。其中一个应用程序可以是服务器,它可以处理服务器操作,同时所有客户端通过服务器RPC(远程过程调用)发送信息。

基于Unity的多层级-多人游戏模型

目前程序有不同的街道,街道内有不同的建筑物。用户可以去其他用户的街道,所以必须发送用户所在街道的位置。好了,那么怎么做呢?Unity有NetworkView.group属和SetLevelPrefix()方法,但那对于多层级-多人游戏模型应用程序没什么帮助。这是最难的部分,因为在Unity中找不到任何方法可以满足要求。当然,你可以找到一些第三方的插件。

基于Unity的多层级-多人游戏模型 资源教程 第3张


Unity的NetworkView组件可以同步一个被观察的组件。如果你有一个能容纳所有用户的场景那么这个组件是可以使用的。但是如果一个用户可以进入的不同场景,同步观测组件NetworkView并不是一个好的选择,因为NetworkView会将信息发送给所有场景。所以,首先要做的是禁用NetworkView同步机制,只有相同层级的玩家才能发送位置。服务器应该知道每个玩家的位置。所以客户端的调用是这样的:

客户端(发送状态给服务端):

基于Unity的多层级-多人游戏模型 资源教程 第4张


服务端(根据相同的层级对玩家进行过滤并更新状态):

基于Unity的多层级-多人游戏模型 资源教程 第5张


其他客户端:

基于Unity的多层级-多人游戏模型 资源教程 第6张


一些技巧如何通过RPC调用发送自定义对象Unity不允许根据文件在RPC上进行发送,只有int / string / float / NetworkPlayer / NetworkViewID / Vector /Quaternation才行。发送不同类型的对象必须将对象序列化和反序列化。首先使用字符串,但字符串超过4096字符会出现问题,我发现Unity也接受字节数组,所以使用这个特性。

例如发送一个通过RPC调用的包含不同属性(日期、用户标识信息、类型. .等等)的UserMessage对象,这是不可能的,因为对象不被接受,所以将对象进行如下序列号:

基于Unity的多层级-多人游戏模型 资源教程 第7张


通过rpc调用进行发送:

基于Unity的多层级-多人游戏模型 资源教程 第8张


在客户端进行反序列化操作:

基于Unity的多层级-多人游戏模型 资源教程 第9张


如何将自定义对象附加到游戏对象

(这不是来源于MonoBehaviour):

我添加一个空对象到游戏对象,它有一个TextMesh,所以在文本属性上我将一个对象作为字符串进行序列化,需要时进行反序列化来使用它。

自由的3D对象

对于这个应用程序,我需要一些3D对象,但我并不是一个3D建模师,所以我需要一些对象放置到应用程序中。Sketchup是一个很好的工具,你能创建或找到很多免费的3D模型。同样在Unity Asset有很多免费的资源。

总结

用Unity工作非常不错,能将3D游戏应用做得如何对我来说是一个新的体验。Unity的另一个伟大之处是用程序可以在以下平台进行编译:Windows / Linux/ / BlackBerry / iOS / Windows Phone 8 / unity / XBOX/ Wii。

阅读延展
评论列表暂无评论
发表评论