2016-08-05 23 views
0

我想創造一個可塑造的世界(也可能也是程序生成的),但我不知道如何通過腳本創建它。Unity3D中的可變形地形?

還有誰我有幾個問題的幾個例子:

的Minecraft

這是很容易從立方體使程序產生的可成形的世界,但我不知道該怎麼做它是最佳的。團結強大足夠處理很多立方體嗎?

地標

在這個遊戲中,你可以塑造世界,它採用統一像地形。它與Minecraft類似,但不是立方體。 (所以當你在地下挖掘時,就像在現實生活中一樣挖掘〜所以你不要像Minecraft那樣挖掘立方體)

是否可以塑造地形運行時?

感謝您的幫助提前!

+0

你打算在什麼平臺上運行的機制的文檔? – Droppy

+0

我覺得只有PC – Tudvari

+3

這個問題已被詢問1000次。在資產商店中有許多***我的世界首發孩子和體素入門套件,或者甚至可以找到免費軟件(查看Unity論壇等)。 (這是不可思議的,你可以從頭開始編程,這需要2 - 3年的時間。)只是谷歌「團結的Minecraft套件」。這種普遍的問題是針對gamedev的。com,不在這裏 – Fattie

回答

1

這是很容易從立方體使程序產生的成形的世界

簡短的回答,不,它是不容易的。你將不得不使用某種類型的噪聲,產生高度圖(如噪音素,here's a blog tutorial

[是]統一足夠強大的處理大量數據集的?

不,它自己的統一性不能很好地處理一個Minecraft克隆所需的立方體數量。從統計角度講,你永遠無法看到立方體的全部6個面,因此渲染全部6是浪費的。另外,每個立方體都會有它自己的對撞機,這將快速混亂。另外,如果立方體被其他立方體阻擋,則不需要渲染立方體。所有這些都需要複雜的優化代碼,以便在修改地形並在世界中移動時有效地運行它。

是否可以塑造地形運行時?

是的,這裏的一些代碼,我從this question偷:

function Start() 
{ 
    terrain = GetComponent(Terrain); 
    var nRows = 50; 
    var nCols = 50; 
    var heights = new float[nRows, nCols]; 
    for (var j = 0; j < nRows; j++) 
     for (var i = 0; i < nCols; i++) 
      heights[j,i] = Random.Range(0.0,1.0); 
    terrain.terrainData.SetHeights (0,0,heights); 
} 

和這裏的一對TerrainData.SetHeights()
https://docs.unity3d.com/ScriptReference/TerrainData.SetHeights.html

1

你可以修改Unity內置的地形的高度圖:TerrainData.SetHeights。你需要定義一些類似畫隕石坑的畫筆,取決於你的需求。