DestroyComponentの注意点!~なぜDestroyComponentを使ってるのに何も破壊されないのか??~

今回DestroyComponentで躓いた点があったので紹介する。

 

free-gamer.hatenablog.com

前回の記事とほぼ同じな為、ある程度説明を省く。

 

「落ちてる武器を拾って、プレイヤーにアタッチする」という処理なのだが、

 

落ちてる武器を拾った時

落ちてる武器と同じ武器をプレイヤーの指定したソケットにスポーン

スポーンした武器を、プレイヤーの指定したソケットにアタッチ

落ちてた武器を破壊(削除)

 

といった処理だ。

 

~処理~

f:id:Free_Gamer:20180717215209p:plain

武器を取得時、指定したソケットに武器をスポーン。

f:id:Free_Gamer:20180717215429p:plain

取得した武器のSphereコリジョンを破壊。落ちてた武器を破壊。

f:id:Free_Gamer:20180717215551p:plain

※変数「Rifle」と「WeaponMaster」と「Sphere」については先に載せた記事を参考ください。

 

これでプレイすると・・・

youtu.be

 

落ちてる武器は破壊されたものの、背中にアタッチされた武器はSphereコリジョンが残ったまま。

先程の画像の処理で確かにRifle(武器)に、コンポーネントとして追加してあるSphereコリジョン(オーバーラップコリジョンコンポーネント)を、破壊(Destroy)したはずなのに。

 

実はこの処理だと破壊されないのだ。

どういう事かと言うと・・・

 

DestroyComponent・・・そのアクター自身のコンポーネントを破壊するノード。

 

ここで言うアクター自身というのは、「操作キャラ」、つまり「サードパーソンキャラ」の事になる。

このサードパーソンキャラのコンポーネントには、Sphereコリジョンなんてものは存在しない。

f:id:Free_Gamer:20180717221236p:plain

「え??でもAttachtoComponentでRifle追加してるんでしょ??それで追加したRifleのコンポーネントSphereコリジョンがあるんだから、普通に存在してるんじゃねえの??」と思うかもだが。それは違う。

 

AttachtoComponentは、ただ単に「キャラに追従させてる」だけ。もっと簡単な言い方をすれば「くっつけてる」だけ。

だから、コンポーネントに追加」してるわけではないのだ。

 

つまり、DestroyComponentでサードパーソンキャラのSphereコリジョンコンポーネントを破壊しようとした所で、そもそもサードパーソンキャラにSphereコリジョンコンポーネントなんてものは無いから、何も変化が無かったのだ。

 

じゃあどうすればいいか??

 

WeaponMasterのイベントグラフに、Sphereコリジョンを破壊する為のカスタムイベントを追加すればいいのだ。

f:id:Free_Gamer:20180717221914p:plain

「DestroyComponent」という名のカスタムイベントを追加。(名前が一緒でややこしいかもだがw)

 

武器をアタッチさせた後に、「DestroyComponent」カスタムイベントを呼び出す。

f:id:Free_Gamer:20180717222250p:plain

 

これでプレイしてみよう!

youtu.be

 

武器を拾った後、アタッチされた武器のコンポーネントであるSphereコリジョンがしっかり破壊されていた!

 

今回はDestroyComponentの躓きポイントを紹介した。

もし同じようなことで悩んでいるならこの記事を読んでほしい。

 

それではまた!^^ノシ

アウトラインを表示する方法(金のかかるやり方だが)

今回は、アウトライン表示方法をやるのだが、

残念ながら僕はマテリアルはめっきりよく分かんない為、

アセットの力を借りることにした。

 

f:id:Free_Gamer:20180716000022p:plain

「OutLiner」という名のマテリアルアセットだ。

 

このアセットは確か2000円ぐらいだったはず。(16$ぐらいだったかな??)

このアセットを使って、アウトライン表示処理を実装しよう!

 

PostProcessVolumeの設定

PostProcessVolumeの詳細欄に画像のような項目がある。

Arrayの隣にある「+」をクリックすると、適用したいアウトラインマテリアルを設定できる。

f:id:Free_Gamer:20180716002227p:plain

アウトラインマテリアルは3つまである。(多分)

f:id:Free_Gamer:20180716002402p:plain

今回は、赤枠で囲った奴の一番左にあるやつを使う。

 

アクタークラスのBPを作成

コンポーネントにCubeを追加しただけのシンプルなアクター。

以下の処理を組む。

f:id:Free_Gamer:20180716001030p:plain

SetCustomDepthStencilValueにあるValueの数値は何を示しているかというと・・・

先程PostProcessVolumeに設定したマテリアルを見てみよう。

f:id:Free_Gamer:20180716002719p:plain

f:id:Free_Gamer:20180716002735p:plain

赤枠で囲ってある部分の数値の事だ。

つまり、Valueに「1」を入れた場合「OutLineClolor(S1)」に設定されてある色(画像だとオレンジ色)がアウトラインの色として設定される。

「2」は、ちょっと濃いオレンジ。

「3」は、青色。

というように、数字によってアウトラインの色が変えられるようだ。

 

プロジェクト設定

エンジン→RenderingのPostprocessingという項目にある赤枠で囲った部分を変更する。

恐らくデフォルトでは「Enabled」になってるはずなので、これを「EnabledWithStencil」に変更する。

f:id:Free_Gamer:20180716001219p:plain

 

これでプレイしてみよう!

youtu.be

 

しっかりアウトラインの表示がされていた!

このアセットがあれば、わざわざ自分でマテリアルを自作しなくても済むだろう!

 

それではまた!^^ノシ

 

落ちてるアイテムをピックアップ(取得)する処理!

1日ブログすっぽかした者です。(´・ω・)

 

今回は、シューティングゲームを作るという体で行くため、「落ちている『武器』を拾う」というシチュエーションにする。

 

やりたい事!

・武器を拾うためのBPの作成

・拾う武器の作成

・武器に近づいたら、武器名をスクリーンに表示

・武器の近くで指定したキーを押したら、キャラに装備

その他諸々・・・

 

※TPSテンプレート使用。アニメーションスターターパック使用。

 

・プレイヤーに武器をアタッチする為のソケットを追加

f:id:Free_Gamer:20180713201900p:plain

f:id:Free_Gamer:20180713201920p:plain

「Hand_r(右手)」にソケットを追加。

名前は任意で。(画像では「WeaponSocket」にした。)

 

・プレイヤーBP

f:id:Free_Gamer:20180713211835p:plain

カスタムイベント(PickUp)が呼び出された時、武器を指定したソケットに追加。

 

カスタムイベントの詳細。

f:id:Free_Gamer:20180713213012p:plain

 

・武器を拾うためのBPの作成

ActorクラスのBPを作成。

名前は任意で。(画像では「WeaponPickUp_Master」にしてある。)

以下のように、コンポーネントを追加。

f:id:Free_Gamer:20180713202301p:plain

f:id:Free_Gamer:20180713202422p:plain

Weapon・・・武器。スケルタルメッシュ。(スタティックメッシュでもいい)

Sphere・・・オーバーラップコリジョン

Widget・・・ウイジェットを表示するためのコンポーネント

 

これで、武器を拾うためのBPの作成は終了。

 

・武器に近づいたら、武器名をスクリーンに表示

武器に近づいたときに、武器の上に武器名を表示させる為のウイジェットを作成する。

武器名は何でも良い。(僕はライフルのアセットがあるので「Rifle」と明記)

f:id:Free_Gamer:20180713203209p:plain

階層にTextBlockを追加。

TextBlockに任意の武器名を入力。

フォントサイズは要調整。

f:id:Free_Gamer:20180713203315p:plain

 

・拾う武器の作成

僕のとこには「ライフル」と「ショットガン」のアセットがあるので、

2つの武器BPを作成する。

「Rifle」と「ShootGun」という名のBPだ。

2つともアクタークラスのBP。

作成した武器BPを開き、クラス設定を選択。

詳細パネルの親クラスを、作成した「WeaponPickUp_Master」に変更。

f:id:Free_Gamer:20180713204032p:plain

f:id:Free_Gamer:20180713204235p:plain

こうすることで、作成した「WeaponPickUp_Master」BPの機能(コンポーネント、BP)を継承(引き継ぐ)する事が可能。

 

例えば、武器BPを5個作成するとして、5個の武器BPすべてに「WeaponPickUp_Master」と全く同じ処理を1個づつ一々組まなきゃいけないのは面倒だし非効率。

 

ましてや、もし5個全ての武器BPの処理を変更する!ってなった時に、1個づつ同じように処理を変更するのはとても過酷。

これが10個、50個、100個となったら・・・個数は大げさかもだが、考えただけで全身の血の気が引く。

f:id:Free_Gamer:20180713205830p:plain

 

だったら、元となるMasterBP(WeaponPickUp_master)を作成して5個全ての武器BPに継承させれば、たとえ5個全ての武器BPの処理を変更するとなった時も、元となるMasterBPさえ変更すれば、後の5個全ての武器BPも変更されるという事になるのだ。

f:id:Free_Gamer:20180713205843p:plain

分かりづらいイラストで申し訳ない。だが、今の説明がしっかり理解できたなら幸いだ。

 

武器BPのWidgetコンポーネントを設定しよう。

f:id:Free_Gamer:20180713210414p:plain

Space・・・Screenにする。

WidgetClass・・・作成したウィジェットを指定。

 

後は、ウィジェットを表示させたい位置に調整する。

f:id:Free_Gamer:20180713210718p:plain

 

 

・武器の近くで指定したキーを押したら、キャラに装備

「WeaponPickUp_Master」に以下の処理を組む。

 

オーバーラップコリジョンにプレイヤーがオーバーラップしたら、ウィジェットを表示。武器を取得する為のキー入力を受け取るためEnableInputを実行。

オーバーラップコリジョンから出て行ったら、ウィジェットを非表示。そして、キー入力も無効にする。(DisableInput)

f:id:Free_Gamer:20180713210857p:plain

取得する為のキーが押されたら、プレイヤーBPのカスタムイベント(PickUp)を呼び出し、オーバーラップコリジョンを破壊する。

f:id:Free_Gamer:20180713210912p:plain

 

これでプレイしてみよう!

youtu.be

 

プレイヤーの接近による武器名の表示。武器のアタッチ。ピックアップ処理。

やりたいことが全部出来ていた!あっぱれ!><///

 

今回は、ピックアップ処理ともう1つクラスの継承の方法も知れたので、一石二鳥!

 

それではまた!^^ノシ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IK!~ずれてる手の位置を修正!~

とあるお方から教えてもらいました。本当に感謝です。

 

さて、今回シューティングもどきを作ってる時の事、非常に困ったことがあり・・・

f:id:Free_Gamer:20180711214934p:plain

明らかに左手の位置が合ってないのだ。

これでは違和感バリバリなので、これを修正する方法を紹介する。

 

TwoBoneIKを使おう!

f:id:Free_Gamer:20180711215041p:plain

EffectorLocation・・・修正するボーンの位置。

JointTargetLocation・・・今回は使わない。

 

Animグラフ

f:id:Free_Gamer:20180711223949p:plain

f:id:Free_Gamer:20180711224215p:plain

 

Hand_R

IKBone・・・実際に動かすボーンを指定

f:id:Free_Gamer:20180711224830p:plain

Hand_L

f:id:Free_Gamer:20180711224812p:plain

 

あとは、EffectorLocationの値を変えて手の位置を調整すればOK!

youtu.be

EffectorLocationの値を変えれば、ちゃんと右手の位置が変わっていた!

右手を動かせば、それに連なるボーン(肘、肩)もしっかり動いていた!

これで修正が楽になるというわけだ!

 

というか今回右手しか修正していなかったね・・・

 

でもIKの簡単な使い方が分かったんじゃあないだろうか。

自分自身IKは全然詳しくないから、興味があれば自分で色々調べてみるといい。

 

それではまた!^^ノシ

 

ショットガン!~散弾処理作成方法!~

使用してる物

・TPSテンプレート

・アニメーションスターターパック

・銃のアセット

 

※すでに銃をアタッチさせていて、ショットガンのアニメーションが出来ているという前提で説明する。

 

~プレイヤーBP~

・自身のAnimBP参照

プレイヤーのAnimBPをキャストして参照し、変数に格納。

f:id:Free_Gamer:20180710215435p:plain

・ショットガン処理

f:id:Free_Gamer:20180710215559p:plain

ボタン押した時、1回だけ射撃アニメーションを再生する。ShootEndカスタムイベントが呼び出されると、DoOnceのResetに処理が流れ、もう一度撃つことが可能。

連打してアニメーションが忙しなくならないようにする為にこうしてる。

f:id:Free_Gamer:20180710215637p:plain

・射撃モンタージュ

f:id:Free_Gamer:20180710220004p:plain

Notify通知

ShootEnd・・・射撃が終了した時に呼び出される通知

・AnimBP

プレイヤー情報を参照。

f:id:Free_Gamer:20180710220254p:plain

ShootEnd通知が来た時、プレイヤーBPの「ShootEnd」カスタムイベントを呼び出す。

f:id:Free_Gamer:20180710220207p:plain

 

ショットガンによる散弾処理はライントレースで行ってる。

ForLoopで何発弾を出すか定義する。

11発散弾させたければ、

 

FirstIndexに「0」

LastIndexに「10」

 

を入れればいい。

カメラから5000の距離までトレースを飛ばす。

トレースを飛ばす際、赤枠で囲った部分で散弾範囲を定義する。

f:id:Free_Gamer:20180710221051p:plain

Min・・・最小値

Max・・・最大値

f:id:Free_Gamer:20180710220950p:plain

今回は、

Min・・・‐200

Max・・・200

を入れている。

つまり、撃った時・・・

 

ワールド座標のXYZの方向に、-200~200の範囲で散弾する。

 

という事になる。

f:id:Free_Gamer:20180710221537p:plain

トレースが何かにヒットした場合、ヒットした場所(ImpactPoint)にエフェクトを出す。

何もヒットしなかったら、トレースの終端距離(TraceEnd)にエフェクトを出す。

という処理だ。

f:id:Free_Gamer:20180710221949p:plain

 

やってみよう!

youtu.be

 

見事にショットガンの如く散弾処理が行われていた!

ショットガンはかっこいいよねぇ~><///

ゼロ距離で顔面撃った時はもう最高にエクスタs

 

それではまた!^^ノシ

動的DOF!~リアルタイムぼかし処理~

近くに映ってる物はくっきり

遠くの物はぼやけるような処理の作成。

 

今回はFPSテンプレートを使用してる。

 

プレイヤーBP

f:id:Free_Gamer:20180709220924p:plain

カメラから5000の距離までトレースを飛ばす。

f:id:Free_Gamer:20180709221007p:plain

トレースが何かにヒットした時、ぼかし処理を行う。

f:id:Free_Gamer:20180709221123p:plain

 

ぼかし処理はPostprocessSettingsセット変数で処理する。

この変数は、プレイヤーのカメラコンポーネントからピンを引っ張って検索しないと出てこない。

PostprocessSettings変数をセット後、ピン引っ張り「PostprocessSettingsを作成」を出す。

f:id:Free_Gamer:20180709221915p:plain

 

PostprocessSettingsを作成を選択すると、詳細パネルに大量の設定項目が出てくる。

AsPinにチェックをつけると、チェックをつけた項目がPostprocessSettingsを作成に表示される。

f:id:Free_Gamer:20180709222401p:plain

以下の項目のピンを出す。

~Lens|Camera~

・Aperture(F-Stop)

~Lens|DepthOfField~

・MetHod

・FocalDistance

 

・Aperture(F-Stop)

調べてみたところどうやらこれはカメラに纏わる用語らしい。

絞り値(F)の事らしい。(多分)

専らカメラに詳しくないので、これ以上適当な説明しても混乱させるだけなので興味があれば調べてみるといい。

要は、

Aperture(F-Stop)の数値が大きい程、ぼかし加減が小さくなる。数値が小さい程、ぼかし加減が大きくなる。

というわけだ。

 

・MetHod

どのようにぼかすかの項目。

 

・FocalDistance

焦点距離の事。

この数値が大きい程、遠くのものがくっきり映る。

この数値が小さい程、近くのものがくっきり映る。

 

最終的にこうなったはずだ。

f:id:Free_Gamer:20180709224426p:plain

Aperture(F-Stop)・・・1.0

MetHod・・・CircleDOF

FocalDistance・・・トレースを飛ばしてる位置から、トレースがヒットした場所までの距離の差をFloatに変換し繋いでいる。

f:id:Free_Gamer:20180709224849p:plain

 

これで、リアルタイムにぼかし処理ができるようになった!

 

処理としては、

 

カメラから飛ばしてるトレースに何かがヒットした場合、

ヒットしたものが近ければ近い程、FocalDistance数値が減少し、遠くのものがぼやけやすくなる。

ヒットしたものが遠ければ遠い程、ぼかし効果は減少していく。

 

という感じだ。

youtu.be

 

ちょっと分かりづらいかもだが、近くの物が視界に入った時、遠くのものがぼけていた。

視界に何も入らなければ、遠くのものはくっきり映り、近くのものはぼやけていた。

 

その証拠に、遠くのものがぼやけた時、目の前で常に持っている銃のぼかし効果が若干薄くなっていたと思う。

 

ついでに、Aperture(F-Stop)の数値の違いをここで比較しておく。

 

Aperture(F-Stop)・・・4.0

FocalDistance・・・50

f:id:Free_Gamer:20180709230452p:plain

Aperture(F-Stop)・・・1.0

FocalDistance・・・50

f:id:Free_Gamer:20180709230609p:plain

これだけの違いが出るのだ。

 

Aperture(F-Stop)・・・どれぐらいぼかすか

 

という意味で覚えとくといいだろう。(多分)

 

これでリアルタイムDOF処理が出来た!

 

それではまた!^^ノシ

 

 

 

超絶奮闘記~ブラッドボーンの変形攻撃システムパクった!~

やりたい事

・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。

・武器変更中、攻撃不可

 

free-gamer.hatenablog.com

この記事と大体同じ所があるので、ある程度説明は省く。

 

~モンタージュ~

・コンボ攻撃、ディレイコンボモンタージュ

全攻撃アニメーションに以下の通知を入れた。

ComboStartは、コンボ開始時に配置。

TransAttackは、次のコンボに移行する通知「NextCombo⁇」通知の少し後辺りに配置。

f:id:Free_Gamer:20180709010911p:plain

ComboStart・・・コンボを開始した時に呼ばれる通知

TransAttack・・・変形攻撃可能な時に呼ばれる通知

 

・変形攻撃

f:id:Free_Gamer:20180709011420p:plain

ChangeWeapon・・・武器のアタッチを入れ替える通知

TransEnd・・・変形・武器変更が終わった通知

 

~AnimBP~

・武器変更

f:id:Free_Gamer:20180709011836p:plain

・コンボ攻撃

f:id:Free_Gamer:20180709011932p:plain

 

・攻撃中、指定のタイミングで指定のキーを押すと変形攻撃。それ以外は通常武器変更に移行。

 

ComboStart通知が来た時、ComboStart変数をTrueにセット。

f:id:Free_Gamer:20180709012149p:plain

武器変更処理の前に、ブランチを挟みConditionにComboStartを繋ぐ。

f:id:Free_Gamer:20180709012501p:plain

ComboStart

True・・・変形攻撃に移行。

False・・・通常武器変更に移行。

f:id:Free_Gamer:20180709012835p:plain

Trueの先には、更にブランチが。

ConditionはTransAttackというBool値の変数になっている。

このTransAttackはTransAttack通知が来た時にTrueにセットされるようになっている。

f:id:Free_Gamer:20180709013614p:plain

つまり、

攻撃中、(ComboStart「True」)TransAttack通知(TransAttack「True」)が来た時に、指定のキー(ここではQキー)を押したら変形攻撃に移行する。

という事になっている。

 

武器の変更は以下参考に。

TransAttackがTrueの時、変形攻撃アニメーションを再生。

TransAttackがFalseの時、通常武器変更アニメーションを再生。

全体のアニメーション(Idle、Walk、Run)を変更する為、トランディションルールBool値をセット。

f:id:Free_Gamer:20180709013834p:plain

f:id:Free_Gamer:20180709014223p:plain

 

武器変更した際にモンタージュを変更した武器のものにセット。この辺は最初に載せた記事に書いてあるから参考に。

1つ違うのは、TransAttackをFalseにセットしてある点だ。

f:id:Free_Gamer:20180709014018p:plain

武器変更後TransAttackをFalseにセットしないと・・・

 

TransAttack通知が来た時、TransAttackがTrueに。

その時点でQキー押したら、変形攻撃。そのまま武器を変更。

武器を変更したのはいいが、TransAttackがTrueのままなので、以降TransAttack通知関係無しにいつでも変形攻撃が出せてしまう。

 

という事になるのだ。

 

ちなみに、少し前の画像でカスタムイベントを呼び出すための関数があった。

f:id:Free_Gamer:20180709015530p:plain

IsTransAttackというカスタムイベントを呼び出している。

IsTransAttackイベントはここにある。

f:id:Free_Gamer:20180709020000p:plain

Reset通知の処理とつながっている。

つまり、変形攻撃をした時にIsTransAttackイベントが呼び出され、コンボをリセットする処理に流れる。

ということだ。

f:id:Free_Gamer:20180709020836p:plain

 

・武器変更中、攻撃不可

簡単。

Qキー押した時、TransForm変数をTrueにセット。

f:id:Free_Gamer:20180709012501p:plain

攻撃処理に入れる。

攻撃キーが押された時、TransFormがTrueなら攻撃不可。

f:id:Free_Gamer:20180709021323p:plain

変形攻撃・武器変更終了時、TransFormをFalseにセット。

f:id:Free_Gamer:20180709021516p:plain

 

~Bool値の設定~

・TransForm

True・・・Qキー押した時

False・・・変形攻撃・武器変更終了時。Reset通知が来た時。

・ComboStart

True・・・コンボ開始時。

False・・・コンボ終了時。或いは変形攻撃終了時。

・TransAttack

True・・・TransAttack通知が来た時。

False・・・ComboStart通知が来た時。変形攻撃・武器変更が終了した時。Reset通知が来た時。

・Trans

True・・・Blade→Swordになった時。

False・・・Sword→Bladeになった時。

 

最後にBP全体を載せておく。

~武器変更~

f:id:Free_Gamer:20180709023029p:plain

f:id:Free_Gamer:20180709022528p:plain

f:id:Free_Gamer:20180709022603p:plain

f:id:Free_Gamer:20180709022618p:plain

f:id:Free_Gamer:20180709022635p:plain

f:id:Free_Gamer:20180709022649p:plain

 

~コンボ攻撃~

f:id:Free_Gamer:20180709023043p:plain

f:id:Free_Gamer:20180709023106p:plain

f:id:Free_Gamer:20180709023117p:plain

f:id:Free_Gamer:20180709023350p:plain

f:id:Free_Gamer:20180709023201p:plain

f:id:Free_Gamer:20180709023230p:plain

f:id:Free_Gamer:20180709023247p:plain

f:id:Free_Gamer:20180709023307p:plain

 

youtu.be

 

これまでで一番長い文章になってしまったかもしれない・・・。申し訳ないです。

解説動画にでもすれば良かったかなとも思ってますw

 

もし分からない所、指摘などあれば遠慮なくどうぞ!

 

それではまた!^^ノシ