unity Third Person Controller使い方part2 AI

どうもききです。
今回はunity Third Person Controllerの使い方を解説していきたいと思います。
今回はAIエージェントの設定方法を解説したいと思います。

設定方法は前回とほぼ同様なので割愛しつつの解説になるとおもいます。

まずcharacterbuilderを開いてヒエラルキー上にあるキャラクターをcharacterにドラッグアンドドロップIsAIAgentのチェックボックスをオンにしてそのままビルドつぎにそのオブジェクトにAIAgentコンポーネントを追加します。

とりあえずこれでダメージ計算等は勝手にやってくれます。Respawnerというコンポーネントが追加されていますがこれはリスポーン(ゲームで死んだときの再生する奴)なので消しといたほうが無難です。1秒だと倒れる前に消えてしまいます。


あとの武器などの設定は前回同様です。
肝心のAIの操作ですが残念なことにこのアセットだけではできません。
できなくはないけど完成プロジェクトというのは既に完成されていてスクリプトの解読が必要になり非常に時間がかかります。
ただこのアセットは統合インテグレーションが多数あって別のアセットで操れるようになってます。
7500円も払ってAI使えないのはえぐいですが自由度が高い分評価が高いのかもしれません。
一応紹介しておくとbehavior designer(AIツリー作成アセット)やinventorypro(アイテムインベントリー作成アセット)などの拡張エディタなどが使えます。
とりあえずこのアセットは自キャラのみになりますね。

unity Behavior Designer使い方part5エネミーの基本的な動作

どうもききです。
今回は前回の記事に続きunity Behavior Designer使い方を解説していきたいと思います。今回は前回までのBehaviortreeの特徴を整理し基本的な流れを解説していきたいと思います。
ゲームの敵キャラクターであるエネミーの基本的な動作としては

ターゲットが視界に入る→追跡→攻撃範囲内→攻撃

の流れになると思います。とりあえずこの最低限の機能をBehaviortreeで再現したいと思います。

こちらがそのBehaviortreeになります。
解説していくと自分が生きている間このAIを継続する。パラレルで二つの動作を同時進行左は自分の現在のHPを常に取得する。

次に右側の動作ですが

何もなければ周囲をパトロールします。ターゲットが視界に入るとターゲットを追跡。攻撃範囲内に入ったら追跡を終了しターゲットの方向に向きつつ攻撃します。(useは武器の使用)

注目してほしいのはアボートタイプです。

lowerprioorityに設定されていると思います。

lowerprioorityは自己の優先なので優先順位が実行可能な場合優先順位が低いほうを停止して高いほうを実行します。

なのでターゲットが範囲内に入ったらseekタスクは停止して左側の枝が実行されます。

ターゲットが範囲外に出て視界にいた場合はまたseekタスクが実行され視界でも範囲内でもなければpatolタスクが実行されます。この処理の流れはRepeaterタスクによって永続し自分が死ぬまで継続されます。

以上が基本的な動作になります。

次回からさらに高度なAIを解説していきたいと思います。

Behavior Designerの使い方part6 Repeater

unity Third Person Controller使い方part3近接武器

どうもききです。

今回はunityでtpsゲームを作れるアセットThird Person Controllerの使い方を解説したいと思います。
Third Person Controller
今回は近接武器の設定方法について解説したいと思います。
このアセットの武器は銃がメインなのですが剣などの近接武器も一応使えます。一応というのはあんまり対応してないような感じで公式にも親切に解説していませんでした。
銃などはRayCastで簡単にダメージ処理が行えますが近接攻撃の場合ヒットボックスの設定とレイヤーの指定が必要になります。
まず剣を装備させます。

次に空のオブジェクトを作ってkatana(剣オブジェクト)と同じ位置に配置(positionの値ををコピーしてペースト)

次に先ほど作った空のオブジェクトにkatanaHitboxと名前をつけMeleeWeaponHitboxスクリプトとBoxColliderとRigidbodyの3つのコンポーネントを追加

次にAttackHitBoxの要素にkatanaHitboxをいれます。
次にAttackOptionのレイヤーをEnemyに設定し敵のレイヤーもEnemyに設定。

最後にサウンドとか衝突効果などを入れて設定完了です。とりあえずこれで近接攻撃でダメージを与えることができます。

本当はダークソウルみたいなゲームをつくりたいならこっちのアセットのほうが優秀なんですがこっちだとAIなどのインテグレーションが使えません。自由に手を加えるのが難しいのが不便でもあります。

Third Person Controller Template

unity アニメーション攻撃処理

どうもききです。
今回はunityで攻撃アニメーションを行ったときに実際にダメージ処理を行う方法について解説したいと思います。
ダメージ処理や当たり判定などは銃弾などは簡単ですが物理的に斬ったり殴ったり直接的な攻撃のダメージ処理は意外に難関なのです。
攻撃アニメーションでダメージと言われてもパッと浮かばないと思います。
では具体的にどうするかというと

攻撃アニメーションしたときに
自分とターゲットの距離が範囲内かつ前方視界にいたら攻撃でダメージ判定でいけます。
bool destase = Vector3.Distance(Target.transform.position, transform.position) <AttackDistance;

bool angle1 = Vector3.Angle(Target.transform.position – transform.position, transform.forward) <60f;

if(destase&&angle1){
ダメージ処理
}
これをアニメーションイベントに埋め込んでおけばOKです

unity Behavior Designer使い方part8 自動探索

どうもききです。
前回の記事に引き続きBehavior Designerの使い方を解説していきたいと思います。
今回はAIの自動探索について解説したいと思います。
AIの基本的な行動パターンとしてターゲットが視界に入ったら追いかける。
ここまではいいですね。
ここからさらに人間に近い思考パターンを加える必要があります。
人間に近い思考パターンとはつまり頭が悪いAIということです。
人間は機械に比べて頭悪いと感じますが逆に頭悪ければ悪いほどAIとしての性能が高いということです。
何が言いたいかというとターゲットが視界から消えるなどのハプニング起こった場合でも千里眼状態では不味いということです。

今回はターゲットが視界から消えた後自動探索するツリーを紹介したいと思います。

このツリーではターゲットを見失ったときターゲットを最後に見た最終地点に設定しその最終地点まで移動(seekタスク)します。
最終地点まで移動したらwanderタスクでターゲットが視界に入るまで辺りを放浪します。
パラレルセレクターは全ての子を実行しどれかがsuccess(成功)を返したら処理を完了します。親タスクに成功が返ることはAIの停止(完了)を意味します。

Until Successは条件付きタスクが成功を返すまで実行するタスク。

can see objectはターゲットが視界に入ったら成功を返すのでターゲットが視界に入るまで永続します。

次に右側ですがseekが条件付きタスクになってます。

このタスクは本来ターゲットを追跡するタスクですがターゲットの位置まで移動すると成功を返します。(今回の場合はターゲットを最後に見た最終地点ですが)

成功を返した場合wanderで辺りを放浪します。

wanderは永続タスクで成功を返さないのでターゲットが視界に入るまでこの処理は実行され続けることになります。

android sdk導入方法

どうもききです。
今回はandroidアプリをビルドするために必要なandroid sdkの導入方法を解説したいと思います。
まずはAndroidStadioをサイトからインストールします。
そしてインストールしたAndroidStadioを開きます。
その中のconfigureをクリックして

configureの中のSDK Managerを選択します。
次にSDK Toolに画面を切り替えてShow Package Detailsのチェックをオンにします。
すると画面が変わるので
Android SDK Build Toolsの23.03まで全て選択します。環境にもよりますがどのToolsが必要か調べるのが大変なので全てインストールするのが一番手っ取り早いです。ただし23以降をインストールしてしまうとビルドできない場合もあります。

Applyをクリックするとチェック項目が全てインストールされます。

unity androidアプリ リリース準備

どうもききです。

今回はunityでandroidアプリをリリースする手順を解説したいと思います。
まずはkeystoneを作成します。
keystoneとはデジタル証明書のことですね。
これがないとアプリをリリースできません。

まずはkeystoneのパスワードを入力して保存します

一番下の項目にチェックを入れると拡張ファイルと分けてビルドできます。

100MBを超えるアプリはリリースできないのでその場合は拡張ファイルと分けることで100MB以上のアプリをリリースできます。

次にkeyを作成します。

最低以下の項目を埋めとけば作成します。

最後に一番下のパスワードを入力します。
ここのパスワードは上の画像で入力したもので間違えていたらビルドエラーがでます。
Failed to build apk. See the Console for details
と出てビルド失敗します。

次にgoogle developer consoleを開きます。
アプリの作成からリリースの準備をします。

まずはアプリのリリースを選択します。

製品版の管理からファイルをアップロードします。

アップロードに成功するとしたにアプリの情報が出てきます。

+アイコンから拡張ファイルを追加でアップロードできます。

unity Behavior Designer使い方part7攻撃と追跡

どうもききです。
前回の記事に引き続きBehavior Designerの使い方を解説していきたいと思います。
今回は攻撃と追跡について解説したいと思います。
まずはこの画像をご覧ください。

まずは左から順に解説していきます。
useは分かりにくいですが攻撃するタスクになります。
ターゲットが視界に入ったらRepeaterで常に攻撃useは永続系のタスクになります。
successを返すscriptが書いてないのでreturn successで返す必要があります。waitは数秒間待つ【停止】タスクになります。

次に右側の解説をします。
inverterは成功と失敗を逆転させるタスクです。
within Disanceはターゲットが範囲内にいるかどうかを判定します。
start Abilityは走るアニメーションのことだと思ってください。
つまりターゲットが範囲内にいなかったらターゲットを追跡しseekが成功を返したらstart Abilityをストップさせます。

次に一番右の枝を解説します。
これもさっきと同様でターゲットが範囲内にいて視界にいなかったら追跡します。
視界にいたらターゲットの方向へ向きます。

ちなみにAbortTypeは全てselfに設定してあります。
なぜならこのtreeだとあちこち被る恐れがあります。
失敗を返したら枝ごと停止させる必要がありますね。

unityタッチ移動について

どうもききです。
今回はunityでモバイルアプリを作るのに必要なタッチ操作について解説したいと思います。
例えばシューティングゲームで自機キャラをタッチで移動させたいとき次のような
スクリプトになります。
if (Input.touchCount > 0)
{
touch = Input.GetTouch(0);
Vector2 newVec = new Vector2(touch.position.x,              Screen.height – touch.position.y);
if (newVec.x >= _rect.xMin &&
newVec.x < _rect.xMax && newVec.y >= _rect.yMin &&
newVec.y < _rect.yMax) { x = touch.deltaPosition.x * 0.04f; y = touch.deltaPosition.y * 0.04f; } else { x = 0; y = 0; }

それでは解説していきます。 まず最初に
touch = Input.GetTouch(0);を書かないといけません。 Vector2 newVec = new Vector2(touch.position.x,              Screen.height – touch.position.y); タッチした時の座標を取得します。 指一本しか使わないならこれでオッケーです。 fpsだと攻撃とカメラ操作を同時に行えないのでマルチタッチやフィンガーIDなどが必要になりますがそれ以外ならややこしいスクリプトを書かないほうが安全です。
次にタッチ範囲指定をします。
先にRect型を最初に宣言し
start()で_rect = new Rect(600, 0, 1200, 800);
を書いておきます。
if (newVec.x >= _rect.xMin &&
newVec.x < _rect.xMax && newVec.y >= _rect.yMin &&
newVec.y < _rect.yMax)
タッチした座標xとyがRectの最小値以上か最大値以下であるかを判定します。
以上がタッチ移動の方法になります。

unityエフェクト【アセット】Dreamscapes紹介

どうもききです。
今回は幻想の世界を作成できるパーティクル系のアセットDreamscapesを紹介したいと思います。
価格は55$と若干高めですね。
このアセットでは妖精、日差し、煙、落ち葉、太陽などのエフェクトが入っています。
それぞれ色変更可能です。
またキノコ、岩、木など様々なオブジェクトが入っており幻想の異世界を作成するのに必要な素材が多数入っています。

また四種類の幻想世界のサンプルシーンが入っており好みのシーンを参考にできます。