【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》
推薦閱讀
- CSDN主頁
- GitHub開源地址
- Unity3D插件分享
- 簡書地址
- 我的個(gè)人博客
- QQ群:1040082875
一、介紹
今天給大家介紹一款簡單而又強(qiáng)大的多人沙盒游戲開發(fā)插件VOXL。
VOXL是一款簡單且易于理解的多重體素沙盒游戲,使用Unity的UNET網(wǎng)絡(luò)系統(tǒng)開發(fā)。
由于服務(wù)器和客戶端是一體的,所以我們不用再費(fèi)心搭建服務(wù)器,會(huì)大大提高我們的開發(fā)效率。
VOXL目前只包含大約2500行干凈、優(yōu)雅和易于理解的源代碼。
效果圖:
Demo體驗(yàn)地址:
https://noobtuts.com/_builds/unity-VOXL/
二、下載地址
官方下載地址(已經(jīng)下架):
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
三、快速啟動(dòng)
(1)安裝并打開Unity
(2)導(dǎo)入插件包,并打開World場(chǎng)景文件。
(3)在編輯器中按Play鍵,選擇Server & Play開始游戲。
(4)你也可以運(yùn)行另一個(gè)版本,輸入一個(gè)不同的用戶名,然后按Login查看多人游戲的運(yùn)行情況
四、體系結(jié)構(gòu)概述
VOXL是為用戶修改而設(shè)計(jì)的。下面是代碼和架構(gòu)的快速概述:
- NetworkManagerSandbox服務(wù)器管理,存在于層次結(jié)構(gòu)中。它用于登錄/加入游戲,啟動(dòng)/停止服務(wù)器。
- UI ,Canvas包含所有UI元素,每個(gè)元素都有一個(gè)腳本,比如獲取當(dāng)?shù)赝婕业纳怠⒛Хㄖ档葼顟B(tài)。
- WorldGenerator,世界生成器存在于場(chǎng)景中并生成游戲最初的世界。它對(duì)每個(gè)位置采樣,根據(jù)柏林噪聲函數(shù)運(yùn)行結(jié)構(gòu)生成像素世界因?yàn)槭莻坞S機(jī)的,這意味著相同的種子會(huì)產(chǎn)生每次都是同樣的地形。
- 有幾個(gè)像素預(yù)制體,玩家摧毀像素預(yù)制體會(huì)掉落材料,玩家可以從上面走過去收集
- VoxelDrops立體像素是掉落在地上的小立方體,玩家可以收集小立方體收集,這將添加一個(gè)立方體個(gè)數(shù)到玩家的背包中。
- 玩家會(huì)生成一個(gè)實(shí)例,用來保存屬性如冷卻時(shí)間、數(shù)量等。
- ItemTemplate數(shù)據(jù)模板通常存儲(chǔ)在數(shù)據(jù)庫中。多虧了Unity 腳本組件功能,我們可以在檢查器中編輯它們。可以在“Resources”文件夾中找到和修改模板。
- 玩家(以及后來的怪物和npc)都會(huì)繼承實(shí)體。實(shí)體擁有普通屬性,如生命值、法力、傷害、防御。
- 為了提高性能,會(huì)把世界幾個(gè)部分并根據(jù)周圍的玩家隱藏/顯示它們。
如果感興趣的話,可以看代碼的實(shí)現(xiàn)過程,代碼中有很多的注釋,可以用來學(xué)習(xí)。
五、理解無限世界生成原理
以下是無限世界生成的工作原理:
(1)使用柏林噪聲函數(shù)產(chǎn)生二維噪聲,類似于舊電視上的靜電噪聲。
(2)使用二維柏林噪音函數(shù)循環(huán)生成三維地形,在給定范圍內(nèi)遍歷每一個(gè)x、z坐標(biāo),然后將預(yù)制體填充到這個(gè)范圍內(nèi)的所有方塊。我們只計(jì)算當(dāng)前坐標(biāo)內(nèi)的所有位置,而不進(jìn)行無限生成,因?yàn)橥婕以诓槐寂艿臅r(shí)候就沒有比較生成無限的世界。
(3)柏林噪聲本身是相當(dāng)枯燥的地形。我們將幾個(gè)不同頻率和振幅的柏林噪聲函數(shù)相加,得到更有趣的結(jié)果。這也被稱為八度音階。
(4)然后我們根據(jù)給定位置的八度音節(jié)結(jié)果決定使用哪種體素類型,例如如果 小于0.5,我們可以用水填充它,小于0.7用泥土填充它,大于0.7用石頭填充或者其他更大的東西。這被稱為閾值設(shè)定。
(5)同時(shí)產(chǎn)生一個(gè)無限的世界是不可能的。WorldGenerator組件只生成有用的部分。
我們創(chuàng)建了一個(gè)像素預(yù)測(cè)函數(shù),它可以通過使用八度音節(jié)來預(yù)測(cè)任何給定3D位置的像素類型。
這個(gè)函數(shù)不會(huì)加載任何東西到游戲世界中。
我們還創(chuàng)建了一個(gè)像素生成函數(shù),為給定的3D位置生成預(yù)測(cè)的體素。這個(gè)函數(shù)確實(shí)將體素加載到世界中。
然后也不能一直調(diào)用而不受限制,這個(gè)辦法就是生成一層包圍的區(qū)域,WorldGenerator組件將玩家周圍的區(qū)域分割成塊,然后每個(gè)塊的每個(gè)位置調(diào)用VoxelGenerate,也就是生成像素塊
(6)樹木和建筑物不能產(chǎn)生柏林噪聲,我們?cè)谏伤邢袼睾笫謩?dòng)將它們生成到每個(gè)塊中。
注意:世界生成是偽隨機(jī)的。換句話說:它看起來是隨機(jī)的,但它總是基于種子。我們永遠(yuǎn)會(huì)因?yàn)橐涣7N子而得到完全相同的世界。這真的很整潔,因?yàn)槲覀兛梢酝ㄟ^保存種子來拯救整個(gè)世界,而且我們可以很容易地通過詢問用戶他們的世界種子來調(diào)試故障。
六、腳本文件分析
Chunk.cs
將世界分為幾個(gè)大塊,將所有包含像素,設(shè)置為活躍/不活躍(如果它們不在玩家的范圍內(nèi))的區(qū)域。我們需要分成塊來極大地提高性能。
Database.cs
保存XML文件中的字符數(shù)據(jù)和二進(jìn)制文件中的世界數(shù)據(jù)。位置在"Database/Account/Character"文件。
DefaultVelocity.cs
設(shè)置開始時(shí)剛體的速度。
DestroyAfter.cs
在一段時(shí)間后銷毀游戲片段。
DetectFocus.cs
將此腳本添加到攝像機(jī)(或類似的)以檢測(cè)游戲窗口焦點(diǎn)。
Entity.cs
實(shí)體類是所有像玩家一樣的東西的基類,比如NPC,怪物。
七、功能介紹
- 完全基于Unity + UNET環(huán)境部署為基礎(chǔ)
- 客戶端和服務(wù)器的腳本在一起
- 無限大的世界
- 通過Perlin生成噪聲過程
- 結(jié)構(gòu)產(chǎn)生:樹木等。
- 100%模仿隨機(jī)
- 第一人稱運(yùn)動(dòng)
- 玩家的生命值、傷害、防守等。
- Voxel放置和銷毀
- 手動(dòng)加工制作模式
- 動(dòng)態(tài)加載
- 通過局部遮擋高度優(yōu)化
- 通過協(xié)同線進(jìn)行平穩(wěn)的世界(UN)裝載
- 數(shù)據(jù)庫保存玩家和世界數(shù)據(jù)
- 使用Unity的新UI系統(tǒng)
- 美麗的紋理
- 英語、語音、信息聊天
- 物品及物品掉落
- 只有2600行精心制作的C#代碼
- 服務(wù)器可以在Linux上以Headless模式運(yùn)行
- 登錄面板
- 以主機(jī)/玩家/特殊身份開始游戲
- 網(wǎng)絡(luò)時(shí)間同步
- 平臺(tái)獨(dú)立
- 沒有矛盾和競(jìng)爭對(duì)手
總結(jié)
以上是生活随笔為你收集整理的【Unity3D插件】VOXL插件分享《多人沙盒游戏插件》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络层核心:路由和路由生成算法
- 下一篇: win服务器文件夹权限设置密码,win服