<前文>
HxH式念能力分類法とRPG戦闘システム
ほとんどの英単語は、一つの単語に名詞と動詞の両方の意味があります。Cookもそうです。Cookの名詞の意味はコックつまり料理人です。ではcookの動詞としての意味は知っていますか?
9割の日本人が「え?料理するでしょう」って答えると思います。確かに、今日調べた時点ですが、結構な英和辞典でcook の動詞の訳は「料理する」って書かれています。
これって実は100%間違いなんです。
Cookの意味は「食材に火を通して食べれる状態にする事」です。この火を通す事がcookの根本的な意味で、例えば「寿司を料理する」とか「サラダを料理する」の訳としてcookは使用出来ません。
良く「日本人って10年英語勉強しても全然しゃべれるようにならないよね。」と言われますが、在米10年の私から言わせればそれは当たり前なんです。だって勉強に使用している教科書そのものが間違っているから。今回のcook に関して言えば英和辞典そのものが間違っています。
所が、私がこの話を英語がしゃべれない日本人にすると大抵の人は烈火の如く怒ります。「偉い学者先生が言っているんだから絶対正しい。」と盲信しているのか、それに騙されている信者から利益を巻き上げて生計を立てているからなのかは知りませんが、英和辞典が間違っている訳ないと。激怒します。
そこで気が付いたんですが、この「偉い学者先生が言っているんだから絶対正しい。」と盲信しているのや、それに騙されている信者から利益を巻き上げるって、先週話したHxH式念能力分類法の操作系の能力そのものだったんです。
HxH式念能力分類法は科学的な根拠は全く無いですが、何故か現実の現象に良くあてはまる深い部分があるんです。
それでHxH式念能力分類法を、何かしらの方法で現実的に役に立つ事を証明したいなと思ったら、盲点ですが、ゲーム内でシミュレーションするのが一番簡単と気が付きました。
RPGの製作で属性について勉強したんですが、ゲーム内で属性を簡単にするために、水が火に攻撃する時は攻撃力が2倍になる事にしました。そして主人公を火属性にして色々工夫して水属性の敵を倒す。そこまでは良かったんですが、攻撃力を2倍にしたら、戦闘中にどんな選択をしても絶対、火は水に負けてしまうんです。そして煮詰まってしまったんです。結果が100%分かっているなら戦闘する必要はないです。攻撃力を2倍以下にすると今度は、水属性の敵が火属性の主人公を攻撃する理由が弱くなります。敵は100%勝てると考えて戦闘を挑んでくるですから。
これにHxH式念能力を追加してゲーム内でシミュレーションすると、HxH式念能力分類法が現実的に役に立つ事を証明出来るだけてなくゲームの戦闘システムが煮詰まっている状態からも抜け出せる事に気が付いたんです。
以下に簡単に説明します。
<強化系>
戦闘力そのものを1.5倍から3倍まで強化します。敵が2倍の攻撃力で攻めて来ても、戦闘力そのものを2倍以上に挙げれれば返り討ちに出来る訳です。
<変化系>
属性を変化します。例えば主人公が火属性から水属性の弱点である雷属性に変化するとかです。これも属性が上手く合えば、返り討ちに出来ます。
<具現化系>
敵の苦手な属性を持つ魔物を召喚したり、戦闘力を強化する武器を現実化したりする事で、対応します。
<操作系>
敵を眠らしたり、混乱させたりするか、武器を操る事で戦闘力を挙げる事で対応します。敵を混乱する武器を装備したら、かなり凄くなりそうです。
<放出系>
ここまでは上手く行っていたのですが、放出系で困ってしまいました。魔法を放出するのは当たり前で、敵の攻撃が届かない遠距離から攻撃出来るようにするためには距離という新しいパラメーターを追加する必要があり、そうなると最初から考え直す必要が出て来ます。更に距離を敵が詰める事が出来ないのなら、戦闘自体を避ける事が簡単になってしまい別なゲームになってしまう気がします。
それで現実に戻って考え直してみました。
そしたらすぐ答えが出ました。泣き叫ぶんです。子供が襲われたら、泣き叫んで助けを呼びます。つまり情報の放出を行うんです。味方なら直ぐに救助に駆けつけますし、最悪でも敵の情報を放出する事で敵の弱点をはっきりさせる事が出来ます。
<特質系>
それ以外の全ての対応策です。
戦闘中に死にそう(HPが10%以下)になったら、これらの念能力が目覚めるです。あるいはどこかの町で念能力を学んでも良いです。
これは上手く行きそうですね。もう少し練る必要はありますがこのアイデアは活けそうです。
それでは今週の勉強を始めます。
<本文>
1.今週の予定
以下の事をやります。先週AIのtutorialをやりましたが、公式のOnlineコースにAIがあるのを見つけたので一応、それも勉強しておきます。
- AIの勉強
- モンスターのAIの作成
- Save機能を直す
2.AIの勉強
公式のOnline learning にAIの教材があるのを見つけたので一応勉強する事にしました。
はっきり言ってしまうと私は公式のTutorialは好きではありません。理由は
- 5分の説明で済む事を1時間かけてじゃべったりしている。
- 綺麗ごとが多い。
- 学習者のために作成していない。
のが多いからです。
公式のOnline learningはそれに比べるとかなり出来が良い。とは聞いていたので、一応、飯を食べながら軽く読んでいました。そしたら結構、為になる事が書かれているので今週改めて勉強する事にしました。
2.1 Introduction
以下の事を勉強するらしいです。
AIとは簡単に言えば、知覚―>思考―>行動である。って最初に読んだAIの教科書に書いてあったです。すっかり忘れていました。これは大事です。
注目すべき点はEQSとGameplay Debuggerを初心者向けのこの教材で教えています。
Gameplay Debuggerは日本語のキーボードの設定のせいで、勉強を避けがちですが、絶対知っておくべき機能なのかもしれません。
EQSの方はどうなのでしょうか?先週、勉強したtutorialでは、まだ試験的な機能と言っていましたが、そのTutorialは2年前に作成されたものです。今は絶対知っておくべき事なのでしょうか?
その辺も勉強して行くに連れておのずと判明するでしょう。
2.2 Downloading Project Files from Box
これから勉強するための教材がDownload出来るのかと思ったら出来ません。
仕方がないので、次の章の勉強を開始したら、この章で紹介されていたように教材のリンク先が動画の下にありました。
この辺はいつも公式のOnline learning で勉強している人達には当たり前かもしれませんが、初めての人には結構分かりにくいです。
2.3 Creating the Project and Environment
Introductionでこの教材で勉強するためには、BPの使用方法を一通り理解しておく必要があります。と言って、初心者向けの教材といっても全くUE4を触った事のない初心者用の教材じゃないよ。と忠告しておきながらBakeされた影を新しくするためにはどうすればいいかの様な本筋と全く関係ない部分、しかも超初心者以外知らない人はいない事を延々と語っています。
というかこのレベルの人が対象の教材なのかもしれません。
EQSとGameplay Debuggerをどの程度教えているのか以外は特に重要ではないかもしれません。
2.4 AI Theory
知覚―>思考―>行動について説明しています。それだけです。特に深堀してる部分もありません。AIが知覚―>思考―>行動で構成されている事を知らない人には重要だと思います。
2.5 Creating the AI Character
まずCharacterBPとAIControllerBPについて説明しています。決して駄目な説明ではないですが「Unreal Enigne4で極めるゲーム開発」で紹介されていた家庭用ゲーム機のコントローラーの先にキャラクターが繋がったイメージを使用した説明の方が100倍位分かり易いです。
これに限らないですが、ポンチ絵を使用した方が直観的に理解出来る事は多いです。
2.6 Quiz1
AIのフレームワークは知覚―>思考―>行動であるが、UE4のAIはそれに沿って作成されてるか?の質問にYESと答えたら×でした。一応沿って作成されていると思うんですが、明確には沿っていないと言う事みたいです。
2.7 Navigation Theory
Baking the NavigationでNavigation MeshをBakeする方法について説明しています。これって初めて知ったんですが…。
ここでアクターの位置をちょっとでも動かした時もヤレと書かれています。
そうだったのか。
理論の所は良くまとまっています。一般的なAIにおけるnavigation systemとUE4で採用された方法についての解説は一読の価値アリです。
私が重要と思う所を簡単に以下にまとめました。
- Navigationとは現在地から目的地にどの様に移動するかを決定する事です。
- そのためには障害物の把握と、移動可能なルートの捜索が必要になります。
- UE4ではNavigation Meshを使用してそれらを可能にします。
- Navigation Meshは地形などの情報をAIが利用しやすいように予め計算しておくため、すべてのAIが迅速に動く事を可能にしています。その一方で動的な変化に対応する事は出来ません。
そうだったのか。これならBakeする必要も納得です。
2.8 Using the NavMesh Bounds Volume
普段はBakeは要らないって。言ってました。
うん。
NavMesh Bounds Volumeの使用方法についての解説と実演なので特に記録したい事は無いです。
2.9 NavMesh Agents
NavMesh Agentsについて学びました。初めて知った機能です。簡単に説明するとAIが操作するキャラのサイズに合わせて、NavMesh Bounds Volumeの領域が変わる機能です。
- 複数の大きさの違うキャラの場合の設定方法
- 空を飛んだり泳いだりする場合
等の解説がありました。
流石にこの説明だけでは、実装は出来ないかもしれませんが最初の情報源としては十分です。
かなり勉強になりました。
2.10 Navigating the Mesh
ここで、今まで作成したNavMesh Bounds Volume上でAIを動かします。
CharacterBP内で全ての実装を終わらせていますが、このやり方、返って難しくしている気もします。
後、AIControllerを呼び出していましたがいつ作成したのか覚えていません。Creating the AI Characterの所で作成していたんでしょうか?見直すのも面倒なので先に進みます。
2.11 Nav Mesh and the Gameplay Debugger
マジですか。もうGamePlay Debuggerについて説明しています。
最初にアメリカ以外では、’でDebug出来ないので設定を変える必要について説明しています。おお、流石公式のサイトと思ったんですが、Console云々のパートが何を言っているのか良く分かりません。先週、参考にした日本語のサイトは確かConsole云々のパートは使用しなかったと思うんですが、この方法でも出来る様になるんでしょうか?
因みに、このTutorialの製作者はイギリス人っと言ってました。イギリスのキーボードはアメリカのと違うんでしょうか?
GamePlay Debuggerを開始する時に、絶対AIの方を向いてやるように。と言っています。
これがGamePlay DebuggerにAIが表示されたりされなかったりする原因でしょうか?
試してみます。
最初の一回はそうみたいです。一回AIに合わせるとその後、そのAIを見なくてもそのAIの情報が表示されます。
マジか。
これだけ有効な情報が得られるとなると、これから公式のOnlineコースのチェックは欠かせなくなりますね。
後、細かい事ですが、表示される情報が速すぎて読めなかったんですが、Pauseすれば良い事も分かりました。
全体的に言えばかなり有用な情報を得る事が出来ました。
2.12 Quiz 2
Using the NavMesh Bounds Volumeで実演した内容に関しての質問が一つあったんですが、良く聞いてなかったので正解が分からなかったです。
2.13 AI Perception Theory
ここは理論パートだから一般的なAIの知覚について語るのかと思ったら、完全にUE4のPerception systemについてでした。正直、一般的なAI Perception Theoryの説明が聞きたかったです。
AI Perception Component と AI Perception Stimuli Sourceについての解説、そしてTarget Perception Updated eventについての説明がちょっとだけあります。
確かに初めてUE4のAIを勉強する人たちには大変有用な情報であるし、簡潔にUE4のPerception systemを説明しています。が先週、先々週とUE4_AIについて勉強していた私にはほとんど自明な内容でした。
実際の戦場でAI付きのドローンに戦車を自動攻撃する時は、敵の戦車はAI Perception Stimuli Sourceを付けてはくれないですよね。
最新の機械学習や深層学習を使えば、簡単に敵の戦車を認識出来るのでしょうか?それとも現在でも敵を認識するのは難しいのでしょうか?その辺は興味深い話題です。
2.14 Setting up AI Perception
AI Perception Component と AI Perception Stimuli Sourceの実際の実装方法について実演しました。Lose sight radiusについての解説が今一良く分からなかったんですが、
Editorの説明文を読んだら分かりました。
2.15 AI Perception and the Gameplay Debugger
まず、Anti-aliasing が効いているとDebugの細い線が見えないから切れと説明しています。
先週作成したAIで確認して見ましたが、絶対見えないと言う事はないと思います。
個人的にはやんなくても良いかなと思います。
Tutorialの例ではSightが1、Ageは0と表示されています。
自分のでも確認しましたが、一応表示されています。
それよりもPlay中にtabキーを押す事で、自在にカメラの位置を変えているんですがこのやり方が分かりません。Spectator cameraと言っているんですがそれで検索しても出て来ません。
うーん。
こっちのやり方を教えてほしいです。
その後でinner とouter の違いについて実演を踏まえて解説していましたが、この辺も自分で確認したいのですが、カメラの位置の変え方が分かりません。
分からないので先に進みます。
2.16 Using the AI Perception Events
Target Perception Updated eventのSuccessを返した場合についての簡単な実装を学びました。このSuccessを返す場合の条件でさっきのInnerとouterに居る場合を調べたかったんですが、play中にカメラの位置が変えられないので上手く試せませんでした。
2.17 Quiz 3
Stimulusの要素にStimulus Locationを知らなかった事とActorの情報もStimulusに入っていると思っていた事の二つを間違えました。
確認するのが面倒だったので適当に答えたら間違っていました。
満点は中々取れないですね。
2.17 Behavior Tree Theory
Behavior Treeについての説明でした。Selectorとsequenceの違いについての簡単な説明をしていました。
Behavior Tree自体は一般的なAIにも使用されているのか、それともUE4独自の理論なのかの説明みたいなのが欲しかったです。
自分で調べて見ました。
載ってませんでした。
5章の4節がまるまるBehavior Treeについての解説でした。少しだけ読んだらゲームのAI作成ではBehavior Treeは一般的な方法みたいでした。あんまり脱線するとtutorialが終わらなくなるのでこれ以上の調査は中止します。
2.18 Building the Initial Behavior Tree
AIController内からBehavior Treeを使用する時のEventにPossessを使用していました。
いつ、Eventが発動するのか今一分かりません。
Taskの作成の説明で、FinishExecuteノードを忘れると、このtaskは何時まで経っても終了した事にはならないとありました。うー。恐ろしい。
あれ、その後、Behavior TreeからBlackBoardの変数と関連づけたりする所の説明が全くないみたいですが?
2.19 Chasing the Player
長すぎます。
見てるだけでは完全な理解は無理でした。
Observer abortsの説明は普通で、特にバグがあるとかは言っていませんでした。
うーん。やっぱり普通に動くんですかね。
2.20 Testing the Behavior Tree
Behavior treeのdebugのやり方が説明されていました。
実際に試してみないと分かりませんが、先週やったようなPrintStringを使用したTaskをつけて動作を追うより分かり易いかもしれません。
その後で、GamePlay debugを使用して現在どのBehavior Treeのノードが使用されているとか、Blackboardの変数の値などを見る事が出来る事が説明されていました。
この辺も実際に自分で試してみないとどの辺が問題なのか分かりません。
2.21 Quiz 4
始めて満点取れましたけど、taskにPrint stringを使用しないでDebugを使用する事が正解なヤツとか、Observer abortsでBothを選択するのが正解なのがありました。
これらの答えが正しいのは分かりますが、実際の運用でこの通りに出来るかはまた別問題で、先週のObserver abortsでPriorityが効いていないのかどうかのチェックをこれらの機能を使用してもう一度調べるとなると、どうやって良いのか今一分かりません。
2.22 Creating the First EQS Query
なるほど、EQSが何故必要なのか分かりました。
今のPerception systemではNPCがキャラを見つけて追いかける事は出来ますが、もっと複雑な事、例えばNPCがキャラを見つけたら追いかけますが、その途中にある障害物にキャラから見つからない様に隠れる。のような事は出来ません。
それを可能にするのがEQSだそうです。
今、4.24を使用していますが、その時点でもEQSはまだ試験的導入に位置付けられています。
4.26のプロジェクトでも確認しましたが、こっちはExperimentalの箇所にはEQSはありませんでした。
既に標準仕様になっています。
このtutorialのサンプルでEQSをtaskのように使用していました。
あれ、EQSってそういう風に使用するだったのか?と驚きです。とうか先週みたEQSのtutorialの時は何で気が付かなかったんでしょうか?
2.22 Making a Decision Based on Hunger
最初に全然関係ないんですが、2.15 AI Perception and the Gameplay Debuggerでゲーム中に俯瞰してrangeを見る方法が分からないと嘆いていましたが分かりました。
Tabキーを押すだけでは駄目で、GamePlay debugを開始してから押す必要があります。一回tabキーを押すとカメラがplayerのキャラから外れて自由に動くようになります。WASD操作で普通に動きます。
Behavior treeのdebugのやり方が分かり易く紹介されています。
簡単にまとめておきます。
まず、Behavior Treeを開いた状態でゲームを開始します。
ゲームが開始した瞬間にBehavior Treeのpauseボタンを押します。
DebugしたいAIのキャラが選択されている事を確認します。
以下に示した様に、現在発動しているtaskまでの起動のルートが示されています。
現在の一歩前のステップが見たいとします。
Back:Introをクリックします。
以下に示した図が表示されました。
この赤い線で表示されているのはfailureが返されてるのを表しているみたいですね。となると緑の線はsuccessを表しているのでしょうね。
先週やったtutorialのBehavior Treeで実際に試してみます。
ゲーム開始直後に、Pauseしました。
説明されていた通りにDebugの対象をチェックします。
UE4 editorで確認してみるとNPC_AIのID NameがNPC_ALC_0とあります。
NPCのキャラクターが選択されていると思ったのですが、実際はAIControllerの方が選択されていました。
Back:Introをクリックします。
おお、一歩前のFailureされたステップが赤い線で表示されています。
敵に見つかってから、PauseにしてBehavior Treeに戻って来ました。
敵に見つかった瞬間のBehavior Treeの挙動をDebugしたいと思い、ひたすらBack:Introをクリック(16回)したら、以下に示した様に見れました。
これなら、Behavior Treeの挙動を逐一追う事が出来ます。
Behavior TreeのDebug 使える様になりました。
2.23 Creating the Second EQS Query
EQS Queryを使用してPlayerに最も近い場所かつPlayerから見つからない場所を探すそうです。
実際に自分で作成しないと詳細は分からないですが、ここまでビデオを見ているだけだったので今更これだけ作成する事は出来ません。
代案としてPlayerに最も近い場所かつPlayerから見つからない場所を探すEQS Queryの作成方法をTutorialの動画を使用して以下に簡単にまとめます。
まず、SimpleGrid : generate around Querierを追加します。
このノードはNPCの周りに大量のグリッドを作成するそうです。Playerから見えないグリッド、そしてその中で最もplayerに近いグリッドを選択する事で上記に示した条件の場所を特定するのでしょうか?
その通りでした。以下に示した様に、二個のTestを追加して上記に示した条件の場所を特定しています。
最初のtestでPlayerから見えないグリッド、次のtestでその中で最もplayerに近いグリッドを選別しています。二つのtestsの細かい設定については見ているだけでは理解出来ませんでした。後で実際に作成してみます。
その後で、その場所への行き方が存在してるのかをチェックしていました。
これは忘れていました。見つけた場所にNPCが到達できなければ意味ないですね。
2.24 Using the EQS Testing Pawn
UE4ではEQSの挙動を確認するための専用のテストがあるそうです。ここでその使用方法を勉強します。
まず、EQS Testing Pawn BPクラスから以下のクラスを作成します。
そのInstanceをLevel内に配置します。
配置したInstanceの詳細にEQSがありますので、テストしたいEQS Queryをセットします。
以下の様な結果が表示されます。
うーん。なるほど。分かり易いです。
次に2.23 Creating the Second EQS Queryで作成したEQS Queryのテストを行う方法を説明していますが、
内で、以下に示した様に、テストの対象をPlayerのキャラクターから今回、EQS Testing Pawn BPクラスから作成したpawnに変更しています。
このEQSC_Playerが何なのか分かりません。
この辺は後でもう一回このTutorialを勉強する時に理解する事にします。
それで既に訳わからなくなってしまったんですが、2つ重要な機能の説明をしていたのでそれだけ記録しておきます。
Querying ModeをSingle Best Itemにセットすると最後に選ばれたグリットがどれなのかを表示します。
Step to Debug Drawの数値は、SimpleGrid : generate around Querier内のどのテストまで実行したのかを表しています。
この数字を1に変えると最初のテストのみを実行した状態を表示します。
2.25 EQS Gameplay Debugger
はい。GamePlay DebuggerをEQSに使用します。
解説によると、2.24 Using the EQS Testing Pawnのテストとの違いは、EQS Gameplay Debuggerはゲーム中の実際のEQSの挙動を表せる事だそうです。
実際の操作に関しては普通のGameplay Debuggerとほぼ同じに見えましたのでここに特に記録はしません。
2.26 Comparing UE4 Implementation to Theory
ここでは、一般のAIの理論である、知覚―>思考―>行動に、UE4_AIのそれぞれの機能がどう対応するかについて解説しています。
ここで述べられている事は前々から自分の中で思っていた事でした。
一つだけ質問を残しておきます。
Taskが行動に対応するのは正しいと思います。
しかしこのTutorialでhungerの値を1から0に戻る機能をTask内で作成しました。これは行動ではありません。
だから理論の立場から考えればこの機能はServiceで作成すべきです。
しかし実際の実装から考えるとTask内でhungerの値を1から0に戻した方が簡単です。
このような場合、理論と実際の便利さのどちらを優先して設計すべきなのでしょうか?
2.27 Next Steps
ここで制作したサンプルを更に向上させるためのヒントが述べられています。
内積を求めてその結果を使用すれば方向についても考慮出来ます。と書かれていました。
このTutorialの対象者って内積位軽く分かっている人向けだったのでしょうか?
色々なアイデアが述べられていましたが、正直、今の私のレベルでこのTutorialの作者の真意が分かるとも思えないので何となく聞いておきました。
2.28 Quiz 5
Tutorialを見ていただけで、全く作成しないでテストした割には2問しか間違えませんでした。理論を問う問題が多かったからかもしれません。
2.29 このTutorial についての感想
一応、このTutorialに対しての感想を記録しておこうと思います。
想像していたのより10倍くらい質がありました。
UE4のAIの基礎を学ぶなら、この教材は必ず勉強する必要があると思います。正し全くUE4のAIの知識がない人がこの教材で勉強を始めて全部理解出来るのかは分かりません。
公式のOnline learningは一個を除いて見た事無かったのですが、その一個の教材も良かったですし、この教材も素晴らしかったです。もっと頻繁に利用する事にします。
3. モンスターのAIの作成
2で結構な時間が取られてしまったので出来るところまでやります。
3.1 AIの設定
知覚、思考、行動に分けてそれぞれの機能において必要な機能を考えてみます。
3.1.1 知覚
以下の機能は欲しいです。
- AI Perception Component と AI Perception Stimuli Sourceは必ず使用する。
- 視覚、聴覚の両方の機能を追加したい。
- プレイヤーの操作するキャラに反応するだけでなく他のモンスターの動向も知覚出来る。
3.1.2 思考
進撃の巨人を見ていたら、敵が奇襲攻撃を始めた時に直ぐに戦場に向かう巨人と、ある程度の損害を覚悟しても武装して戦場に向かう巨人がいました。これってどちらが正しいとは言えませんが、どちらも最善を尽くしています。こういう人によって違う思考も再現したいです。
アイデアの一つに、重要度と言う概念があります。
- 重要度によって行動を変える知能
- 知覚から得た情報を元に需要度が変化
3.1.4 行動
- 敵にまっすぐに向かう。
- 警報をならす。
- 武器を取りに行く。
などが考えられます。
ちょっとこれでは弱いですね。来週までもう少し考えてみます。
4. まとめと感想
公式のOnline Learningを勉強した所までは調子よかったんですが、その後緊急の用事が発生してしまってそれ以上出来なくなってしまいました。残りは来週やります。