モブがうろうろと歩き回る仕組み(ランダムウォークとも言う?)を調べてみました。
歩行検証の条件
対象:ゾンビ/スケルトン/クリーパー
状態:素の歩行状態
あくまでプレイヤーや村人を攻撃しようとしている等の要因に引っぱられていない状態=素の歩行を検証しています。またこの記事内では検証対象(ゾンビ/スケルトン/クリーパー)を総称して「モブ」と呼びますが、他のモブについて同じ法則を当て嵌めるものではありません。
なお、モブの素の歩行の仕組みをここでは便宜上「ランダムウォーク」と呼ぶことがありますが、言葉本来の意味に完全に合致するものかどうかはわかりません。
ランダムウォーク(英: random walk)は、次に現れる位置が確率的に無作為(ランダム)に決定される運動である。Wikipedia
歩行の基本的な流れ
モブは歩行移動する際に、目標となるブロックを決め、そこに至る経路を決定して移動しています。なおルートは基本的に最短の道のりが選ばれるようです。
- 移動先となる目標ブロックを決定する。
- 目標ブロックまでの経路ブロックを決定する。
- 移動する。
- 1に戻る。
目標ブロックと経路ブロック
目標ブロック
目標ブロックとはモブの移動先として選択されるブロックです。
主に「不透過ブロック+上に空間がある」場合に目標ブロックとなります。
ただし全ての不透過ブロックが必ず目標ブロックとして認識されるかは不明です。
また透過ブロックの一部で目標ブロックとして認識されるものもあります。
経路ブロック
経路ブロックとはモブが目標ブロックに移動する際に経路として選択することが出来るブロックです。
主に「不透過/透過問わず歩行可能な面と空間がある」場合に経路ブロックになります。
ただしダメージを喰らうブロックは経路ブロックに選ばれません。
例)ゾンビにとってマグマブロックや焚火など。
目標ブロックを認識する範囲
モブは自分を中心にxz方向±10ブロック、y方向+8ブロック~-6ブロックの直方体範囲内にある目標ブロックを認識します。
目標ブロックまでの移動
モブは目標ブロックに至る最短経路となる経路ブロック上を移動します。
ただし常に動的に経路を検索しているわけではないため、歩行中に経路に変化がった場合に対応できない場合があります。
例)歩行中に経路ブロックが壊れる→止まったり再検索したり出来ずに足を踏み外して落ちる。
また最短経路が目標ブロックの検索範囲外を通るものあっても一定範囲内であれば正しく選択し移動します。
目標ブロックの例外
例外的に目標ブロックとして認識されるものには以下のようなものがあります。
透過ブロックの目標ブロック
土の道ブロックや耕地ブロックは光を透過するブロックですが目標ブロックとして認識されます。
到達できない目標ブロック
経路が繋がっていない目標ブロック
経路が繋がっていない場合でも目標ブロックを認識することが出来ます。
この場合、モブは目標ブロックに最も近づける経路ブロック上で停止します。
空間が1しかない目標ブロック
身長2ブロックのモブはブロックの上の空間が1ブロックしかない場合にブロック上に到達できませんが、それでも目標ブロックとして認識することが出来ます。
この場合、モブは目標ブロックに最も近づける経路ブロック上で停止します。
空間が無い目標ブロック
不透過ブロックの上に透過ブロックが載っていて空間が無い場合でも、モブは目標ブロックとして認識することが出来ます。
この場合、モブは目標ブロックに最も近づける経路ブロック上で停止します。
トラップドアは経路ブロック
落とし穴として利用されるトラップドアは、モブの歩行にとって経路ブロックとして作用します。
トラップドア自体は目標ブロックにはならないため、落とし穴として使用する場合は必ずその先に目標ブロックを設置する必要があります。