今日の進捗~キャラに返り血を浴びせる方法~
今回は、
返り血の浴び方!
です!
使うノードはこれ!
このノードは、
指定したデカールを指定したコンポーネントにアタッチするノード
です!
DecalMaterial・・・アタッチするデカール
DecalSize・・・サイズ
AttachToComponent・・・アタッチさせるコンポーネント
AttachPointName・・・アタッチさせるポイント(ボーン名とか)
Location・・・アタッチさせるものからの相対位置??(ちょっとわかんない)
Rotation・・・デカールの回転
LifeSpan・・・デカールの存在時間
とりあえずこれだけ覚えとけばいいんじゃないでしょうか
~実際に使ってみた時の処理~
敵にダメージを与える処理の後に・・・
主役の返り血処理
DecalSizeはランダム性を持たせるために「RandomFloatInRange」を使ってます。
AttachToComponentはアタッチさせたいコンポーネント、Mesh(キャラ)を指定。
Locationはそのまま。
Rotationは、ランダム性を持たせるため「RandomRotator」を使用。
AttachPointNameは、Meshのあらゆるボーンの位置に血のデカールをアタッチしたいので、たくさんボーンの名前が入ってる配列を用意し、ランダムのボーンの位置に返り血を浴びるようにしてあります。
結果こうなります!
しっかり血のデカールがキャラにアタッチされてますね!
ここで1つ補足!
Locationの件ですが・・・
前にも書いた通り
アタッチさせるものからの相対位置??(ちょっとわかんない)
です。
なので、例えば・・・
Qキーを押したときに「X500」にデカールがアタッチされるという処理をすると・・・
こうなります。
ここでいうXとは・・・
赤矢印の方向、Meshからみて左方向のことです。
つまり・・・
Qキーが押されたときに、指定したデカールを、指定したコンポーネントから、X500の位置に、アタッチする
という処理になります!
今回は、キャラ自身に返り血を浴びせたかったので、Locationは「0」のままだったのです!
これで、BloodBorneみたいな返り血処理が組むことが出来ますね!
それではまた!^^ノシ
今日の進捗~近接攻撃がヒットした場所にエフェクトを出す!~(最後に訂正あり)
今回は、
近接攻撃がヒットした場所にエフェクトを出す!
方法を解説します!
※手探りでやったのでまだまだ改善点などがある可能性があります。
まずキャラに武器(スタティックメッシュ)を持たせます。
武器のコリジョンをあらかじめコンストラクションスクリプトで「NoCollision」にする。
次に、Sceneコンポーネントを武器に2つ追加する。
そして、2つのSceneに名前を付ける。「TraceStart」と「TraceEnd」
「TraceStart」を武器に付け根あたりに、
「TraceEnd」を武器の終端あたりに配置します。
次に、BPインターフェースを作成します。
名前を「SpawnEmitter」にします。
「SpawnLocation」という名のインプットピン(Vector型)を追加します。
インターフェースはこれで完了です。
次に、AnimNotifyStateクラスのBPを作成します。
名前を「HitTrace」にします。
作成した「HitTrace」を開き、「ReceivedNotifyTick」関数をオーバーライドします。
オーバーライドした関数に以下の処理を組みます。
自分のキャラをキャストして、そこから武器につけた「TraceStart」「TraceEnd」をゲットしてきます。
「TraceStart」から「TraceEnd」までトレースを飛ばすようにします。
作成した「SpawnEmitter」インターフェースを追加し、トレースがヒットした位置を「SpawnEmitter」の「SpawnLocation」につなぎます。ターゲットはもちろんヒットしたアクター。
リターンノードのReturnValueにチェックをつけるのを忘れずに。
タグ判定を行っているので、タグの中身は当然敵キャラにつけているタグと同じものを指定します。(画像だと「Enemy」にしてあります)
作成した「HitTrace」を、モンタージュに入れます。
ちょうど武器を振っているときにのみ「HitResult」を呼び出してトレース処理を行うようにしてます。
次に、敵キャラの処理です。
サードパーソンキャラを使ってます。
以下の処理を組みます。
「SpawnEmitter」インターフェースが呼び出されて、トレースのヒットした位置からエフェクトが出るようにします。
そして、敵にタグをつけるのを忘れずに!(画像だと「Enemy」です)
これで、武器を振った時にLinetraceが飛ばされ、トレーズがヒットした場所からエフェクトを再生させることが出来ました!
これでやってみましょう!
武器を振った時のみしっかりトレース処理が行われてるのが分かりますね!
しかし、たまにトレースがヒットしてないせいかエフェクトが出ないときがあります。
まだまだ改善の余地ありですね・・・!
それではまた!^^ノシ
※訂正!※
すいません!訂正します!
LineTraceByChannelでトレース処理を行うとありますが、
これだと、たまにトレーズが当たらないときがあり不安定です。
なので、BoxTraceByChannelあるいはSphereTraceByChannelを使いましょう!
これでLineTraceByChannelの時の不安定さがなくなりました!多分!
これでもまた何かあれば教えてください!
それではまた!^^ノシ
サードパーソンキャラを使って一人称視点でプレイする方法
今回は、
サードパーソンキャラを使った一人称視点の実装方法
を紹介します!
これは個人的な事かもですが、例えば
一人称視点のゲームで銃を構えた時、腕がカメラに映るくせにそれ以外の部分、足や胴体が映らないのが気に食わない人間です。
リアルな一人称視点のゲームを作りたい!だから腕だけじゃなく顔以外の体の部分全部表示した状態にしたい!
もしそういう人がいたらこの方法を試してみてはいかがでしょうか。
サードパーソンテンプレートを使います。
サードパーソンキャラBPを開きます。
コンポーネントの中の「CameraBoom」という名のSpringArmは削除し、
Meshの子としてCameraを追加します!
そして、Cameraの詳細パネル「ソケット」項目にある親ソケットをHeadに指定します!
すると上の画像のように変な位置にカメラが来るので、以下の画像のように修正します。
これで、カメラがHeadにアタッチされました。
次に、Cameraの詳細パネル「CameraSetting」項目の「UsePawnControllRotation」にチェックをつけましょう!
チェックをつけないと、カメラが横にしか動かなくなります。やればわかります。
そして、CharacterMovementの詳細パネル「OrientRotationToMovement」のチェックを外し、
クラスのデフォルトの詳細パネル「UseControllRotationYaw」にチェックをつけます。
こうすることで、体がカメラの向きに合わせて動くようになりました!
これをしないと、カメラだけが自由に動いてしまい、首が360度回るというホラーなことになってしまいますw
それではやってみよう!
なかなかいい感じだと思います!
リアルなFPSを作りたいときはなかなかいい方法ではないでしょうか!
それではまた!^^ノシ
誰でもできる血のエフェクトの作り方!
今回は、
血のエフェクトの作成!
について説明します!
使用するもの!
・ParagonのPhaseというキャラのアセット
・サードパーソンテンプレート(つーかなんでもいいかも)
ParagonのPhaseのアセットをプロジェクトに追加しましょう!
追加したら、
コンテンツ>ParagonPhase>FX>Particles>Abilities>Beam>FXの順にたどっていくと、「P_BeamImpactDamage」というパーティクルがあります。
それをコンテンツにコピーしましょう!
コピーしたやつの名前を変更しましょう!
「P_Blood」で!
「P_Blood」を開きましょう!
赤枠で囲ってある奴は削除します!
そして、以下の赤枠で囲った部分を改造します!
~Wisps~
InitialColor
ScaleColor/Life
~WispsChroma~
InitialColor
ScaleColor/Life
赤の濃さはお好みでいいです!
僕はリアル?っぽく黒々とした濃い赤にしてます!
改造が完了したら、サードパーソンキャラのBPに以下の処理を組みます!
Qキーを押すと、キャラの頭から血が噴射するようにします。
それではプレイ!
なかなかいい感じだと思います!
もっと大げさにしたいという人は、スポーン数を増やすとか、Wispsエミッターを複製して複雑感を増すなどというやり方をしてみるといいと思います!
それではまた!^^ノシ
RotateVector
今回は、
RotatorVector
の解説です。
非常に簡単です。
以下の処理を組みます。
アクタークラスのBPを作成。
名前は「BP_RotatorVector」にする
コンストラクションスクリプトで以下の処理を作成
A・・・デフォルト値Xのみ「150」
B・・・デフォルト値Zのみ「90」
二つとも「編集可能」にする。
実際にレベル上に配置し、AとBの数値を変化させてみると・・・
動画のように、
Aの位置に、Bの角度で配置されてるのが分かると思います。
デフォルト値で言うと、
A「X:150」の位置に、B「90度」で配置される。
ということになります。
これはつい最近になって分かりました。
このノードの解説は、
「RotatorBで回転するベクターAの結果を返します」
と表示されるのですが、はっきり言ってよくわからない説明だったので困ってました。
同じような人がいたら、この記事を読んで理解できたらと思います。
それではまた!^^ノシ
メッシュをサークル状に設置する方法!
今回は、
メッシュをサークル状に設置する方法!
をやっていきます!
「BP_RadialArray」という名の、アクタークラスのBPを作成し、コンストラクションスクリプトに以下の処理を組みます。
※これから出てくる変数は全部編集可能にしてください。
メッシュの数を決めるInt型変数「Number Of Meshs」という名の変数を作成。
Number Of Meshsのデフォルト値はとりあえず「8」で。
メッシュの数の上限を、「Clamp(Int)」で決めている。
ForLoopで、Number Of Meshsの数値分処理を繰り返す。この場合だと、8個メッシュが生成される。
「Gap Size」というInt型の変数は、メッシュ同士の隙間の大きさを決めている。
今は、Gap Sizeのデフォルト値を「0」にしておきます。
Number Of Meshsの値をForLoopのLastIndexに与え、
Number Of Meshs+Gap Sizeをします。
この場合だと、
8+0=8 です。
そして、「360」を足し算の結果「8」で割ります。
360÷8=45 です。
ForLoopの値、「Index」と先ほどの「45」を掛けます。この場合だと、
Indexの値は、順番に言うと0~7のはずなので、
0×45=0
1×45=45
2×45=90
3×45=135
4×45=180
5×45=225
6×45=270
7×45=315
となります。
そして、「Radial」という名のFloat型変数を用意し、デフォルト値を「150」にします。
Radial変数をMakeVectorのXにつなぎます。
そして、RotatorVectorのAにRadialの値が入っているVectorピンをつなぎ、
BにMakerotatorのピンをつなぎます。
つまりこれは・・・
~RotatorVector~
A「X:150」の位置に、B「45度」ずつメッシュを配置していく。
ということになります。
Makerotatorの下にあるSelectRotatorは、
AにMakerotatorのピンをつなぎ、
Bはすべて「0」にします。
そして、「Pick A」にBool型の変数をつなぎます。とりま名前は「Orient To Center」で。
つまり、Orient To CenterがTrueになった時は、メッシュが円の中央を向くようになります。
Falseは、メッシュが中央を向かず、すべて同じ方向を向きます。
Float型の変数「YawOffset」はすべてのメッシュの向きを変更するためにあります。
スケール値は、Vector型の変数で好きに変えれるようにします。名前は「MeshScale」で。
RotatorVectorのピンをMakeTransFormのLocationに、
MakerotatorのピンをMakeTransFormのRotationにつなぎます。
最後に、設置したいメッシュを設定します。(スタティックメッシュの追加)
SetMeshで好きにメッシュを変更可能にします。
それではやってみましょう!
Number Of Meshs・・・メッシュの数
Gap Size・・・メッシュ同士の隙間
Radial・・・直径
Orient To Center・・・メッシュがみんな中央を向くかどうか
YawOffset・・・全メッシュのYawの向き調整
MeshScale・・・メッシュの拡大・縮小
SetMesh・・・メッシュの選択
です!
なかなか面白い機能だと思います!僕自身昨日知ったばかりの処理なので、間違いがあるかもしれません。その時は教えてください!
それではまた!^^ノシ
AIに攻撃アニメーションをさせる方法と注意点!
今回は、
AIに攻撃アニメーションをさせる方法!
です!
AIに関して基本的な知識(AIを為に必要なものとか)がある程度わかっているという前提で話します。
以下のような処理を作ったとします。
BT(ビヘイビアツリー)
「オブサーバーを中止」・・・プレイヤーを見つけたら、右側のパトロール行動を即座に中止し、プレイヤーの追跡に切り替えたいので「Lower Priority」にしてある。
攻撃タスク「NearAttack_Task」
敵キャラ「Enemy」のBPにあるカスタムイベント「NearAttack」をここで呼び出しています。
呼び出したら「成功」です。
敵キャラBP
モンタージュを再生するだけです。
最終的にはこうなります。
しっかり近くまできて攻撃アニメーションをしてくれましたね!
さて!ここで、アドバイスです!
攻撃タスクの後に、「Wait」がありますね。
これがある理由は何だと思いますか??
例えば、Waitを使わなかった場合どうなるか?
こうなります。
見て分かったかと思いますが、
「MoveTo」と攻撃タスクが、繰り返しループしている
というのが分かったかと思います。
プレイヤーのところまで行く
↓
攻撃する
という処理なので、
プレイヤーのところにいれば、何度も攻撃タスクが呼ばれてしまうわけです!(個人の解釈)
ループしているので、アニメーションの始まり部分しか再生されませんでした。
なので、繰り返さないために「Wait」タスクを使ったのです!
「Wait」タスクに指定する秒数は、再生するアニメーションの長さによって変えればいいと思います。
例えば、攻撃アニメーションの長さが「3秒」の場合は、「Wait」タスクに3秒の時間指定をしてあげればいいと思います。
以上!AIによる攻撃アニメーションの再生方法でした!
それではまた!^^ノシ