アットウィキロゴ
bbc_mc @ moddingメモ
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

bbc_mc @ moddingメモ

概要

最終更新:

bbc_mc

- view
管理者のみ編集可

編集


目次


概要

"旧"AI、"新"AIとは

Minecraft ver1.2 で、それまでの AI とは異なる "新" AI が実装された。 ただし、いまだに一部 mob は "新" AI で動作していない。 "新" AI では mob の動作ロジックが改善され、例えば移動時にダメージを受けるような高所から降りる経路を取らなくなった。その結果として、それまで Creeper がダメージを受けてでも飛び降りて襲 ってきていたのが無くなった。

"旧" AI システムと "新" AI システムの大きな違いとしては、"旧" AI ではEntityLiving の onUpdate 内で AI としての処理を行っていた所、"新" AI ではタスクベースの管理システムが実装された。(EntityAITasks)

現在見られる EntityAI~ というクラスは、"新" AI システムで利用される個別タスクの実装クラスとなっている。

以下では、"新"AI システムについて、説明を行う

AIの基礎を構成するファイル

AI システムを構成するファイルは、大きく分けると以下の通りである。

  • EntityAITasks
     AI のリストを保持し、どの AI を実行するかを切り替える管理用クラス。各Mobでインスタンスを持つ。
     EntityLiving で宣言されており、EntityLiving.onUpdate 内から定期的に update を呼び出されている。
     EntityLiving では、通常動作用と戦闘用の 2 つのインスタンスを保持している。
    
  • EntityAITasksEntry
     EntityAITasks に登録する単位。
     登録先の EntityAITasks と、AI の実行重要度(priority)、EntityAIBase を継承したクラスへの参照を持つ。
    
  • EntityAIBase
     すべての AI の基礎となるベースクラス。
     新AI はこのクラスを継承して作成されている。
    
  • EntityAITarget
     EntityAIBase を継承する抽象クラス。
     戦闘に関する AI はこのクラスを継承して作成されている。
    

基礎となるクラス

EntityAITasks

Mob の AI は、EntityLiving で定義されている以下に格納されている。

EntityAITasks tasks;

EntityAITasks targetTasks;

EntityAITaskEntry

EntityAI~

編集

特徴的な仕組み

shouldExecute

EntityAIBase を継承するタスクは全てこの関数を実装している。 
この関数は EntityAITasks により実行され、タスクを今実行すべきかどうかをタスクが判断し、真偽値を返す。
# これは重要なポイントで、"タスク自身" が判断しており、管理クラスはそれをそのまま受け入れている。
真を返した場合、より優先されるタスクが実行されていない限り、そのタスクが実行される。

mutex_bit

同時実行できないタスクを示すために、bit フラグを利用する。
詳細は 別ページ に記載する。

priority

より小さい値をもつタスクが優先的に実行される。

  • 同時に実行できないタスクの場合に、executingList への登録が優先される ただし、priority 値が大きい AI が executingList へ先に登録される場合、後から priority 値が小さい AI が登録されるが、先に登録された AI には特に何も影響がない。(要・確認)

編集


記事メニュー
最近更新されたスレッド
ウィキ募集バナー