UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 見たら消えるオブジェクトを作ってみる

タイトル通りのものを作っていきます。

 

プレイヤーからLine Traceを飛ばし、

その衝突時に特定のオブジェクトが衝突していれば、

オブジェクトを削除するというものです。

 

ミニゲームくらいなら作れそうですね。

www.youtube.com

 

準備

今回はUE4 4.15.0を使用します。

f:id:MozPaca:20170315130426p:plain

 

First Personテンプレートでプロジェクトを作成してください。

 

 

Line Traceを出せるようにしてみる

まずはプレイヤーの処理から書いていきましょう。

First Person BP / Blueprintsから

First Person Characterのブループリントを開いてください。

f:id:MozPaca:20170315131115j:plain

 

移動処理や、弾を発射する処理など書かれていますが、

それとは別に、このような処理を書いてください。

f:id:MozPaca:20170315131335j:plain

Event TickからLine Trace By Channelへ繋いでいます。

LineTraceの開始座標はFirst Person Cameraのワールド座標。

終了座標はFirst Person CameraのGet Forward Vector

Line Traceの長さを乗算したものとFirst Person Cameraの

ワールド座標を加算した値です。

 

このLine Traceはプレイヤーの視線を判定するものです。

Line Trace By Channelを使用していますが、

Sphere Traceでも可能ですので好きな方を使ってください。

 

ここまで処理を書いたら実行して確認してみましょう。

f:id:MozPaca:20170315132250j:plain

このようにカメラからLine Traceが出ていると思います。

もし出ていない場合はLine Trace By Channelの

Draw Debug TypeをFor Durationに変え忘れていないかなどを

確認してみてください。

 

発見用のオブジェクトを作成する

次に発見用のオブジェクトを作成します。

 

コンテンツブラウザから右クリック

Blueprint Classを選択してください。

f:id:MozPaca:20170315141501j:plain

 

親クラスはActorで作成します。

f:id:MozPaca:20170315141618j:plain

 

作成できたらファイル名をBP_Targetとしましょう。

f:id:MozPaca:20170315141641j:plain

 

BP_Targetを開いてください。

 

左上のAdd Componentから

Box Collisionを追加します。

f:id:MozPaca:20170315141809j:plain

 

同じようにAdd ComponentからCubeを追加します。

f:id:MozPaca:20170315141818j:plain

Cubeでなくても構いません。

Static MeshやSkeletal Meshでも大丈夫です。

今回は見た目を気にせず分かりやすさ重視でCubeを選択しました。

Cube以外を使う場合にはBox CollisionもMeshの形に合わせて変更してください。

 

Cubeの大きさに合わせてBox Collisionの大きさを変更します。

f:id:MozPaca:20170315141826j:plain

 

Collision Typeの変更をします。

CubeをNo Collisionにしてください。

Box Collisionは下記の画像のようにしてください。

Line Traceの判定をとるためにVisiblityが

Blockであれば他は自由に変更して大丈夫です。

f:id:MozPaca:20170315142257j:plain

 

Material Functionを作成する

消滅時に発生するエフェクトをマテリアルで表現しましょう。

細かい処理などは過去記事を見てください。

mozpaca.hatenablog.com

 

コンテンツブラウザから右クリック

Material Functionを選択してください。

f:id:MozPaca:20170315150432j:plain

 

ファイル名をMFunc_Dissolveとします。

f:id:MozPaca:20170315150556j:plain

 

過去記事にも同じものを挙げていますが、

解像度が低くて見づらいという声が多かったため、

解像度の高いものを用意しました。

 

Appear Timerの値に合わせてNoiseの形に透過していく処理です。

全体図の方

f:id:MozPaca:20170315150631j:plain

 

全体図じゃない方

f:id:MozPaca:20170315163424j:plain

f:id:MozPaca:20170315163435j:plain

f:id:MozPaca:20170315163444j:plain

 

Noiseのパラメータはこのようになっています。

f:id:MozPaca:20170315150740j:plain

 

マテリアルに処理を書く

Cube MeshにはBasic Shape Materialという

マテリアルがDefaultで適応されています。

先ほど作成したMFunc_Dissolveを

このBasic Shape Materialに適応しましょう。

 

Engine Contents / Basic Shapeから

Basic Shape Materialを開いてください。

f:id:MozPaca:20170315151114j:plain

 

終結果のパラメータのBlend Modeを
Maskedに変更します。

f:id:MozPaca:20170315153232j:plain

 

Material Function CallでMFunc_Dissolveを呼び出し、

Emissive ColorとOpacity Maskを最終結果に繋ぎます。

f:id:MozPaca:20170315153118j:plain

 

Material Instanceを作成する

コンテンツブラウザに戻り、

Basic Shape Materiaを右クリックし、

Create Material Instanceをクリックしてください。

f:id:MozPaca:20170315153343j:plain

 

Material Instanceを作成しました。

(色が違うのはスクショを撮り忘れて後で撮ったからです)

f:id:MozPaca:20170315153526j:plain

 

作成したMaterial Instanceを開いてください。

パラメータを画像のように変更します。

f:id:MozPaca:20170315153734j:plain

 

BP_TargetのCube Meshのマテリアルを作成した
Material Instanceに変更しましょう。

f:id:MozPaca:20170315153914j:plain

 

発見用オブジェクトの処理を書く

BP_Targetの編集を行っていきます。

BP_Targetを開いてください。

f:id:MozPaca:20170315154239j:plain

 

Construction Scriptにこのような処理を書きます。

CubeコンポーネントのマテリアルをDynamic Material Instanceとして

作成し、DMIという変数に格納しています。

f:id:MozPaca:20170315154311j:plain

 

イベントグラフの処理です。

Custom Eventを作成し、Meltという名前を付けます。

作成したCustom EventからTime Lineへ繋ぎ、

DMIのパラメータを変更する処理を書きます。

Time Lineが終了したらDestroy Actorに繋ぎ、

BP_Targetを削除します。

f:id:MozPaca:20170315154432j:plain

 

Time Lineの中身です。

0秒時に値を1

2秒時に値を0

とする直線のTime Lineです。

f:id:MozPaca:20170315154632j:plain

 

これでBP_Targetの処理はすべて書き終わりました。

 

Clear Widgetを作成する

なくても困らないですが、

動画で出していたクリア時のWidgetを作成します。

 

コンテンツブラウザから右クリック

User Interface / Widget Blueprintを選択してください。

f:id:MozPaca:20170315155534j:plain

 

名前をWidget_GameClearとします。

f:id:MozPaca:20170315155612j:plain

 

Widget_GameClearを開いてください。

 

Textを一つ配置し、適当な文字とサイズにします。

f:id:MozPaca:20170315155707j:plain

 

これだけ

 

プレイヤーの処理を追加する

最後の工程です。

プレイヤーに処理を書きます。

First Person Characterを開いてください。

f:id:MozPaca:20170315131115j:plain

 

Line Traceの処理を書いた箇所に

下記の画像のように処理を追加してください。

Line TraceのDuration TypeをNoneに戻すのも忘れずに。

f:id:MozPaca:20170315155041j:plain

レベル上にBP_Targetが残っているかの判定を行い、

残っていればLine Traceを飛ばし、Line Traceの衝突した

ActorがBP_TargetであればBP_TargetのMelt関数を呼び出します。

BP_Targetがレベル上に残っていなければ、

Widget_Clearを描画します。

 

これで処理はすべて書きました。

実行して確認してみてください。

ページ上部の動画のようになります。