Submit Search
Upload
適度に弱い敵aiの作り方
•
10 likes
•
16,031 views
D
dodoyuzo
Follow
強すぎず、しかし露骨に弱すぎない敵AIを作るための手法
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
dena_genom
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
小林 信行
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
techgamecollege
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
Recommended
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
【GDM37】ゲームAIにおける意思決定と地形表現~『LEFT ALIVE』を事例に紹介~
dena_genom
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
小林 信行
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
【TECH×GAME COLLEGE#32】ゼロからリアルタイムサーバーを作るまで
techgamecollege
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
Unity Technologies Japan K.K.
ゲームAI入門(前半)
ゲームAI入門(前半)
Youichiro Miyake
【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略
Takayasu Beharu
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
Unity Technologies Japan K.K.
ゲームAI製作のためのワークショップ(III)
ゲームAI製作のためのワークショップ(III)
Youichiro Miyake
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
KLab Inc. Creative
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
narumi_
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
KLab Inc. / Tech
UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座
Yuichi Ishii
はじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろう
Masahiko Nakamura
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
Grenge, Inc.
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
UniTask入門
UniTask入門
torisoup
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
Masahiko Nakamura
More Related Content
What's hot
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
Unity Technologies Japan K.K.
ゲームAI入門(前半)
ゲームAI入門(前半)
Youichiro Miyake
【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略
Takayasu Beharu
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
Unity Technologies Japan K.K.
ゲームAI製作のためのワークショップ(III)
ゲームAI製作のためのワークショップ(III)
Youichiro Miyake
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
KLab Inc. Creative
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
narumi_
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
Sugimoto Chizuru
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
KLab Inc. / Tech
UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座
Yuichi Ishii
はじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろう
Masahiko Nakamura
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
Takahiro Miyaura
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
Grenge, Inc.
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
UniTask入門
UniTask入門
torisoup
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
Masahiko Nakamura
What's hot
(20)
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
ゲームAI入門(前半)
ゲームAI入門(前半)
【Unity】より良い表現のためのライティング戦略
【Unity】より良い表現のためのライティング戦略
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
ゲームAI製作のためのワークショップ(III)
ゲームAI製作のためのワークショップ(III)
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
自動LOD生成を可能にする3Dキャラクターパイプラインセミナー
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~
UnityによるAR/VR/MR 開発体験講座
UnityによるAR/VR/MR 開発体験講座
はじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろう
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
ゲームエンジンとMVC
ゲームエンジンとMVC
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
UniTask入門
UniTask入門
UE4におけるキャラクタークラス設計
UE4におけるキャラクタークラス設計
適度に弱い敵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