【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》
推薦閱讀
- CSDN主頁
 - GitHub開源地址
 - Unity3D插件分享
 - 簡書地址
 - 我的個人博客
 - QQ群:1040082875
 
一、介紹
今天給大家介紹一款簡單而又強大的多人沙盒游戲開發插件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模式運行
 - 登錄面板
 - 以主機/玩家/特殊身份開始游戲
 - 網絡時間同步
 - 平臺獨立
 - 沒有矛盾和競爭對手
 
總結
以上是生活随笔為你收集整理的【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 网络层核心:路由和路由生成算法
 - 下一篇: win服务器文件夹权限设置密码,win服