【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》

推荐阅读

一、介绍

今天给大家介绍一款简单而又强大的多人沙盒游戏开发插件VOXL。

VOXL是一款简单且易于理解的多重体素沙盒游戏,使用Unity的UNET网络系统开发。

由于服务器和客户端是一体的,所以我们不用再费心搭建服务器,会大大提高我们的开发效率。

VOXL目前只包含大约2500行干净、优雅和易于理解的源代码。

效果图:
在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
Demo体验地址:

https://noobtuts.com/_builds/unity-VOXL/
在这里插入图片描述

二、下载地址

官方下载地址(已经下架):
https://assetstore.unity.com/packages/templates/systems/voxl-multiplayer-voxel-sandbox-75829

CSDN下载:
https://download.csdn.net/download/q764424567/13116891

Github下载:
https://github.com/764424567/Unity-plugin/tree/master/Menu/Unity3D-VOXL

三、快速启动

(1)安装并打开Unity
(2)导入插件包,并打开World场景文件。

在这里插入图片描述

(3)在编辑器中按Play键,选择Server & Play开始游戏。
在这里插入图片描述

(4)你也可以运行另一个版本,输入一个不同的用户名,然后按Login查看多人游戏的运行情况
在这里插入图片描述
在这里插入图片描述

四、体系结构概述

VOXL是为用户修改而设计的。下面是代码和架构的快速概述:

  • NetworkManagerSandbox服务器管理,存在于层次结构中。它用于登录/加入游戏,启动/停止服务器。
  • UI ,Canvas包含所有UI元素,每个元素都有一个脚本,比如获取当地玩家的生命值、魔法值等状态。
  • WorldGenerator,世界生成器存在于场景中并生成游戏最初的世界。它对每个位置采样,根据柏林噪声函数运行结构生成像素世界因为是伪随机的,这意味着相同的种子会产生每次都是同样的地形。
  • 有几个像素预制体,玩家摧毁像素预制体会掉落材料,玩家可以从上面走过去收集
  • VoxelDrops立体像素是掉落在地上的小立方体,玩家可以收集小立方体收集,这将添加一个立方体个数到玩家的背包中。
  • 玩家会生成一个实例,用来保存属性如冷却时间、数量等。
  • ItemTemplate数据模板通常存储在数据库中。多亏了Unity 脚本组件功能,我们可以在检查器中编辑它们。可以在“Resources”文件夹中找到和修改模板。
  • 玩家(以及后来的怪物和npc)都会继承实体。实体拥有普通属性,如生命值、法力、伤害、防御。
  • 为了提高性能,会把世界几个部分并根据周围的玩家隐藏/显示它们。

如果感兴趣的话,可以看代码的实现过程,代码中有很多的注释,可以用来学习。

五、理解无限世界生成原理

以下是无限世界生成的工作原理:
(1)使用柏林噪声函数产生二维噪声,类似于旧电视上的静电噪声。
在这里插入图片描述
(2)使用二维柏林噪音函数循环生成三维地形,在给定范围内遍历每一个x、z坐标,然后将预制体填充到这个范围内的所有方块。我们只计算当前坐标内的所有位置,而不进行无限生成,因为玩家在不奔跑的时候就没有比较生成无限的世界。
在这里插入图片描述
(3)柏林噪声本身是相当枯燥的地形。我们将几个不同频率和振幅的柏林噪声函数相加,得到更有趣的结果。这也被称为八度音阶。
在这里插入图片描述
(4)然后我们根据给定位置的八度音节结果决定使用哪种体素类型,例如如果 小于0.5,我们可以用水填充它,小于0.7用泥土填充它,大于0.7用石头填充或者其他更大的东西。这被称为阈值设定。
在这里插入图片描述
(5)同时产生一个无限的世界是不可能的。WorldGenerator组件只生成有用的部分。
我们创建了一个像素预测函数,它可以通过使用八度音节来预测任何给定3D位置的像素类型。
这个函数不会加载任何东西到游戏世界中。
我们还创建了一个像素生成函数,为给定的3D位置生成预测的体素。这个函数确实将体素加载到世界中。
然后也不能一直调用而不受限制,这个办法就是生成一层包围的区域,WorldGenerator组件将玩家周围的区域分割成块,然后每个块的每个位置调用VoxelGenerate,也就是生成像素块
在这里插入图片描述
(6)树木和建筑物不能产生柏林噪声,我们在生成所有像素后手动将它们生成到每个块中。
注意:世界生成是伪随机的。换句话说:它看起来是随机的,但它总是基于种子。我们永远会因为一粒种子而得到完全相同的世界。这真的很整洁,因为我们可以通过保存种子来拯救整个世界,而且我们可以很容易地通过询问用户他们的世界种子来调试故障。
在这里插入图片描述

六、脚本文件分析

Chunk.cs
将世界分为几个大块,将所有包含像素,设置为活跃/不活跃(如果它们不在玩家的范围内)的区域。我们需要分成块来极大地提高性能。
Database.cs
保存XML文件中的字符数据和二进制文件中的世界数据。位置在"Database/Account/Character"文件。
DefaultVelocity.cs
设置开始时刚体的速度。
DestroyAfter.cs
在一段时间后销毁游戏片段。
DetectFocus.cs
将此脚本添加到摄像机(或类似的)以检测游戏窗口焦点。
Entity.cs
实体类是所有像玩家一样的东西的基类,比如NPC,怪物。

七、功能介绍

  • 完全基于Unity + UNET环境部署为基础
  • 客户端和服务器的脚本在一起
  • 无限大的世界
  • 通过Perlin生成噪声过程
  • 结构产生:树木等。
  • 100%模仿随机
  • 第一人称运动
  • 玩家的生命值、伤害、防守等。
  • Voxel放置和销毁
  • 手动加工制作模式
  • 动态加载
  • 通过局部遮挡高度优化
  • 通过协同线进行平稳的世界(UN)装载
  • 数据库保存玩家和世界数据
  • 使用Unity的新UI系统
  • 美丽的纹理
  • 英语、语音、信息聊天
  • 物品及物品掉落
  • 只有2600行精心制作的C#代码
  • 服务器可以在Linux上以Headless模式运行
  • 登录面板
  • 以主机/玩家/特殊身份开始游戏
  • 网络时间同步
  • 平台独立
  • 没有矛盾和竞争对手
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恬静的小魔龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值