Minecraft Wiki
Minecraft Wiki
Advertisement
「tick」はこの項目へ転送されています。コマンドについては「コマンド/tick」をご覧ください。

Minecraftでは、ブロックの状態や時刻の更新、Mobのスポーンやイベントの発生などといったゲームの動作に必要な処理を、すべて包括して一つのループに組み込み周期的に実行している。このループ1回のことをティック(英:Tick)またはゲームティック(英:Game Tick)と呼び、Minecraft内における経過時間をこのティック(通常120秒)を単位として表現する場合がある。また、この記事ではこのループに包括される処理を総称して「ティック処理」と呼ぶ。

ゲームティック[]

通常Minecraftは固定値20ティック毎秒(120秒=0.05秒=50ミリ秒で1ティック)で実行されており、ゲーム内の1日(24000ティック)は丁度20分となる。ただし、実行環境の処理能力が低くこの処理が追いつかない場合は、TPS(Ticks Per Second、1秒間のティック数)は下がる。ゲーム内の現象に掛かる時間は基本的に現時間ではなくティックで管理されているので、低いスペックのデバイスではゲームの現象がゆっくりになることもある。

TPSに関連する値として、MSPT(Milli Secnds Per Tick、1ティック分の処理の所要時間[ミリ秒])がある。MSPTが50ミリ秒/ティック以内に収まっている(1ティック分の処理が50ミリ秒以内に完了する)場合は、TPSは20ティック/秒に維持される。

以下の要素は、ゲーム内でも特にMSPTを増大させ、ラグを引き起こす可能性が高い。

  • ホッパーが上側にあるアイテムを探知する処理。
    • 上面にチェストなどのインベントリのあるブロックまたはコンポスターを接続し、そのブロックからアイテムを回収するモードに切り替えることで、アイテムの探知処理を停止させることができる。また、水流や泡の柱による輸送で代替することでも負荷を抑えることができる。特に大量輸送の場合には、輸送効率の面でも水流輸送の方が優れている。
  • レッドストーン回路の動作。
    • レッドストーン回路の部品、特にレッドストーンダストはブロックの更新に大量の処理を必要とし、ラグを引き起こしやすい。使用していない時は回路の動力を切断するなどし、負荷を軽減することが推奨される。
  • MobのAI。
    • 読み込まれているMobの数が多いほど負荷が大きいので、松明を設置して敵対Mobのスポーンを防ぎ、動物に関しても効率の良いトラップを用いることで個体数を抑制することができる。

Java Editionでは、MSPTはF3を押すと表示されるデバッグ画面左上に「<MSPT> ms ticks」のように表示されている。Alt + F3でTPSの値を記録したグラフを表示することもできる。これらの値は現在参加しているサーバーから提供される値であり、シングルプレイヤー時には必ず表示することが可能だが、マルチプレイヤーではサーバーのホストのみが確認することができる。

ゲームの処理動作[]

Java Editionでは、各ループにおいて以下の処理が順番に行われている。

  • タグtickおよびloadのついた関数がまず最初に実行される。
  • 次に、各ディメンション内における処理が、オーバーワールド、ネザー、エンドの順に行われる。各ディメンション内の処理の内容と順序は以下の通りである。
    • 時刻がクライアントに送信される。
    • ワールド境界が更新される。
    • 天候に関する処理が行われる。
    • プレイヤーの就寝に関する処理が行われる。
    • 追加で、オーバーワールドに関してのみ以下の2つの処理が行われる。
      • 昼夜サイクルに関する時刻と、ゲーム内の時刻が1進む。
      • スケジュールされた関数が実行される。
    • 引き続いて、各読み込まれているチャンクに対して以下の処理が行われる。
      • チャンクの情報がクライアントに送信される。
      • チャンク内のティックに関する処理が行われる。
    • ファントム、ピリジャー、ネコのスポーン、およびゾンビによる村の襲撃の発生が試行される。
    • エンティティに関する変更がクライアントに送信される。
    • チャンクの読み込み状態の解除が試行される。
    • スケジュールされたのティック処理が以下の順に行われる。
      • ブロックに関するティック処理
      • 液体に関するティック処理
    • 襲撃に関する処理が行われる。
    • 行商人のスポーンが試行される。
    • ブロックに関するイベントが行われる。
    • エンティティに関する処理が行われる。
    • ブロックエンティティ(タイルエンティティ)に関する処理が行われる。
  • プレイヤーに関する処理が行われる。
  • 前回のオートセーブからの時間を確認し、6000ティック以上が経過している場合オートセーブを試みる。
  • クライアントから送信されたパケットの処理が行われる。

チャンクに関するティック処理[]

RandomTickRange

草が伝播している範囲が、ランダムティックが行われるチャンクの範囲。中心にある矢印は、赤色がX軸の正方向(東)、青色がZ軸の正方向(南)をそれぞれ示している。この画像ではプレイヤーは中心のチャンクにおける(7,7)の位置、つまりチャンクの中心に接する4つのブロックのうち北西側のブロックにいるため、ランダムティックが行われる範囲である半径128ブロック(チャンク8個分)の範囲に北端と西端のチャンクの中心は含まれるが、南端と東端のチャンクの中心は含まれないため、図のように草の伝播する範囲に非対称性が生じている。

ゲームの処理動作の一環としてチャンクに対してもティック処理が行われるが、以下のような条件がある。

Java Editionでは、読み込み状態が「エンティティ処理」であり、且つその中心が(スペクテイターモードでない)プレイヤーから半径128ブロック未満の範囲に含まれるチャンクに対してのみティック処理が行われる。読み込みが破棄されているチャンクにはティック処理は適用されない。また、あくまでチャンクの中心が範囲内にあればよいのであって、一部チャンクの範囲外に出ているブロックがあっても、そのブロックが属するチャンクの中心が読み込まれてさえいれば同様にティック処理が適用される。なお、128ブロックというのは水平距離のことなので、Y軸の値(高度)はティック処理の適用不適用に影響しない。

Bedrock Editionでは、読み込まれているチャンクはすべてティック処理を毎ティック受けることができる。 ティック処理を受けるチャンクでは、以下のイベントが発生する。

  • Mobの自然スポーン
  • 雷雨時に、チャンク内のどこかに一定の確率(1100000毎ティック)で落雷が発生する。
  • 116毎ティックの確率で、チャンク内のXZ座標(底面積1ブロックの柱状領域)が選択され、その領域の最上部のブロックに対して以下に挙げる気候に関する現象の確認と試行が行われる。
    • 気温が一定以下(寒帯のバイオーム、あるいは高地)ならば、氷結が試行される。
    • 降雪時には、の設置が試行される。
      • さらに、大釜が最上部に設置されている場合はその内部に粉雪が満たされる。
    • 降雨時には、大釜がで満たされる。
  • 一部のブロックに対し後述のランダムティックが行われる。

ランダムティック[]

チャンクは高さ16ブロックごとにセクション(英:Section)と呼ばれる下位領域に分割される。1つのセクションは16^3=4096個のブロックから為り、1チャンクには下から順に24個のセクションが含まれる。1ティックごとに、それぞれのセクションから毎ティックいくつかのブロックがランダムに選択され、以下に挙げるようなティック処理を受ける。こうしたティック処理をランダムティック(英:Random tick)と呼ぶ。

Java Editionでは、1ティックごとに各セクションから選択されるブロックの個数は/gamerule randomTickSpeedで設定でき、デフォルトでは3に設定されている(ただしブロックの選択は重複を禁止していないので、被りが生じて1ティックに選択されるブロックが少なくなることはある)。Bedrock Editionにおいても選択されるブロックの個数をrandomTickSpeedで調整できる(デフォルトでは1)が、この値は実際に選択されるブロックの個数ではなく単なる相対的な値である。

ランダムティックが発生すると、ブロックの種類や状態によって次のような変化が発生する。石など、特別の動作が設定されていないブロックはランダムティックで選択されても何も起こらない。

Java Editionではブロックの選択は完全にランダムに行われるので何時そのブロックがランダムティックを受けるかを知る術はないが、一度ランダムティックが発生してから次に同じブロックにランダムティックが発生するまでの時間の中央値は47.30秒(946.03ティック)、平均値は68.27秒(1365.33ティック)である。あくまで平均であるので、これよりずっと長くかかる場合も、あるいはずっと短時間で複数回のランダムティックが発生することも十分ある。

スケジュールされたティック処理[]

一部のブロックは、未来の特定の時刻に自分にティック処理を行うように事前に要求することができる。これにより発生するティック処理をスケジュールされたティック処理(英:Scheduled tick)と呼ぶ。これは、レッドストーンリピーターの出力やの広がりなど、次に発生する動作と時間が確定しているものに対して使用されている。

Java Editionでは、スケジュールされたティックにはブロックに関するティック処理と液体に関するティック処理の二種類があり、このうち前者が優先的に行われる。さらにブロックに関するティック処理の中にも優先順序が定める値が存在し、その値が小さいものから優先的に処理される。レッドストーンリピーターは、他の構成素子の側面および背面に接続している場合は-3、信号が切れるときは-2、それ以外の動作をするときは-1の優先度を持つ。レッドストーン以外のブロックはすべて優先度0である。この次に液体に関するティック処理が行われるが、こちらには液体ごとの優先度などはない。1ティックで実行できるスケジュールされたティック処理の数はJava Editionでワールド全体の総回数を計上しており65536個まで、Bedrock Editionではチャンクごとの総回数が制限されており100個/チャンクまでとなっている。

レッドストーンティック[]

レッドストーンティック(英:Redstone tick)とは、2ゲームティック(110秒)を基準とする単位である。

この単位は、レッドストーン回路部品の遅延が基本的に偶数ゲームティックであることから説明や計算の簡単のためにプレイヤー間で導入された単位であり、レッドストーン回路の部品のみ特殊なティック処理が行われていて、2ティックに1度しか処理が行われないなどといった仕様が存在するわけではない。回路を構成するブロックも通常のブロックとしての更新は毎ティック行われている。レッドストーン回路に関する説明をする場において、簡単のためにしばしばこのレッドストーンティックを単にティックと表記している場合がある。それぞれを特に区別する必要のある場合は「ゲームティック」「レッドストーンティック」と表現することが望ましい。

レッドストーンリピーターの遅延は1~4レッドストーンティック(2~8ゲームティック)、ピストンの伸長、格納にかかる時間は1レッドストーンティック(2ゲームティック)‌[Java Edition限定]である。


脚注[]

  1. a b 選択されて初めて低確率の試行を行い、試行が成功したときのみスポーンが発生するので、他のランダムティックによって発生するイベントよりもはるかに確率が低い。
Advertisement