スポンサーリンク

Unity実習21、AIを作ってみよう

SnapCrab_NoName_2016-6-6_17-56-52_No-00.jpg

最近、ブログの記事でUnityじゃない記事が前に2つあると「今日は月曜日なんだな」って思います

はい、始めて行きましょう
今回はAIの作成、この本読んで1つ知ったのは、AIって「人工知能」って意味なんですね、英語にすると Artificial Intelligence

豆知識も増やしながらスクリプトを追加
EnemyCtrlをインポート
UNIDRA_DATA/Data/MainGame/Scripts/Chapter11/EnemyCtrl.cs
を、ProjectのAssets/Scripts にドラッグ&ドロップ
SnapCrab_NoName_2016-6-6_14-57-20_No-00.jpg

HierarchyにあるWargとDragonに取り付けます
SnapCrab_NoName_2016-6-6_15-12-6_No-00.jpg

ゲームを動かしてみると、敵がうろちょろ走り回ります
が、相変わらずドラゴン君は移動せず
なんで?こういうもの?座標は変わってるんですが、Arrivedのチェックが一瞬足りとも外れない
何が間違っているのやら

EnemyCtrlを取り付けたので、前回エラーが出て出来なかった、ダメージ計算、これの確認をしておきます
狼はちょろちょろ動き回っているので、動いてないドラゴンを狙います
ゲームを実行して、プレイヤーをドラゴンの近くへ
HierarchyでPlayerを選択、InspectorのCharacter StatusでAttacingのチェックを入れます
プレイヤーが剣を振り落とした後、HierarchyでDragonを選択、Charactar StatusのHPが100から減っているかを確認
減っていれば、上手く機能しているということで
画像は、4回攻撃したのでHPが60に減っています
HPを0にすると、また何かエラーが出てきますが、解らないので放置、まだ0にしないほうがいいかも
SnapCrab_NoName_2016-6-6_15-19-3_No-00.jpg

プレイヤーを発見する
ゴライダを使って、一定範囲内にプレイヤーが入ったら発見する、といった設定をします
HierarchyにCreate > Create Emptyで、空のオブジェクトを作成
名前を SearchAreaCollider に変更
SnapCrab_NoName_2016-6-6_15-33-42_No-00.jpg

SearchAreaColliderのInspectorで、Add Component > Physics > SphereColliderを追加します
追加したら
Is Triggerにチェックを入れて
Radiusを2.5に
SnapCrab_NoName_2016-6-6_15-37-9_No-00.jpg

Hierarchyで、SearchAreaColliderをWargと親子関係に
SnapCrab_NoName_2016-6-6_15-38-47_No-00.jpg

親子関係を持たせたら、SearchAreaColliderのInspectorでTransformのPositionとRotationのXYZを 0 に
親子関係があると、子のオブジェクトは「親からどれくらいずれた位置にあるか」という設定になるそうで
0にすれば親の中心と同じ場所に持っていくことが出来ます
SnapCrab_NoName_2016-6-6_15-45-41_No-00.jpg

SnapCrab_NoName_2016-6-6_15-40-58_No-00.jpg

攻撃対象を設定
UNIDRA_DATA/Data/MainGame/Scripts/Chapter11/SearchArea.csをProjectビューのAssets/Scripstsにドラッグ&ドロップ
WargのSearchAreaColliderに取り付けます
SnapCrab_NoName_2016-6-6_15-51-41_No-00.jpg

SnapCrab_NoName_2016-6-6_15-51-57_No-00.jpg

HierarchyでPlayerを選択して、Inspectorで Tag を Player にします
SnapCrab_NoName_2016-6-6_15-53-53_No-00.jpg

ゲームを実行して、狼の近くに行くと、こちらに向かってきた後噛み付いてきます
SnapCrab_NoName_2016-6-6_15-55-54_No-00.jpg

上手く機能していれば、PlayerとWargのInspectorで Apply を押して反映させておきます
Dragonにも同様の手順でコライダやスクリプトを取り付けていきます
Hierarchyで空のオブジェクトを作成、名前をSearchAreaColliderに
InspectorにSphereColliderを追加
Is Triggerにチェックを入れ、Radiusを4
HierarchyでDragonと親子関係に
SnapCrab_NoName_2016-6-6_16-8-49_No-00.jpg

SearchAreaColliderのPositionとRotationのXYZを0に
SearchAreaスクリプトを取り付け
SnapCrab_NoName_2016-6-6_16-12-47_No-00.jpg

SnapCrab_NoName_2016-6-6_16-12-56_No-00.jpg

ゲームを実行して、プレイヤーに攻撃してくればOK
DragonのInspectorで Apply を押しておきます
ちなみに、ここのでドラゴンに近づくと、プレイヤーの方にのっそり歩いてきます、良かった良かった
SnapCrab_NoName_2016-6-6_16-16-43_No-00.jpg

アイテムの生成
敵を倒したら回復アイテムをドロップするように設定します
どんなものかと言うと
・アイテムは二種類
・アイテムを取ると、一定時間攻撃力が上昇orHP回復
・攻撃強化は5秒間

UNIDRA_DATA/Data/MainGame/3DAssets/Item を
Projectビューの Assets/3DAssets/ 内にフォルダごとドラッグ&ドロップ
SnapCrab_NoName_2016-6-6_16-25-46_No-00.jpg

テクスチャーの設定
テクスチャを選択して、InspectorのTexture TypeがTextureになっているか確認
なっていなかったら変更して、Apply
SnapCrab_NoName_2016-6-6_16-38-38_No-00.jpg

SnapCrab_NoName_2016-6-6_16-38-27_No-00.jpg

モデルを選択してInspectorで Model を選択
SnapCrab_NoName_2016-6-6_16-41-56_No-00.jpg

SnapCrab_NoName_2016-6-6_16-42-8_No-00.jpg

下にある項目で、Shaderを Mobile > Diffuse に変更
SnapCrab_NoName_2016-6-6_16-42-22_No-00.jpg

None(Texture)の部分に、Projectビューからテクスチャーをドラッグ&ドロップ
緑と赤、両方に同じ用に設定して下さい
SnapCrab_NoName_2016-6-6_16-42-49_No-00.jpg

アイテムプレハブの作成
Hierarchyで空のオブジェクトを2つ作成
名前をそれぞれ ItemRedObject ItemGreenObject にリネーム
ProjectビューのItem_GreenとItem_Redの2つのモデルをHierarchyのGreenとRed、それぞれの上にドラッグ&ドロップ
SnapCrab_NoName_2016-6-6_16-51-27_No-00.jpg

Item_RedとItem_GreenのPositionとRotationを0に
SnapCrab_NoName_2016-6-6_16-58-37_No-00.jpg

Item_RedとItem_GreenにBoxColliderを追加
SnapCrab_NoName_2016-6-6_17-0-53_No-00.jpg

SnapCrab_NoName_2016-6-6_17-0-29_No-00.jpg

ItemGreenObjectとItemRedObjectにSphereColliderを追加
Centerを X: 0 Y: 0.25 Z: 0
Radiusを 0.6
Is Triggerにチェックを入れます
SnapCrab_NoName_2016-6-6_17-3-18_No-00.jpg

SnapCrab_NoName_2016-6-6_17-3-27_No-00.jpg

ItemGreenObjectとItemRedObjectに Rigidbody を追加
SnapCrab_NoName_2016-6-6_17-6-19_No-00.jpg

スクリプトの更新
PCharacterStatusスクリプトにアイテム取得関連の内容を追加します
といっても、Chapter11フォルダに追加されたのがあるので、それに更新(最初からこれにすればいいのに)
ちなみに、更新する方法が本に書かれていないので、オリジナルで行きます
ProjectビューでCharacterStatus.csをダブルクリック、MonoDevelopを起動します
SnapCrab_NoName_2016-6-6_17-13-49_No-00.jpg

起動したら、CharacterStatusの隣に、新しいCharacterStatusをドラッグ&ドロップ
SnapCrab_NoName_2016-6-6_17-19-22_No-00.jpg

新しい方のChara(略)で、スクリプトのどこかを適当にクリックした後にキーボードの Ctrl を押しながら A を押して
スクリプト全体を選択、右クリックで Copy を選びます

次に古い方のChara(略)のスクリプトのどこかを適当にクリック Ctrl を押しながら A を押して
全体を選択したら、右クリックから Paste

そうすると、コードがまるっきり上書きされるので、MonoDevelopのメインメニューにあるFile > Saveで更新完了
Unityでエラーが出ますが、無視して大丈夫です

次に、UNIDRA_DATA/Data/MainGame/Scripts/Chapter11/DropItem.csを
ProjectビューのAssets/Scriptsにドラッグ&ドロップ
Unityが5用にコードを書き換えるか?と聞いてくるのでGo Ahead!
書き換えが終わると、先ほどのエラーが消えます
(スクリプトに正体不明のコードがあるけど、これ何?書き間違え?といったエラー(だと思う)が、新しいスクリプトがきて「ああ、これね」みたいな?)

HierarchyにあるItemGreenObjectとItemRedObjectに DropItem を取り付け
※2016/06/07追記、Kindの項目を、緑はHeal、赤はAttackになるように変更して下さい※
SnapCrab_NoName_2016-6-6_17-37-13_No-00.jpg

本では、どういったコードを追加したかを解説していますが、カット

2つのアイテムをSceneビューで地面の上にあるか確認
無いようならItemGreen(Red)Objectを選択した状態で動かします

ゲームを実行して、プレイヤーがアイテム触れると消える(取得)かどうかをチェックして下さい
効果を発揮しているかは、CharacterStatusのスクリプトで確認できます
(項目が増えてますね)
SnapCrab_NoName_2016-6-6_17-41-12_No-00.jpg

良かったら、HierarchyにあるItemGreenObjectとItemRedObjectをProjectのAssets/Prefabsにドラッグ&ドロップしてプレハブ化します
プレハブ化したら、Hierarchyにある2つのアイテムは削除しておきましょう
SnapCrab_NoName_2016-6-6_17-45-2_No-00.jpg

敵がアイテムを落とすように設定
Project の Warg を選択
SnapCrab_NoName_2016-6-6_17-49-18_No-00.jpg

InspectorでEnemy CtrlにあるDropItem Prefabの項目を開きます
今回、アイテムを2つ用意してあるので Size に 2 と入力して Enter
すると、2つ項目が増えるので、そこにそれぞれ緑と赤のアイテムのプレハブをドラッグ&ドロップ
これで、狼を倒すとどちらかのアイテムがランダムでドロップするようになりました
SnapCrab_NoName_2016-6-6_17-52-35_No-00.jpg

ゲームを実行して、狼を倒した後、ちゃんとドロップしてきたら今回はおしまい
次回は「ゲームの流れを作ってみよう」です
敵を複数出現させたり、ボスを倒したらゲームクリアになる、そういった設定をしていきます
関連記事

Leave a Reply


管理者にだけ表示を許可する

Comment

Leave a Reply


管理者にだけ表示を許可する