スポンサーサイト

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

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

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

今回はサウンド周りです。ただ再生してるだけですけど。

まず、音素材自体を持ってこなければいけません。魔王魂とか煉獄庭園とか色々ありますが、今回は楽(?)さを考えて、UnrealEngine4内で入手します。

といってもまともに見たアセットは少ないので、カウチナイトとランドスケープのプロジェクトから持ってきました。

カウチナイトからはFootStepやらStab_Toneなどを、ランドスケープからはBGMを持ってきました。

再生方法としてはPlaySound関連でやります。効果音にはPlaySoundAtLocationを、BGMにはAudioComponentを使えばなんかそれっぽくなります。

効果音用にSceneComponentを作りました。ブループリントクラス作成から作れます。単純に関数を呼ぶと、そのコンポーネントに設定した音が、その位置から鳴るようになります。
PlayOneShot.png

BGMはそれ用にアクターを作りました。AudioComponentをつけて、ランドスケープのBGMを設定しているだけです。もし、ステージごとに切り替えたいなら列挙体などで曲を指定できるようにして、任意のタイミングでその列挙体に応じた音素材に切り替わるようにするとよいでしょう。
おそらくゲームモードでも問題はありません。
BP_BGM.png

基本的にはこの2つがすべてです。

ライフルや弾にコンポーネントをくっつけて、それぞれ発射時と着弾時に音がなるように設定します。
BP_Rifle_20161222022651654.png
発射時に音がなる
BP_Shot.png

あとは歩いてるとき用のもつけましょう。スピードを取得したいので、プレイヤーに実装します。
isSpeed.png

ステージがゲームで、移動中に鳴り続けます。スピードが一定以上なら移動中扱いにします。
移動

移動や攻撃はアニメーションがあるならアニメーション通知をつけて、通知イベントごとにならせたい音を決めると楽です。今回は移動がいっぱいで設定がめんどうなのと、攻撃アニメーションがないため、こんな感じに実装しました。

今回はこんな感じ。個人的には歩きの音は別のがいいかなって思いますが、音がつくだけでだいぶゲームっぽい感じを受けると思います。

UE4ゲーム制作入門二十一日目

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

死亡アニメーションをロボとボスにつけました。ロボの方は物理アセットアニメーションを用意しました。

ロボのスケルタルメッシュを右クリックして物理アセットを作成とアタッチします。

物理アセットを始めに開くとコリジョンがどれもこれも重なって大変なことになってたので、消したり小さくした結果がこれです。基本的にはBodiesで拡縮と位置を調整しました。
ちなみにこれはそんなに調整がうまくいってませんが、ロボットなのでぶっ壊れ方が多少派手でも問題ないだろうと思いそのままGOしました。
物理アセット1
物理アセット2

ボスの方は、単純なアニメーションです。アニメーションの名前から察するに気絶状態ですが、いい感じに倒した感がでたので使いました。
単純に死亡状態を列挙体に追加して、Trueなら死亡アニメーションに遷移するように変えました。
アニメーションボス

きちんと死んだときに遷移するようステータスを更新します。
ボスブループリント

できたのがこれです。

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

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

今回は弾がヒットしたときのパーティクルです。

使うマテリアルの一つは便利なStarterContentに入ってるm_flare01です。もう一つはマテリアル関数で作ります。
こんな感じに組むと円形になります。
Mat_FuncCircle2.png

そんでもってこうやってやると、円形の輪郭がとれます。
M_Hit.png

すみません。中身は殆ど理解できてないので丸パクリです。ここから引用させていただきました。
http://qiita.com/nkdtr/items/e6cf18160a5f3ff2fd18

次はこのマテリアルを使って、パーティクルをいじります。
左のパーティクルはこんな感じのぽわって感じのやつです。単純に色を青っぽくして開始時に一回だけパーティクルを生成します。
P_Hit1.png

方法としては、まずはRateを0にします。1秒間に生成するパーティクルの数を表しています。今回のは発生時一回のみなので時間単位での生成は必要ないので0に設定しています。
P_HitRate.png

こちらはBurstを設定しています。これは生成からTime秒後にCount分のパーティクルを生成する設定です。
P_HitBurst.png

SizeByLifeです。時間ごとに大きさを変えてます。InitialColorもそうですが、このへんは好みとかで変えてください。
P_HitSize.png

LifeTimeは0.2秒です。ヒット時なんで即消します。
P_HitLifeTime.png

二つ目。あの円形輪郭のマテリアルです。ぶっちゃけ、パラメータとしてはサイズを一回り一つ目のパーティクルよりも大きくしているだけなので割愛します。この辺も割りと好みの問題です。
P_HitRing.png

3つ目です。なんかまわりにぱーっと広がってるやつです。これはRequiredでのScreenAlignmentをPSAVelocityにします。これをセットすると進行方向に伸びる(らしい)
P_HitThird.png

Sphereで球体状の中で生成するようにします。Locationのなかにあります。
P_HitShpere.png

基本的には公式のリファレンスなどで学びましょう。あと、UnityのShurikenもパラメータの値は参考にできるのでそちらも見てみるといいと思います。
今回はこのブログの記事を一部参考にしました。
http://cascade-memo-atm.hatenadiary.jp/entry/2016/05/30/152650

理解していたらもっと詳しく説明したかったのですが、割りとなんとなくでやっているためこのくらいが限界です。ちなみにきちんと動いてるとこうなります。

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

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

shiratori00

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

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

この人とブロともになる

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