スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

UE4ゲーム制作入門十九日目

一人UE4ゲーム制作入門アドベントカレンダー十九日目です。

昨日の続きで、ボスAIの中身です。

攻撃開始時
攻撃開始タスクから呼び出してるAnimStartでは、更にBP_EnemyBossのSetAnimState関数を呼び出して、引数を渡しています。
AnimStart.png

さらに、呼ばれている関数ですが、アニメーションブループリントのアニメーション管理用の変数にセットしています。この変数が変わるとアニメーションが切り替わるように設定しています。
ANimStartBoss.png

アニメーションの通知イベントごとにAI側で作った関数を呼んでます。アニメーションスタートだけ今のとこやることがないのと、別のに変えてしまったので放置してる状態です。
ABP_Bossのイベント関連

AttackStartから行きます。AIの関数を呼んでいますが、これもBP_EnemyBossの関数を呼んでいるだけなので、そっちは飛ばします。
BP_EnemyBossの方では、攻撃用のコリジョンを有効にしたりしてます。遠距離攻撃ではBP_Weaponのほうで更に処理を行いますが、未実装です。
AttackStart関数

AttackEndでは攻撃判定やフラグを消したり折ったりしています。
AttackEnd関数1
AttackEnd関数2

次はAnimEndです。こちらは多少変なことになってますが、開始時にエラーメッセージを吐かれたので、変数に設定ができていなくてアクセスできないならば、もう一回コントロールしているBP_EnemyBossをキャストして取得してやり直しています。
その後に、今のアニメーションの状態が待機モーションであるなら攻撃開始フラグを、そうでないなら攻撃をしていたはずなので、次のアニメーションに待機モーションへと移行し、次の攻撃をセットするフラグを立てています。
AnimENd.png

UE4ゲーム制作入門十八日目

一人UE4ゲーム制作入門アドベントカレンダー十八日目です。

今日はボスのAIを組みました。

全体はこんな感じです。
ボスのビヘイビアツリー

BTTask_CheckFlg
このタスクではAIコントローラに作った2つのフラグをブラックボードに反映しています。
それぞれのフラグの説明ですが、
isAttack : 攻撃モーションに移れるかどうか
isNextAct : 次のアクションを決める処理に移れるかどうか
になっています。これらが別れてる理由はあるのですが、今日は実装できてないので平日のどこかで説明すると思います。

フラグの管理がなんだか面倒になってる理由ですが、アニメーションの開始終了イベントとかをAIで受けて、フラグを反映させる方法として、これとブラックボードの値を直接AI側から変える方法を思いついたのですが、個人的に初期化以外でブラックボードの値をビヘイビアツリーからいじりたくなかったのでこうなりました。
BTTask_CheckFlg.png

セレクターの下にいきます。こっちは次の行動を決めたり攻撃モーションへの移行を示してます。

左側から行きましょう。こちらは次の行動を決めるツリーなため、isNextActが真のときにのみ実行します。
ビヘイビアツリー2

BTTask_GetLengthToTarget
プレイヤーとの距離をブラックボードのLength変数に設定しています
BTTask_GetLengthToTarget.png

BTTask_SetNextAct
次の行動を決めています。攻撃前には一回しか決める必要がないため、次の行動が決まったらAIコントローラのisNextActにfalseを入れています。
これで、攻撃が終わるまでは実行されなくなります。
行動の振り分けですが、遠距離攻撃と近距離攻撃で分けています。距離に関しては未調整ですが、とりあえず400以下なら近距離攻撃、それより大きければ遠距離攻撃となってます。
BTTask_SetNextAct.png

攻撃側のツリーに移りましょう。といってもこっちはほとんど中身が同じなので、説明事項はほとんどないです。下手したらタスクを別々に作る必要ないです。試す時間が(遊んでたせいで)なかったので、平日のうちの課題としておきます。
ビヘイビアツリー3

こちらのツリーは攻撃可能を表すフラグが立っていたら実行します。

BTTask_LookAtPlayer
確か前にも説明しましたが、プレイヤーのほうにRotationを向けるだけです。

先程のisNextActで設定したボスの次の行動に応じて攻撃アニメーションを実行させるタスクに移ります。

攻撃系のタスク
AIコントローラにある、指定した状態のアニメーションを実行する関数を呼んでいるだけです。それぞれ与えてる引数が違うだけです。これ多分タスク統一できるので後で直します。
BTTask_AttackNear.png

時間がやばいので細かい説明は明日の記事に回します。後半になって息切れ気味になって本当に申し訳ないです・・・。

UE4ゲーム制作入門十七日目

一人UE4ゲーム制作入門アドベントカレンダー十七日目です。

今回は簡単なパーティクルとボス部屋の改良です。名古ゲ部忘年会前にもっとすすめるつもりでしたが、寝てました。

ボス部屋ですが、適当にジオメトリで組み直して、屋内にしました。ライティングとかが微妙にひどいのでそのうちなんとかします。

ボス部屋改良

オーラぽいパーティクルをつくりました。かなりちゃっちいのは許してください。

カスケード一部
こんな感じです。マテリアルは1つ目がM_Sparkで、2つ目はM_Flare01ですが、ライティングしか使ってない気がするので必要ない気もします。
パラメータの説明は時間の都合上割愛します。今年のUnrealEngine4アドベントカレンダーの他の方が説明されてたりするので、そちらを見ていただくのがいいです!
http://unlimited-games.hatenablog.com/entry/2016/12/11/225112

ボスの足元に置くと、いい感じになります。
パーティクル

UE4ゲーム制作入門十六日目

一人UE4ゲーム制作入門アドベントカレンダー十六日目です。

モンスターハウス的な感じのを作りました。なんか無駄に面倒な処理をしてる気がするので、もうちょっとスッキリさせてやりたい気はします。

敵ブループリントクラスを多少変える


死亡時に敵生成兼管理アクターを持っていた場合、死亡したときの処理を走らせて消えるようにしました。
BP_Enemy1.png

BP_Roboにはダメージ処理と死亡時処理をしていなかったことに気づいたので追加しました。
BP_Robo.png

ブループリントインターフェースを用意する
モンスターハウスが起動したり終わったりしたときに、異なるブループリントクラスすべてが何かしらの処理を行えるように、ブループリントインターフェースを用意します。
このブループリントインターフェースは宣言だけを持っていて、継承しているアクターそれぞれがイベントの中身を実装して、メッセージを受け取ったらそれを実行することになります。
これのいいところは、アクターの継承は必ず親が一つしか選べませんが、インターフェースは複数持たせられるので、必要なインターフェースを持って、色々な処理を異なるアクターで同時に実行できるようになることだと思っています。違ったらおしえてください。
BPI_Trap.png

モンスターハウスの起動と管理アクターを作成する
BP_SwitchActorという名前のブループリントクラスを作成します。Acotrクラスが親です。
塞ぐ出入り口を塞げる程度の大きさのBoxコリジョンとスタティックメッシュを用意します。イベントグラフはこんな感じ。Boxコリジョンを通り抜けた瞬間モンスターハウスを起動します。配列には今のところスポーンポイントをセットして、インターフェースのトラップ起動時のメッセージをそれぞれに送っています。
そして、敵が全滅したときなどにEnd時のメッセージが飛んで来るので、モンスターハウスをクリアしたことを、終わったときにイベントを実行したいアクターすべてに終了時イベントを知らせるメッセージを送っています。
BP_SwitchActor_eventGraph.png

スポーンポイントを作成する
このアクターはSwitchからモンスターハウス開始メッセージが飛んできたときに、生成するポイントに指定した敵を生成します。
ホントはロボとクマ両方出そうと思ったのですが、AIの都合上クマはエラーしか吐かないのでやめました。
BP_SpawnLocation_EventGraph.png

生成処理です。敵が生成に成功するたびに生成した数を増やします。これがゼロになったときに、Switchに全滅したことを知らせます。
BP_SpawnLocation_SpawnFunc.png

敵が死んだときには数を減らしていきます。ゼロ以下ならSwitchにメッセージを飛ばしています。
BP_SpawnLocation_DestroyFunc.png

完成

全部作成できたら、ステージ内に配置して、やるとだいたいこんな感じになると思います。

UE4ゲーム制作入門十五日目

一人UE4ゲーム制作入門アドベントカレンダー十五日目です。

Touchが来たことに加えて、お仕事の雲行きが怪しくなってきたので割りと進捗が少ないかもしれません・・・。
それでも完走はしますよ!(完成するとは言ってない

昨日作った案山子状態のボスを実装していきたかったですが、時間が気づいたら日をまたいでいて、中身を全然考えてなかったのでガワだけ用意するだけです。

とりあえずこんな感じで、行動を3つ用意しました。アニメーションがおもったよりなかったので、こんな感じになってしまいました。
遷移に関しては、思いつかなかったので状態管理用の列挙型を用意して、攻撃終わったらIdleにもどって、Idleが終わったらプレイヤーとの位置で色々変えていこうかなって思っています。できるかはわかりません。現時点では2つで試してうまく行って、ゲームが出来上がったら対応します。
ABP_Boss.png

各アニメーションには通知を入れています。この通知イベントで当たり判定やらを操作しようと画策しています。
アニメーション通知

通知イベントで実行するための関数をBP_BossAIを作って、全部用意しました。この中に当たり判定の操作などを用意します。
AI.png

スケルタルメッシュの右手にソケットを作って、当たり判定用のBP_Weaponというブループリントクラスを作り、BeginPlayで作成+ソケットにアタッチしています。できたら、武器のメッシュだったりエフェクトをここに追加して色々できたらなぁって妄想してます。
あとは、無敵時間をつくれるようにinvicibleStart、End関数を作っています。
BP_Boss_201612150038121d1.png

急いで書いたので多分漏れもありますが、明日の僕がなんとかすることでしょう。
プロフィール

shiratori00

Author:shiratori00
フリーでソフトウェア開発者してます

最新記事
最新コメント
月別アーカイブ
カテゴリ
Twitter on FC2
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。