ショットガン!~散弾処理作成方法!~
使用してる物
・TPSテンプレート
・アニメーションスターターパック
・銃のアセット
※すでに銃をアタッチさせていて、ショットガンのアニメーションが出来ているという前提で説明する。
~プレイヤーBP~
・自身のAnimBP参照
プレイヤーのAnimBPをキャストして参照し、変数に格納。
・ショットガン処理
ボタン押した時、1回だけ射撃アニメーションを再生する。ShootEndカスタムイベントが呼び出されると、DoOnceのResetに処理が流れ、もう一度撃つことが可能。
連打してアニメーションが忙しなくならないようにする為にこうしてる。
・射撃モンタージュ
Notify通知
ShootEnd・・・射撃が終了した時に呼び出される通知
・AnimBP
プレイヤー情報を参照。
ShootEnd通知が来た時、プレイヤーBPの「ShootEnd」カスタムイベントを呼び出す。
ショットガンによる散弾処理はライントレースで行ってる。
ForLoopで何発弾を出すか定義する。
11発散弾させたければ、
FirstIndexに「0」
LastIndexに「10」
を入れればいい。
カメラから5000の距離までトレースを飛ばす。
トレースを飛ばす際、赤枠で囲った部分で散弾範囲を定義する。
Min・・・最小値
Max・・・最大値
今回は、
Min・・・‐200
Max・・・200
を入れている。
つまり、撃った時・・・
ワールド座標のXYZの方向に、-200~200の範囲で散弾する。
という事になる。
トレースが何かにヒットした場合、ヒットした場所(ImpactPoint)にエフェクトを出す。
何もヒットしなかったら、トレースの終端距離(TraceEnd)にエフェクトを出す。
という処理だ。
やってみよう!
見事にショットガンの如く散弾処理が行われていた!
ショットガンはかっこいいよねぇ~><///
ゼロ距離で顔面撃った時はもう最高にエクスタs
それではまた!^^ノシ
動的DOF!~リアルタイムぼかし処理~
近くに映ってる物はくっきり
遠くの物はぼやけるような処理の作成。
今回はFPSテンプレートを使用してる。
プレイヤーBP
カメラから5000の距離までトレースを飛ばす。
トレースが何かにヒットした時、ぼかし処理を行う。
ぼかし処理はPostprocessSettingsセット変数で処理する。
この変数は、プレイヤーのカメラコンポーネントからピンを引っ張って検索しないと出てこない。
PostprocessSettings変数をセット後、ピン引っ張り「PostprocessSettingsを作成」を出す。
PostprocessSettingsを作成を選択すると、詳細パネルに大量の設定項目が出てくる。
AsPinにチェックをつけると、チェックをつけた項目がPostprocessSettingsを作成に表示される。
以下の項目のピンを出す。
~Lens|Camera~
・Aperture(F-Stop)
~Lens|DepthOfField~
・MetHod
・FocalDistance
・Aperture(F-Stop)
調べてみたところどうやらこれはカメラに纏わる用語らしい。
絞り値(F)の事らしい。(多分)
専らカメラに詳しくないので、これ以上適当な説明しても混乱させるだけなので興味があれば調べてみるといい。
要は、
Aperture(F-Stop)の数値が大きい程、ぼかし加減が小さくなる。数値が小さい程、ぼかし加減が大きくなる。
というわけだ。
・MetHod
どのようにぼかすかの項目。
・FocalDistance
焦点距離の事。
この数値が大きい程、遠くのものがくっきり映る。
この数値が小さい程、近くのものがくっきり映る。
最終的にこうなったはずだ。
Aperture(F-Stop)・・・1.0
MetHod・・・CircleDOF
FocalDistance・・・トレースを飛ばしてる位置から、トレースがヒットした場所までの距離の差をFloatに変換し繋いでいる。
これで、リアルタイムにぼかし処理ができるようになった!
処理としては、
カメラから飛ばしてるトレースに何かがヒットした場合、
ヒットしたものが近ければ近い程、FocalDistance数値が減少し、遠くのものがぼやけやすくなる。
ヒットしたものが遠ければ遠い程、ぼかし効果は減少していく。
という感じだ。
ちょっと分かりづらいかもだが、近くの物が視界に入った時、遠くのものがぼけていた。
視界に何も入らなければ、遠くのものはくっきり映り、近くのものはぼやけていた。
その証拠に、遠くのものがぼやけた時、目の前で常に持っている銃のぼかし効果が若干薄くなっていたと思う。
ついでに、Aperture(F-Stop)の数値の違いをここで比較しておく。
Aperture(F-Stop)・・・4.0
FocalDistance・・・50
Aperture(F-Stop)・・・1.0
FocalDistance・・・50
これだけの違いが出るのだ。
Aperture(F-Stop)・・・どれぐらいぼかすか
という意味で覚えとくといいだろう。(多分)
これでリアルタイムDOF処理が出来た!
それではまた!^^ノシ
超絶奮闘記~ブラッドボーンの変形攻撃システムパクった!~
やりたい事
・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。
・武器変更中、攻撃不可
この記事と大体同じ所があるので、ある程度説明は省く。
~モンタージュ~
・コンボ攻撃、ディレイコンボモンタージュ
全攻撃アニメーションに以下の通知を入れた。
ComboStartは、コンボ開始時に配置。
TransAttackは、次のコンボに移行する通知「NextCombo⁇」通知の少し後辺りに配置。
ComboStart・・・コンボを開始した時に呼ばれる通知
TransAttack・・・変形攻撃可能な時に呼ばれる通知
・変形攻撃
ChangeWeapon・・・武器のアタッチを入れ替える通知
TransEnd・・・変形・武器変更が終わった通知
~AnimBP~
・武器変更
・コンボ攻撃
・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。
ComboStart通知が来た時、ComboStart変数をTrueにセット。
武器変更処理の前に、ブランチを挟みConditionにComboStartを繋ぐ。
ComboStart
True・・・変形攻撃に移行。
False・・・通常武器変更に移行。
Trueの先には、更にブランチが。
ConditionはTransAttackというBool値の変数になっている。
このTransAttackはTransAttack通知が来た時にTrueにセットされるようになっている。
つまり、
攻撃中、(ComboStart「True」)TransAttack通知(TransAttack「True」)が来た時に、指定のキー(ここではQキー)を押したら変形攻撃に移行する。
という事になっている。
武器の変更は以下参考に。
TransAttackがTrueの時、変形攻撃アニメーションを再生。
TransAttackがFalseの時、通常武器変更アニメーションを再生。
全体のアニメーション(Idle、Walk、Run)を変更する為、トランディションルールBool値をセット。
武器変更した際にモンタージュを変更した武器のものにセット。この辺は最初に載せた記事に書いてあるから参考に。
1つ違うのは、TransAttackをFalseにセットしてある点だ。
武器変更後TransAttackをFalseにセットしないと・・・
TransAttack通知が来た時、TransAttackがTrueに。
↓
その時点でQキー押したら、変形攻撃。そのまま武器を変更。
↓
武器を変更したのはいいが、TransAttackがTrueのままなので、以降TransAttack通知関係無しにいつでも変形攻撃が出せてしまう。
という事になるのだ。
ちなみに、少し前の画像でカスタムイベントを呼び出すための関数があった。
IsTransAttackというカスタムイベントを呼び出している。
IsTransAttackイベントはここにある。
Reset通知の処理とつながっている。
つまり、変形攻撃をした時にIsTransAttackイベントが呼び出され、コンボをリセットする処理に流れる。
ということだ。
・武器変更中、攻撃不可
簡単。
Qキー押した時、TransForm変数をTrueにセット。
攻撃処理に入れる。
攻撃キーが押された時、TransFormがTrueなら攻撃不可。
変形攻撃・武器変更終了時、TransFormをFalseにセット。
~Bool値の設定~
・TransForm
True・・・Qキー押した時
False・・・変形攻撃・武器変更終了時。Reset通知が来た時。
・ComboStart
True・・・コンボ開始時。
False・・・コンボ終了時。或いは変形攻撃終了時。
・TransAttack
True・・・TransAttack通知が来た時。
False・・・ComboStart通知が来た時。変形攻撃・武器変更が終了した時。Reset通知が来た時。
・Trans
True・・・Blade→Swordになった時。
False・・・Sword→Bladeになった時。
最後にBP全体を載せておく。
~武器変更~
1
2
3
4
5
~コンボ攻撃~
1
2
3
4
5
6
7
これまでで一番長い文章になってしまったかもしれない・・・。申し訳ないです。
解説動画にでもすれば良かったかなとも思ってますw
もし分からない所、指摘などあれば遠慮なくどうぞ!
それではまた!^^ノシ
クリックで遊ぼう!~OnClickEvent~
~特定のアクターをクリックした場所に
エフェクトを出す~
・クリックイベントを有効にする
まず、PlayerControllerクラスの作成。
名前を決める。(ここでは「Test」にした)
「Test」を開き、クラスのデフォルトの詳細パネル内の「MouseInterface」項目の中にある赤枠で囲った部分にチェックを入れる。
次に、プロジェクト設定のマップ&モードでPlayerControllerClassを先程作成したPlayerController「Test」にする。
これで、クリックイベントが有効になった。
・クリックイベントを起こすアクターの作成
ActorクラスのBPを作成。
ここではキューブのBPを作成した。名前は好きなように。
以下の処理を組む。
OnClickedイベントを追加。
OnClicked・・・このアクターがクリックされたときに呼ばれるイベント
GetHitResultUnderCursorByChannel
TraceChannel・・・マウスカーソルのトレースチャンネル
Bool値のReturnValue・・・指定したアクターがクリックされたかどうかのBool値
HitResultを分解し、マウスカーソルの位置(Location)をSpawnEmitterAtLocationのLocationにつなぐ。
これで、クリックした場所にエフェクトを出すことが出来た!
・アクターのコリジョン確認
クリックイベントを起こすアクターのコリジョンのトレース応答「Visibility」が「ブロック」になってる事を確認。
先程、GetHitResultUnderCursorByChannelのTraceChannelは「Visibility」だったので、クリックイベントを起こすアクターのトレース応答「Visibility」はブロックにしておく。
・カメラの配置
クリックで遊びたいので、全体を俯瞰して見れる位置にカメラを設置。
カメラ視点でプレイしたいので、カメラの詳細の中の画像の項目を「Player0」にする。
・マウスカーソルの表示
レベルBPに以下の処理を組み、プレイ中マウスカーソルを表示させる。
あとは作成したBPをレベル内に配置し完了!
プレイ!
しっかりとクリックした場所にエフェクトが出てますね!
シンプルなことですが、なかなか面白いと思います!(適当)
それではまた!^^ノシ
奮闘記~武器変更のBP~
前回の
と同じような内容だが、この時の記事では主に武器のアタッチについての解説をした。
今回は、武器を変更するためのBPを紹介する。
Blade→Sword
Sword→Blade
の変更だ。
武器の変更処理。
指定のキー(この場合Qキー)押した時、FlipFlopの「A」に処理が流れ、Blade→Swordに変更するモンタージュを再生する。
その後、ステートマシーンでSword用のアニメーションに切り替える為のトランディションルール用のBool値をTrueにセットしている。
ステートマシン
Bool値をセット後、コンボモンタージュを切り替えるための処理として、
「Select」ノードを使用している。
IndexがTureの場合・・・TrueにセットされているSword用コンボ・ディレイモンタージュが選択される。
IndexがFalseだった場合・・・FalseにセットされてるBlade用コンボ・ディレイモンタージュが選択される。
再生するためのモンタージュをMontage変数に格納。
コンボモンタージュをリセットする時にセットするためのモンタージュを、「MontageSet」変数に格納。
ディレイコンボに移行するときにセットするためのモンタージュを、「DelayMontageSet」変数に格納する。
コンボモンタージュ処理。
モンタージュの再生処理。
モンタージュは変数に格納されてる。
モンタージュをリセットするためのReset通知が来た時に、コンボモンタージュを通常コンボモンタージュにセットしてからリセットする。
MontageSet変数には、
Blade用の通常コンボモンタージュ
Sword用の通常コンボモンタージュ
が、入っている。
ディレイコンボに移行する通知が来た時に、ディレイコンボモンタージュをセットしている。
DelayMontageSet変数には、
Blade用のディレイコンボモンタージュ
Sword用のディレイコンボモンタージュ
が、入っている。
これで、プレイしてみよう。
しっかり武器変更がされているのが分かる!
このTwinBlade(Sword)のアセットを使う際は、ぜひ参考に!
それではまた!^^ノシ
WatchDogs(ウォッチドッグス)のカメラハックシステムをパクろう!
ウォッチドッグスというゲームをご存知でしょうか??
分からなければggって。
今回は、カメラハックシステムをパクってみました!
TPSテンプレートを使用してます。
まず監視カメラの作成。
親クラスはPawnにし、名前は「Camera」で。
(FloatingPawnMovementは要らないです。紛らわしくってすいません。)
レベル内にCameraを配置します。とりあえず4個で。
次に、BPインターフェイスを2つ作成します。
1つは「CameraHack」、2つ目は「PlayerHack」という名前にしました。
プレイヤーBPに以下の処理を組みます。
LineTraceByChannelでトレース処理。
トレースが監視カメラにヒットした時、音が鳴るようにする。
監視カメラかどうかはタグ判定で判定してる。
サウンド再生の前にDoOnceを挟んでる理由は、
トレースがヒットしてる限り音が鳴り続けてしまうので、それを防ぐためにDoOnceを挟んで1回のみ音が鳴るようにしてます。
トレースが監視カメラにヒットしてる時に、左クリックすると「CameraHack」インターフェイスに処理が流れる。
最後に、プレイヤーのMeshのコリジョンのVisibilityを「ブロック」にしといてください。
これで、監視カメラのトレースがMeshにヒットするようになります。
プレイヤーBPはこれでOKです。
「Camera」に以下の処理を。
クラスのデフォルトの詳細パネルで赤枠の部分にチェックをつけます。
これで、Yaw回転とPitch回転のみが行われるようになる。
「1キー」押したとき、ズーム。「2キー」押すとズームアウト。
「1キー」も「2キー」も途中で放したらズームが止まる。
タイムラインの値でSetFieldOfViewの値を変え、ズーム・ズームアウトするようにしてます。
FieldOfViewのデフォルト値は「90」。一番ズームした状態で「5」。
タイムラインの「0秒」の値が「90」、「3秒」の値を「5」にします。
これで、スムーズなズーム処理ができるわけです。
監視カメラを操作可能にするための処理。
SetViewTargetWithBlendノードを使用し、BlendTimeに指定した秒数間カメラ遷移を行い、Possessでこの監視カメラを操作可能にする。
Delayがある理由は、SetViewTargetWithBlendのBlendTimeに関係なく瞬時にカメラが切り替わってしまう為、Delayを挟んでるのです。Delayの秒数はBlendTimeと同じ秒数で。
Possessで監視カメラが操作可能になった時、TrueのBool値をセットします。「Possess」という名の変数です。理由は後程。
トレース処理。
プレイヤーBPとほぼ変わりません。
プレイヤーとほかの監視カメラに対してサウンド処理を行う。
カメラ操作時、プレイヤーあるいはほかの監視カメラに操作変更できるようにインターフェイスを2つ用意する。
「PlayerHack」と「CameraHack」です。
プレイヤーかほかの監視カメラに操作変更したあと、Possess変数をFalseにセット。
さて、なぜこの変数を用意してるか。
ここで使うためです。
監視カメラが操作可能になった時、PossessがTrueになるので、Trueに処理が流れサウンド処理が可能になります。
プレイヤーか他の監視カメラに操作変更した時、PossessがFalseにセットされ、サウンド処理が行われなくなる。
なぜこんなことをしてるかは後程。
とりあえずこれでもう完璧なので、やってみます!
分かりやすくするため、トレースの表示をしてます。
完璧ですね!しっかりいつでも操作切り替えができるようになってます。
そして、プレイヤーのトレースが監視カメラにヒットした時、しっかり音が鳴ってます。
監視カメラを操作してる時も、プレイヤーか他の監視カメラにトレースがヒットした時にしっかり音が鳴ってます。
ちなみに、プレイヤーカメラをちょっと横にずらしてます。
理由は、監視カメラにトレースをヒットさせたい時にプレイヤーが重なってしまって邪魔になってしまうからです。
(監視カメラ映像やUMGに若干の変更・加工がありますが、この辺は好みで)
さて、なぜPossess変数でブランチ処理を行っているのか。
これが無かったらこうなるからです。
分かったでしょうか。
こちらがカメラにトレースをヒットさせてなくても、カメラは常にトレース処理を飛ばしてるので、カメラのトレースに当たったとき音が鳴ってしまっています。
本来は、監視カメラにトレースをヒットさせた時のみ音を鳴らしたいのです。
これではダメなので、監視カメラを操作してないときはトレースによるサウンド処理を行わないようにしていたのです。
これで、ウォッチドッグスのシステムをちょっとパクることが出来ましたね!(・∀・)
それではまた!^^ノシ
奮闘記~武器を回転させながら攻撃するモーションの実装~(前回の続き的な)
前回の記事の続きみたいな感じです。
前回の記事で、
武器をくるくる回転させながら攻撃するモーションがある
と言いました。
これです。
これは、自分で武器を回転させる処理を組んでやっているわけではなくって、
すでに、TwinBlade(Sword)のアセットにデフォルトで入っている
Ik_Hand_r
Ik_Hand_l
に武器をアタッチさせれば、自動で武器が回転してくれるようになっています。
IKボーンにすでに武器のアニメーションが仕込んであるという感じですね。
しかし、Ik_Hand_lとIk_Hand_rに武器をアタッチして武器変更モーションを再生すると、前回の記事の動画のように武器と変更モーションの動きがマッチしません。
そもそも、IKに武器をアタッチすること自体おかしいみたいです。そして、このアセットはIKボーンに武器のアニメーションを仕込んであると言いましたが、それ自体も普通ありえないみたいです。(個人的解釈)
なので、IKボーンに武器を持たせるのではなく「ソケット」にアタッチするのがいいです。(ていうかそれが普通なのかな??)
しかし、ソケットにアタッチすれば前回の記事のように武器変更モーションがうまくいくのですが、今度は「武器をくるくる回転させながら攻撃するモーション」が出来なくなります。
どういうことかというと・・・
ソケットに武器をアタッチした場合
分かりやすくスローにしたのでわかるかと思いますが、
武器が回転していません。(最初に載せた動画と見比べてみると一目瞭然かと)
では、どうすればソケットに武器をアタッチさせつつ、武器を回転させることが出来るのか。
僕はこうしました。
「WeaponRotation」という名のAnimNotifyStateを作成。
ReceivedNotify_Begin
武器をIKボーンにアタッチしてます。
ReceivedNotify_End
武器をソケットに戻します。
「WeaponRotation」をモンタージュに入れる。
ちょうど武器を回転させてから武器を振りかぶり終わるとこまでの範囲に配置した感じです。
これで、
武器を回転させる攻撃モーションに入った時、「WeaponRotation」が呼び出され、武器がIKボーンにアタッチされ、武器が無事回転し、ちょうどモーションが終わった時に、武器がソケットに戻される。
という感じです!
しっかり回転モーションが出来てますね!
もし、このTwinBlade(Sword)のアセットをこれから使う人がいれば、このブログが参考になれば幸いです!
もし分からないことがあればいつでも聞いてください!
それではまた!^^ノシ