Submit Search
Upload
適度に弱い敵aiの作り方
•
10 likes
•
16,050 views
D
dodoyuzo
Follow
強すぎず、しかし露骨に弱すぎない敵AIを作るための手法
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
ゲームAIの基礎と事例
ゲームAIの基礎と事例
Tomoaki TSUCHIE
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
tsukasa obara
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ゲーム開発とデザインパターン
ゲーム開発とデザインパターン
Takashi Komada
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
Recommended
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
ゲームAIの基礎と事例
ゲームAIの基礎と事例
Tomoaki TSUCHIE
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
tsukasa obara
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ゲーム開発とデザインパターン
ゲーム開発とデザインパターン
Takashi Komada
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
小林 信行
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
infinite_loop
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
色彩センスのいらない配色講座
色彩センスのいらない配色講座
Mariko Yamaguchi
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
スマートフォンゲーム企画書制作のポイント
スマートフォンゲーム企画書制作のポイント
Tetsuya Kimura
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
Gemdrops Inc.
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
『UXデザインの教科書』を書きました
『UXデザインの教科書』を書きました
Masaya Ando
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
ゲームAI入門(前半)
ゲームAI入門(前半)
Youichiro Miyake
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないこと
Satoshi Kodaira
ゲームAI入門(後半)
ゲームAI入門(後半)
Youichiro Miyake
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
com044
More Related Content
What's hot
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
UnityTechnologiesJapan002
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
小林 信行
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
infinite_loop
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
色彩センスのいらない配色講座
色彩センスのいらない配色講座
Mariko Yamaguchi
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
スマートフォンゲーム企画書制作のポイント
スマートフォンゲーム企画書制作のポイント
Tetsuya Kimura
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
Gemdrops Inc.
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
『UXデザインの教科書』を書きました
『UXデザインの教科書』を書きました
Masaya Ando
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
ゲームAI入門(前半)
ゲームAI入門(前半)
Youichiro Miyake
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないこと
Satoshi Kodaira
ゲームAI入門(後半)
ゲームAI入門(後半)
Youichiro Miyake
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
com044
What's hot
(20)
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
GPU最適化入門
GPU最適化入門
色彩センスのいらない配色講座
色彩センスのいらない配色講座
ゲームエンジンとMVC
ゲームエンジンとMVC
スマートフォンゲーム企画書制作のポイント
スマートフォンゲーム企画書制作のポイント
インタフェース完全に理解した
インタフェース完全に理解した
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
PlayStation®4向けARPGのUnity開発事例 最適化と効率化の秘密
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
『UXデザインの教科書』を書きました
『UXデザインの教科書』を書きました
Unityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
ゲームAI入門(前半)
ゲームAI入門(前半)
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
UE4のレイトレで出来ること/出来ないこと
UE4のレイトレで出来ること/出来ないこと
ゲームAI入門(後半)
ゲームAI入門(後半)
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
適度に弱い敵aiの作り方
1.
適度に弱い敵AIの作り方 2015/07/25
2.
自己紹介 • 名前 ドドリゲス雄蔵(@dodoyuzo) • 職業 ゲームプログラマ
10年くらい • 言語 C/C++やC#を主に使用しています
3.
敵AIとは何か • ※この先、プログラムのコードは1行も出てきません
4.
敵AIとは何か ・アクションゲーム、RPG、シミュレーション さまざまなジャンルのゲームに登場する"敵AI“ ・ここでは、人間の代わりにキャラクターを動かし 人間の対戦相手を務めるプログラムを指します NPC 1P 2P 3P これ COM
5.
敵AIをどのようにプログラミングしますか? 条件式 行動 プレイヤーが3m以内にいる プレイヤーに対して近接攻撃 プレイヤーが10m以内にいる
プレイヤーに対して射撃攻撃 自分のHPが10%未満 味方を食べて回復する その他 プレイヤーを探す ・シンプルな実装方法 条件式とそれに合致した場合の行動を用意し 上から順番に条件式を評価します 優先順位、条件式、行動が明確で調整と実装がしやすいです 優先度
6.
敵AIをどのようにプログラミングしますか? ・この方法ではすべての敵AIが 条件さえ満たせば全く同じ行動をとってしまう問題もあります つまり、条件式によっては常に手加減無しの敵AIが出来上がってし まいます。 ・難易度によって敵AIをある程度弱くしたい場合 何かしらの対策が必要になります。 ・ではどうしたら、敵AIは弱くなるでしょうか?
7.
敵AIを弱くしたい A案.AIの更新処理を遅くする 敵AIの反応や行動が遅くなりますので、必然的に弱くなります ただ、"単に行動の遅い敵AI"にもなってしまいます 強いAI弱いAI 60F に 1回更新
1F に 1回更新
8.
敵AIを弱くしたい B案.難易度別に敵AIの条件式と行動を用意する ゲームバランスの調整もしやすい方法です 「条件さえ満たせば全く同じ行動をとってしまう問題」が残りますが ゲームルールによっては問題にならない場合もあります 条件式 行動 プレイヤーが3m以内にいる プレイヤーに対して近接攻撃 プレイヤーが10m以内にいる
プレイヤーに対して射撃攻撃 自分のHPが10%未満 味方を食べて回復する その他 プレイヤーを探す 条件式 行動 プレイヤーが3m以内にいる プレイヤーに対して近接攻撃 プレイヤーが10m以内にいる プレイヤーに対して射撃攻撃 自分のHPが10%未満 味方を食べて回復する その他 プレイヤーを探す 条件式 行動 プレイヤーが3m以内にいる プレイヤーに対して近接攻撃 プレイヤーが10m以内にいる プレイヤーに対して射撃攻撃 自分のHPが10%未満 味方を食べて回復する その他 プレイヤーを探す 難易度:イージー用 難易度:ノーマル用 難易度:ハード用
9.
敵AIを弱くしたい C案.AIの行動に弱点を用意しておく B案同様に難易度、もしくは敵キャラクターごとにAIを用意します プレイヤーがゲームプレイを繰り返し、敵AIの弱点を理解する事で 徐々にゲームの展開を有利に進められるゲームデザインを構築で きます パターンC ・4m以内にプレイ ヤーがいると逃げる パターンB ・2~3mのプレイ ヤーに対して攻撃し ない パターンA ・同じプレイヤーに対 して3秒に1回までし か攻撃できない
10.
敵AIを弱くしたい D案.AIはそのままで、敵のパラメータを弱くする HPや攻撃力を下げれば、弱くなります 敵AIが約束された動きをするので、それをプレイヤーが逆手にとっ て 有利に状況を進めるゲームデザインを構築できます Lv.1 HP 6
Lv.99 HP 999 AIは同じ弱い敵 強い敵
11.
敵AIを弱くしたい • A案.AIの更新処理を遅くする • B案.難易度別に敵AIの条件式と行動を用意する •
C案.AIの行動に弱点を用意しておく • D案.AIはそのままで、敵のパラメータを弱くする • これらはあくまで一例です。 上記のケースのいずれか もしくはその複合で求めていた結果を得られる場合もあります
12.
敵AIを弱くしたい しかし、上記のケースでは不十分な場合もあります。 もうちょっと自然に しかし露骨に手を抜いている訳ではないが、適度に弱くしたい それも、パラメータでは無くAIの動きで見せたい場合です。 以下の方法はあくまで一例です ゲームジャンルや実装方法によってベストな答えは違いますので こういうやり方もあるんだな、程度で見て下さい
13.
適度に弱いAIを作りたい • まずAIの取りうる行動を全て書き出します • 例えばコインを取る、相手を攻撃する、ゴールに向かう、などです コインを取る 相手を攻撃 ゴールに向かう
14.
適度に弱いAIを作りたい • 次にその行動にプライオリティを設定します • コインを集めるのがメインのゲームルールであれば "コインを取る"の行動のプライオリティを高めにします コインを取る 相手を攻撃 ゴールに向かう Priority
100 Priority 60 Priority 40
15.
適度に弱いAIを作りたい • ゲームルールにあわせて 相手を攻撃する、相手よりも先にゴールする、など プライオリティを調整します コインを取る 相手を攻撃 ゴールに向かう Priority 0 Priority
80 Priority 40
16.
適度に弱いAIを作りたい • 次にその行動を“どの程度、実行しやすいか?"を調べます • 具体的には対象物との距離を測り、有効距離内であればその割合 を算出します NPC
1.0 0.0 この範囲を有効距離とする 中心だと 1.0
17.
適度に弱いAIを作りたい • 例えば敵AIの近くにコインがあったとします。 これらをコインA、コインBとし、それぞれ距離が違うものとします この範囲を有効距離とする NPC この範囲を有効距離とする A B 0.5 0.2
18.
適度に弱いAIを作りたい • 同じコインでも、AよりもBの方が近いので “コインBを取る”という行動のプライオリティが高くなります NPC この範囲を有効距離とする A B 0.5 0.2 コインAを取る Priority 100
A 0.2 × = 20 コインBを取る Priority 100 B 0.5 × = 50
19.
適度に弱いAIを作りたい • こうして、その敵AIが取りうる全ての行動の プライオリティを算出して、高い順番にソートします 行動 プライオリティ コインBを取る
50 1Pを攻撃する 35 コインAを取る 20 挑発 10
20.
適度に弱いAIを作りたい • こうすると、一番プライオリティの高い行動が その状況で本来取るべき"最適な行動"になります。 つまり"強い行動"です 行動 プライオリティ コインBを取る
50 1Pを攻撃する 35 コインAを取る 20 挑発 10 強い
21.
適度に弱いAIを作りたい • では、2位以下はというと "その行動も間違えではないが、最適ではない"行動になります この順位が下がるにつれて、どんどん場違いな行動になっていきます 行動 プライオリティ コインBを取る
50 1Pを攻撃する 35 コインAを取る 20 挑発 10 大体あってる 間違いではない それは大きな ミステイク
22.
適度に弱いAIを作りたい • もうお分かりかと思いますが。 行動のプライオリティが1位のものだけではなく 2位未満の行動もたまに取るようにすると、敵AIは適度に弱くなっていき ます 行動 プライオリティ コインBを取る
50 1Pを攻撃する 35 コインAを取る 20 挑発 10 採用率70% 採用率15% 採用率10% 採用率5% 適度に弱い
23.
適度に弱いAIを作りたい • この手法のポイントは、2位以下の行動でも 人間であれば実行しても不思議ではないものが、ある点です 上位3つまで、など範囲を限定すれば、不自然さはだいぶ低くなります 行動 プライオリティ コインBを取る
50 1Pを攻撃する 35 コインAを取る 20 挑発 10 大体あってる 間違いではない それは大きな ミステイク
24.
適度に弱いAIを作りたい この方法に加えて 「A案.AIの更新処理を遅くする」を併用すると “反応はすこぶる早いけど、行動はデタラメ“ “実行するまで腰が重いけど、行動は正確“ といった特徴付けから 「反応も遅いし、行動もデタラメ」といった超弱いAIも作れます
25.
実装時のメリット ゲームルールに最適化されたAI 執拗に攻撃するAI ゴールに近づくプレイヤーを妨害するAI • AIに性格付けを行いやすくなります ゲームルールに基づいた行動のプライオリティを高くすれば ゲームルールに向いたAIになります 何か特定の行動のプライオリティを高くすれば ゲームルールを無視して、その行動を優先するAIになります
26.
実装時のメリット • AIの調整や別パターンを作成する場合でも 行動のプライオリティと有効距離割合の値を書き換えるのみで 処理そのものに手を加える部分が少なくて済みます AIの処理はとにかく複雑になりがちなので 数値パラメータにまとめられれば、調整が非常に行い易い
27.
向くゲームジャンル ・アクション ・対戦全般 本来は人間が操作するはずの部分を代行するNPCとしてのAIを使用 するジャンル 実行できる行動の種類が多いほど、優先順位の2位以下を 選択しても不自然に見えにくい
28.
向かないゲームジャンル ・シューティング ・RPG ・戦略シミュレーション AIの振る舞いをプレイヤーが理解、予測する事でゲームの展開を有利に 進める事ができるジャンル 行動の選択肢が少なくて、優先順位の2位以下の行動が目立つものや 詰将棋のように1ターン1ターンを計算して進めるジャンルなど
29.
総括 • 敵AIの作りは、ジャンルによって様々 • 強いAIは作れても、弱いAIは工夫しないと不自然に見えてしまう •
シンプルに実装できて調整しやすいのなら、それがベスト
30.
ご清聴ありがとうございました
Download now