手冊:minecraft:scatter_feature

出自Minecraft基岩版开发Wiki
minecraft:scatter_feature
模式
所屬域
features
型別
散植地物
加入版本
?

散植地物(Scatter Feature)用於將地物散植到區塊當中。

語法[編輯]

"minecraft:scatter_feature": {
  "description": {
    "identifier": "<par1>"
  },
  "places_feature": "<par2>",
  "project_input_to_floor": <par3>
  "iterations": <par4>,
  "scatter_chance": <par5>,
  "x": <par6>,
  "y": <par7>,
  "z": <par8>,
  "coordinate_eval_order": "<par9>"
}

結構[編輯]

  •  minecraft:scatter_feature:根物件。
    • *description:描述。
    • *places_feature:設定要散植的地物,填寫其賦命名空間識別碼。
    •  project_input_to_floor:設定是否將地物投射到高度圖中。
    • *iterations:設定地物的迭代次數(即地物嘗試放置的次數)。
    •  scatter_chance:設定地物的散植成功機會。預設值為100。當填寫數字時,遊戲會將該數字當做百分數:
      "scatter_chance": 12.5
      
      使用Molang運算式時,遊戲將以分數形式來讀取:
      "scatter_chance": "1 / 8"
      
      物件形式的參數也可以表示分數:
      "scatter_chance": {
        "numerator": 1,
        "denominator": 8
      }
      
      以上三種形式的成功機會都是12.5%。
    •  x:設定放置時相對於地物原點的x軸座標。可填整數或Molang;物件形式可用於設定預設的分布型別
    •  y:設定放置時相對於地物原點的y軸座標。可填整數或Molang;物件形式可用於設定預設的分布型別
    •  z:設定放置時相對於地物原點的z軸座標。可填整數或Molang;物件形式可用於設定預設的分布型別
    •  coordinate_eval_order:設定座標的判斷順序。預設值為xzy。可填寫xyzxzyyxzyzxzxyzyx

判斷順序[編輯]

散植地物放置目標地物時,會首先根據  scatter_chance 設定的分散機會來判斷此次放置是否成功。若失敗,則停止後面的步驟,反之則進行下一步判斷。

接下來它將判斷設定的迭代次數,若迭代次數沒有解析為正整數,則不會進行下一步的判斷。

然後它將根據設定的迭代次數進行相應次數的迭代,無論每次迭代因何種原因失敗,都不會影響下一次迭代。對於每次迭代,都會使用相同的順序來計算其座標。

分布型別[編輯]

遊戲內預設了6種分布型別用於將地物分布在一定範圍內,透過填寫對應的介面字串在地物規則或部分地物中使用它們。例如:

"x": {
  "distribution": "uniform",
  "extent": [ 0, 16 ]
}

下表列出了可用的介面字串:

ID 字串 描述
1 uniform 均勻分布型別,可將目標地物在指定的半開區間(左閉右開)範圍內均勻地隨機放置。
2 gaussian 高斯分布型別,可將目標地物以高斯分布的形式隨機放置在指定半開區間(左閉右開)範圍內。
3 inverse_gaussian 逆高斯分布型別,可將目標地物以逆高斯分布的形式隨機放置在指定半開區間(左閉右開)範圍內。
4 fixed_grid 固定網格分布型別,可將目標地物以指定步長和初始偏移量的網格形式在指定閉區間範圍內均勻放置。
5 jittered_grid 抖動網格分布型別,可將目標地物以指定步長和初始偏移量的網格形式在指定閉區間範圍內隨機放置。
6 triangle 三角分布型別,可將目標地物以三角分布的形式在指定的區間範圍內放置。

網格分布[編輯]

網格分布分為固定網格分布和抖動網格分布,它們都有兩個參數來決定網格的步長和初始偏移量,分別是  step_size grid_offset 。步長的預設值為1,初始偏移量的預設值為0。

網格分布的語法結構如下:

  •  x/y/z:x/y/z軸座標參數物件。
    • *distribution:隨機分布型別
    • *extent:分布範圍。
    •  step_size:網格步長。預設值為1,以方塊為單位。
    •  grid_offset:網格初始偏移量。預設值為0,以方塊為單位。

如果有兩個及以上的座標軸使用了網格分布,則當某一座標軸上迭代到指定的範圍邊緣(最大範圍)時,遊戲將會跳到下一行從最小範圍處繼續迭代。進行迭代的座標軸的優先級由  coordinate_eval_order 決定,預設值為xzy。也就是說,(前提三個座標軸都使用了網格分布)預設情況下遊戲會先在x軸上以指定步長進行迭代,假設迭代次數無限大,則當迭代到最大範圍時,遊戲將在z軸上移動指定步長,並回到x軸的最小範圍處繼續迭代(會計入之前已經消耗的步長,其他座標軸也同理),以此類推;當z軸上到達最大範圍處時,遊戲將在y軸上移動指定步長,並回到z軸的最小範圍處繼續迭代,以此類推。下面給出了一個範例:

"iterations": 8,
"x": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 3,
  "grid_offset": 1
},
"z": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 1
},
"y": 0

該範例以地物原點為中心,在xz座標平面建立了一個5×5的網格。由於x座標軸設定了1格初始偏移,所以遊戲會跳過(0,0),從(1,0)處開始第一次迭代,然後數3格,並在第3格處進行第二次迭代,也就是(4,0)。此時x軸上已經到達最大範圍處了(座標(4,0)是x軸方向上的第5格),由於沒有設定座標判斷順序,遊戲將依照預設的x→z→y的優先級來進行下一步判斷,所以遊戲會在z軸上移動1格(因為沒有設定步長所以預設為1),x軸回到最小範圍處繼續迭代,即在(2,1)處迭代一次。在進行下一次迭代時,遊戲在x軸上數了2格但已到達最大範圍,所以會在z軸上移動1格並繼續把x軸上剩餘的1格數完,即在(0,2)處迭代一次……以此類推,直到8次迭代完成。下面給處了更為直觀的演示:

1
2
3
4
5
6
7
8
往右為x軸正方向,往下為z軸正方向。黃金方塊表示地物原點;鑽石方塊表示每次迭代放置地物的位置,上面用數字註明了是第幾次迭代;綠色羊毛表示初始偏移的量;箭頭表示迭代方向。

歷史[編輯]

基岩版
??加入了minecraft:scatter_feature

錯誤[編輯]

關於「minecraft:scatter_feature」的錯誤在國際版中由錯誤追蹤器維護,請在此回報錯誤。

Template:Navbox schema