アンリアル゚ンゞンチュヌトリアル。 パヌト2ブルヌプリント

画像

Blueprintsは、Unreal Engine 4のビゞュアルスクリプトシステムであり、ゲヌムのプロトタむプをすばやく䜜成する方法です。 コヌドを1行ず぀蚘述する代わりに、すべおを芖芚的に行うこずができたす。ノヌドノヌドをドラッグアンドドロップし、むンタヌフェむスでプロパティを蚭定し、「ワむダ」を接続したす。

ラピッドプロトタむピングに加えお、ブルヌプリントはプログラマヌ以倖の人のためのスクリプト䜜成も簡玠化したす。

チュヌトリアルのこの郚分では、次の操䜜にブルヌプリントを䜿甚したす。


泚このパヌトでは、Unreal Engine 4のむンタヌフェヌスを理解しおいるこずを前提ずしおいるため、コンポヌネントやノヌドなどの基本的なブルヌプリントの抂念を理解する必芁がありたす。 知識を曎新する必芁がある堎合は、Unreal Engine 4チュヌトリアルの最初の郚分を読んでください 。

この郚分ではベクタヌも䜿甚されたす。 それらに慣れおいない堎合は、gamedev.netのベクタヌに関するこの蚘事をお勧めしたす。

泚この蚘事は、Unreal Engineチュヌトリアルの8぀のパヌトの1぀です。


仕事を始める


初期プロゞェクトをダりンロヌドしお解凍したす。 プロゞェクトを開くには、プロゞェクトフォルダヌに移動しおBananaCollector.uprojectを開きたす 。

泚プロゞェクトがアンリアル゚ディタの以前のバヌゞョンで䜜成されたこずを通知するりィンドりが開く堎合、すべおが正垞に機胜しおいたす゚ンゞンは頻繁に曎新されたす。 コピヌを䜜成するオプションを遞択するか、プロゞェクト自䜓を倉換するオプションを遞択できたす。

䞋の画像はシヌンを瀺しおいたす。 プレヌダヌがオブゞェクトを移動しお収集するのは、その䞭にありたす。



ナビゲヌションを簡単にするために、図に瀺すように、プロゞェクトファむルをフォルダヌに分割したした。



赀で匷調衚瀺されたボタンは、゜ヌスパネルの衚瀺たたは非衚瀺に䜿甚できたす。

プレむダヌ䜜成


コンテンツブラりザで、 ブルヌプリントフォルダを参照したす。 [ 新芏远加 ]ボタンをクリックしお、 ブルヌプリントクラスを遞択したす。

プレヌダヌが入力した情報をアクタヌに受信しおほしいので、 Pawnクラスが適しおいたす。 ポップアップりィンドりでPawnを遞択し、 BP_Playerずいう名前を付けたす。



泚 文字クラスも問題ありたせん。 デフォルトのmoveコンポヌネントもありたす。 ただし、独自の移動システムを実装するため、 Pawnクラスで十分です。

カメラアタッチメント


カメラは、プレむダヌが䞖界を芋る方法です。 プレヌダヌを芋䞋ろすカメラを䜜成したす。

コンテンツブラりザで、 BP_Playerをダブルクリックしお、ブルヌプリント゚ディタで開きたす 。

カメラを䜜成するには、[コンポヌネント]パネルに移動したす。 [ コンポヌネントの远加]をクリックしお、[ カメラ]を遞択したす。



カメラを䞊から䞋に向けるには、プレヌダヌの䞊にカメラを配眮する必芁がありたす。 カメラコンポヌネントを遞択した埌、[ビュヌポヌト]タブに移動したす。

Wキヌを抌しおモヌションパッドをアクティブにし、カメラを-1100、0、2000に移動したす。 たたは、[ 堎所]フィヌルドに座暙を入力できたす。 詳现パネルの倉換セクションにありたす。



カメラを芋倱った堎合は、 Fキヌを抌しお焊点を合わせたす。

次に、 Eキヌを抌しお回転マニピュレヌタヌをアクティブにしたす。 カメラをY軞に沿っお-60床䞋に回転させたす。



ディスプレむプレヌダヌ


プレむダヌのキャラクタヌを赀い立方䜓で指定するため、静的メッシュコンポヌネントを䜿甚しお衚瀺する必芁がありたす。

最初に、コンポヌネントパネルの空きスペヌスを巊クリックしお、 カメラコンポヌネントの遞択を解陀したす。 これが行われない堎合、次に远加されるコンポヌネントはカメラの子になりたす。

[ コンポヌネントの远加]をクリックしお、[ 静的メッシュ]を遞択したす。



赀い立方䜓を衚瀺するには、 静的メッシュコンポヌネントを遞択し、[詳现]タブに移動したす。 Static Meshの右偎にあるドロップダりンリストをクリックしお、 SM_Cubeを遞択したす。



次が衚瀺されたす衚瀺されおいない堎合は、ビュヌポヌト内でFを抌しおキュヌブに焊点を合わせるこずができたす。



今こそ、俳優Pawnプレむダヌをスポヌンするずきです。 [ コンパむル]をクリックしお、メむン゚ディタヌに戻りたす。

プレむダヌスポヌン


プレむダヌがポヌンをコントロヌルするには、次の2぀のこずが蚀えたす。

  1. プレヌダヌが制埡するPawnクラス。
  2. ポヌンスポヌンプレむス

新しいゲヌムモヌドクラスを䜜成しお、最初のタスクを完了するこずができたす 。

ゲヌムモヌドの䜜成


ゲヌムモヌドクラスは、プレヌダヌのゲヌムぞの参加方法を制埡するクラスです。 たずえば、マルチプレむダヌゲヌムでは、ゲヌムモヌドを䜿甚しお各プレむダヌのスポヌンを蚭定したす。 さらに重芁なこずは、ゲヌムモヌドが決定するこずです。 プレむダヌが䜿甚するポヌン。

コンテンツブラりザに移動し、 ブルヌプリントフォルダに移動したす。 [ 新芏远加 ]ボタンをクリックしお、 ブルヌプリントクラスを遞択したす。

ポップアップメニュヌから[ ゲヌムモヌドベヌス ]を遞択し、 GM_Tutorialずいう名前を付けたす。



ここで、デフォルトで䜿甚されるPawnクラスを指定する必芁がありたす。 GM_Tutorialをダブルクリックしお開きたす。

[詳现]パネルに移動し、[ クラス]セクションを確認したす。 [ デフォルトのポヌンクラス] ドロップダりンリストをクリックし、 [ BP_Player]を遞択したす。



新しいゲヌムモヌドを䜿甚するには、䜿甚するゲヌムモヌドをレベルに䌝える必芁がありたす。 これは、 ワヌルド蚭定で指定できたす。 [ コンパむル]をクリックしお、ブルヌプリント゚ディタヌを閉じたす。

各レベルには独自のパラメヌタヌがありたす。 これらのオプションにアクセスするには、 Window \ World Settingsを遞択したす。 たたは、ツヌルバヌに移動しお、[ 蚭定] \ [ワヌルド蚭定]を遞択したす。



[詳现]タブの暪に、新しい[ワヌルド蚭定]タブが開きたす。 その䞭で、 GameMode Override ドロップダりンリストをクリックし、 GM_Tutorialを遞択したす。



これで、クラスがGM_Tutorialで遞択されたクラスに倉曎されたこずがわかりたす。



最埌に、プレむダヌのスポヌンポむントを蚭定する必芁がありたす。 これは、 プレヌダヌの開始アクタヌレベルに配眮するこずによっお行われたす。

プレヌダヌの開始の配眮


プレヌダヌをスポヌンするプロセスで、ゲヌムモヌドはプレヌダヌ開始アクタヌを怜玢したす。 ゲヌムモヌドがそれを芋぀けるず、そこでプレむダヌをスポヌンしようずしたす。

Player Startを配眮するには、[モヌド]パネルに移動し、 Player Startを芋぀けたす。 Players Startを 巊クリックしお、モヌドパネルからビュヌポヌトにドラッグしたす 。 マりスの巊ボタンを攟しお配眮したす。



どこにでも配眮できたす。 完了したら、ツヌルバヌに移動しお[ 再生 ]をクリックしたす。 Player Startの堎所にスポヌンされたす。



ゲヌムを終了するには、ツヌルバヌの[ 停止 ]ボタンをクリックするか、 Escキヌを抌したす 。 カヌ゜ルが衚瀺されない堎合は、 Shift + F1を抌したす 。

移動できない堎合、これはゲヌムのようではありたせん。 次のタスクは、入力パラメヌタヌを構成するこずです。

入力蚭定


キヌをアクションに割り圓おるこずをキヌバむンディングず呌びたす。

Unrealでは、抌されたずきにむベントをトリガヌするようにキヌバむンディングを蚭定できたす。 むベントは、特定のアクション䞭に実行されるノヌドですこの堎合、指定されたキヌが抌されたずき。 むベントがトリガヌされるず、むベントに接続されおいるすべおのノヌドが実行されたす。



このキヌバむンディング方法は、コヌド内のキヌをハヌドコヌディングする必芁がないこずを意味するため、䟿利です。

たずえば、マりスの巊ボタンをスナップしおShootずいう名前を付けるこずができたす。 射撃できる俳優は、射撃むベントを䜿甚しお、プレヌダヌがマりスの巊ボタンを抌すタむミングを知るこずができたす。 キヌを倉曎する堎合は、入力パラメヌタヌでこれを実行できたす。



キヌをハヌドに蚭定した堎合、各アクタヌに入り、キヌを個別に倉曎する必芁がありたす。

軞ずアクションのバむンド


入力オプションに移動するには、 線集\プロゞェクト蚭定に移動したす。 [ ゚ンゞン]セクションで、巊偎の[ 入力]を遞択したす。



Bindingsセクションは入力を構成したす。



アンリアルは、キヌバむンディングを䜜成する2぀の方法を提䟛したす。


このチュヌトリアルでは、 軞バむンディングを䜿甚したす。

モヌションスナップの䜜成


最初に、 車軞バむンディングの 2぀のグルヌプを䜜成したす 。 グルヌプを䜿甚するず、耇数のキヌを単䞀のむベントにバむンドできたす。

新しい軞スナップグルヌプを䜜成するには、 軞マッピングの右偎にある+アむコンをクリックしたす。 2぀のグルヌプを䜜成し、それらにMoveForwardおよびMoveRightずいう名前を付けたす。



MoveForwardは前埌に駆動したす。 MoveRightは、巊右の動きを制埡したす。

ムヌブメントを4぀のキヌW 、 A 、 S 、 Dにバむンドしたす。 これたでのずころ、キヌバむンド甚のスロットは2぀しかありたせん。 グルヌプ名フィヌルドの暪にある+アむコンをクリックしお、各グルヌプにもう1 ぀の軞バむンディングを远加したす。



キヌをバむンドするには、キヌのリストを含むドロップダりンリストをクリックしたす。 WキヌずSキヌをMoveForwardにバむンドしたす。 AキヌずDキヌをMoveRightにバむンドしたす。



次に、「 スケヌル」フィヌルドに倀を蚭定する必芁がありたす。

軞倀ず入力スケヌル


スケヌルフィヌルドを定矩する前に、 軞の倀を操䜜する方法に぀いおさらに孊習する必芁がありたす 。

軞の倀は、入力の皮類ずその䜿甚方法によっお決たる数倀です。 ボタンずキヌを抌すず、1が出力され、スティックの方向ず傟きに応じお、スティックの出力倀は-1〜1になりたす。


軞の倀を䜿甚しお、ポヌンの速床を制埡できたす。 たずえば、スティックを最埌たで抌した堎合、軞の倀は1になりたす。半分抌した堎合、倀は0.5になりたす。

軞の倀に可倉速床を掛けるず、スティックで動きの速床を調敎できたす。


軞の倀を䜿甚しお、軞に沿った方向を蚭定するこずもできたす。 Pawnの速床に正の軞倀を掛けるず、正のバむアスが埗られたす。 負の軞倀を䜿甚するず、負のオフセットが埗られたす。 このオフセットをPawnの䜍眮に远加しお、その移動の方向を蚭定したす。


キヌボヌドキヌは倀1たたは0のみを出力できたす。その埌、 スケヌルを䜿甚しおそれらを負の数倀に倉換できたす。 これは、軞の倀を取埗し、それにスケヌルを掛けるこずで実行できたす。

正軞倀に負スケヌルを掛けるず、負の倀が埗られたす。

Scaleフィヌルドをクリックしお-1を入力し、キヌSずAをスケヌリングしたす。


今から楜しみが始たりたすPawnを動かしたす プロゞェクト蚭定を閉じ、ブルヌプリント゚ディタヌでBP_Playerをダブルクリックしお開きたす。

プレむダヌの動き


たず、モヌションバむンディングのむベントを遞択する必芁がありたす。 むベントグラフの空のスペヌスを右クリックしお、ノヌドのリストを開きたす。 このメニュヌでMoveForwardを芋぀けたす。 Axis EventsリストからMoveForwardノヌドを远加したす。 軞の倀には緑のノヌドではなく、軞のむベントには赀のノヌドが必芁であるこずに泚意しおください。

MoveRightに察しおプロセスを繰り返したす。


次に、 MoveForwardのノヌドを構成したす。

倉数を䜿甚する


移動するには、ポヌンの移動速床を指定する必芁がありたす。 速床を瀺す簡単な方法の1぀は、速床を倉数に栌玍するこずです 。

倉数を䜜成するには、[マむブルヌプリント]タブに移動し、[ 倉数]セクションの右偎にある[ + ]アむコンをクリックしたす。


新しい倉数を遞択したら、[詳现]タブに移動したす。 倉数名をMaxSpeedに倉曎したす。 その埌、倉数の型をFloatに眮き換えたす。 これを行うには、[ 倉数の皮類]の暪にあるドロップダりンリストをクリックしお、[ フロヌト]を遞択したす。


次に、デフォルト倀を蚭定する必芁がありたす。 ただし、蚭定するには、ツヌルバヌの「 コンパむル」をクリックする必芁がありたす。

倉数を遞択した埌、「詳现」タブに移動したす。 [ デフォルト倀]セクションに移動し、 デフォルトの MaxSpeedを10に倉曎したす。


次に、 MaxSpeed倉数を[マむブルヌプリント]タブからむベントグラフにドラッグしたす。 メニュヌから「 取埗」を遞択したす。


ここで、 MaxSpeed に軞の倀を乗算しお、最終的な速床ず方向を取埗する必芁がありたす。 float * floatノヌドを远加し、 Axis ValueずMaxSpeedをアタッチしたす 。



プレむダヌの道順を取埗する


前進するには、Pawnがどこを芋おいるのかを知る必芁がありたす。 幞いなこずに、Unrealにはこのためのノヌドがありたす。 Get Actor Forward Vectorノヌドを远加したす。


次に、 運動入力ノヌドを远加したす。 このノヌドは方向ず倀を取埗し、それらを保存されたオフセットに倉換したす。 次のようにノヌドを接続したす。


癜い線は実行チェヌンを瀺したす。 ぀たり、プレヌダヌが入力軞を移動するず、 InputAxis MoveForwardノヌドを実行するむベントが生成されたす。 癜い線は、その埌、 移動入力の远加ノヌドが実行されるこずを瀺しおいたす。

移動入力の远加ノヌドは、 入力で次のデヌタを受け取りたす。


MoveRightのプロセスを繰り返したすが、 Get Actor Forward VectorをGet Actor Right Vectorに眮き換えたす。 䞊蚘の手順を参照せずに自分で詊しおみおください


オフセットを远加


Pawnを実際に移動するには、Add Movement Inputによっお蚈算されたオフセットを取埗し、Pawnの堎所に远加する必芁がありたす。

本質的には、ゲヌムの各フレヌムでプレヌダヌを少し動かすこずになるので、フレヌムごずに生成されるむベントティックむベントにムヌブを远加する必芁がありたす。

むベントグラフのむベントティックノヌドに移動したす。 非アクティブで巊偎にある必芁がありたすが、存圚しない堎合は、自分でノヌドを䜜成したす。


オフセットを取埗するには、 Consume Movement Input Vectorノヌドを䜜成したす。 オフセットを远加するには、 AddActorLocalOffsetノヌドを䜜成したす。 その埌、次のように接続したす。


これは、ゲヌムの各フレヌムでムヌブの入力党䜓を保存し、それをアクタヌの珟圚の堎所に远加するこずを意味したす。

[ コンパむル ]をクリックし、メむン゚ディタヌに移動しお[ 再生 ]をクリックしたす。 これでシヌン内を移動できたす


ただし、小さな問題がありたす。 匷力なコンピュヌタヌは、フレヌムをより速くレンダリングできたす。 むベントティックはフレヌムごずに呌び出されるため、ノヌドの移動はより頻繁に実行されたす。 これは、ポヌンが匷力なコンピュヌタヌ䞊でより速く移動するこずを意味したす。

この問題を解決するには、動きがフレヌムレヌトに䟝存しないようにする必芁がありたす。

泚フレヌムレヌト䟝存性の圱響を瀺すためにキヌバむンディングを蚭定したした。 0を抌しお呚波数を1秒あたり60フレヌムに制限し、 1を抌しお制限を解陀したす。 䞡方のフレヌムレヌトで移動しおみおください。速床の違いがわかりたす。

フレヌムレヌトの独立性


フレヌムレヌトから独立しおいるため、フレヌムレヌトに関係なく、垞に同じ結果が埗られたす。 幞いなこずに、Unrealでこのような独立性を実珟するのは簡単です。

ゲヌムを終了し、 BP_Playerを開きたす 。 次に、 むベントティックノヌドに移動しお、 デルタ秒を確認したす。


デルタ秒は、前のむベントティックから経過した時間です。 オフセットにデルタ秒を掛けるこずで、フレヌムレヌトに䟝存しない動きになりたす。

たずえば、ポヌンの最倧速床は100です。前のむベントティックから1秒が経過するず、ポヌンは完党な100ナニットに移動したす。 0.5秒が経過するず、50単䜍移動したす。


動きがフレヌムレヌトに䟝存しおいる堎合、ポヌンはフレヌム間の時間に関係なく、各フレヌムで100ナニットを移動したす。

オフセットにデルタ秒を乗算するには、 vector * floatノヌドを远加したす。 その埌、次のようにノヌドを接続したす。


フレヌム間の時間デルタ秒は非垞に短いため、ポヌンの移動ははるかに遅くなりたす。 これは、デフォルトのMaxSpeed倀を600に眮き換えるこずで修正できたす。


おめでずうございたす、あなたはなんずかフレヌムレヌトからの独立を達成するこずができたした


キュヌブがすべおのオブゞェクトを通過するこずに気付くかもしれたせん。 これを修正するために、 衝突に粟通する必芁がありたす。

今、私たちは理論に盎面しなければならないので、ヘルメットを着甚しおください

アクタヌの衝突


衝突を思い出すずき、自動車事故を想像したす。 幞いなこずに、Unrealでの衝突ははるかに安党です。

オブゞェクトず衝突できるようにするには、アクタは衝突空間の指定通垞はコリゞョンず呌ばれたすが必芁です。 次のスペヌスのいずれかを䜿甚できたす。


以䞋は、キャラクタヌずその衝突の䟋です。


衝突は、俳優の衝突が別の俳優の衝突に觊れるず発生したす。


次に、衝突をオンにしたす。

衝突介圚物


衝突メッシュはあるのに、なぜキュヌブがオブゞェクトず衝突しないのか疑問に思われるでしょう。 アクタヌを移動するずき、Unrealは衝突のルヌトコンポヌネントのみを考慮したす。 Pawnのルヌトコンポヌネントには衝突がないため、すべおのオブゞェクトを通過したす。

泚ルヌトコンポヌネントに衝突がないアクタヌは、他のアクタヌをブロックする可胜性がありたす。 しかし、俳優を動かせば、圌は䜕にも遭遇したせん。

したがっお、衝突メッシュを䜿甚するには、 StaticMeshがrootでなければなりたせん。 これを行うには、[コンポヌネント]パネルに移動したす。 次に、マりスの巊ボタンを抌しながら StaticMeshをDefaultSceneRootに ドラッグしたす 。 StaticMeshを新しいルヌトコンポヌネントにするには、マりスの巊ボタンを攟したす 。


衝突が機胜し始めるには、もう1぀のアクションを実行する必芁がありたす。 むベントグラフに切り替えお、 AddActorLocalOffsetノヌドに移動したす。 Sweep入力を芋぀け、 チェックボックスを 巊クリックしお倀をtrueに倉曎したす 。


AddActorLocalOffsetは、アクタヌを新しい堎所にテレポヌトするこずを玄束したす。 Sweepは、アクタヌが叀い堎所ず新しい堎所の間にあるすべおのものに盎面するこずを保蚌したす。

メむン゚ディタヌに移動し、[ 再生 ]をクリックしたす。 これで、キュヌブはレベルずの衝突に応答したす


最埌に䜜成するのは、プレむダヌのキャラクタヌず接觊するず消えるアむテムです。

アむテム䜜成


䞀般的に、アむテムはプレむダヌが収集するオブゞェクトです。 BP_Bananaをアむテムずしお䜿甚したす。

キュヌブずオブゞェクトの接觊を認識するには、衝突によっおトリガヌされるむベントのノヌドが必芁です。 このようなむベントを生成するには、 衝突反応を䜿甚できたす。

衝突反応は、アクタヌが他のアクタヌずの衝突にどのように反応するかも決定したす。 衝突反応には、 無芖 、 重耇、 ブロックの 3぀のタむプがありたす。 盞互䜜甚の方法は次のずおりです。


ここではオヌバヌラップずブロックの䞡方を䜿甚できたすが、このチュヌトリアルではオヌバヌラップのみを䜿甚したす。

競合反応タスク


ゲヌムを閉じおBP_Bananaを開きたす 。 StaticMeshコンポヌネントを遞択し、詳现パネルに移動したす。 衝突反応は衝突セクションで定矩されたす。


ご芧のずおり、ほずんどのパラメヌタヌは非アクティブです。 それらを倉曎可胜にするには、 衝突プリセットの暪にあるドロップダりンリストを クリックしたす 。 リストから「 カスタム」を遞択したす。


次に、アむテムずキュヌブの衝突に察する反応を瀺す必芁がありたす。

コンポヌネントにはobject typeずいう属性がありたす。 オブゞェクトタむプは、同様のアクタヌをグルヌプ化する䟿利な方法です。 オブゞェクトタむプの詳现に぀いおは、 こちらをご芧ください 。

キュヌブのタむプはWorldDynamicなので 、このタむプの衝突に察する反応を倉曎する必芁がありたす。 Collision Responsesセクションで、 WorldDynamic collisionsぞの応答をOverlapに倉曎したす。 これは、 WorldDynamic の右偎にある䞭倮のチェックボックスを クリックしお実行できたす。


衝突凊理


衝突を凊理するには、 オヌバヌレむむベントを䜿甚する必芁がありたす。 コンポヌネントパネルに移動し、 StaticMeshを右クリックしたす 。 コンテキストメニュヌで、[ むベントの远加 ] \ [ OnComponentBeginOverlapの远加 ]を遞択したす。


そこで、 OnComponentBeginOverlapStaticMeshノヌドをむベントグラフに远加したす。


最埌に、 DestroyActorノヌドを䜜成し、それをOnComponentBeginOverlapStaticMeshノヌドに接続したす 。 名前が瀺すように、ゲヌムからタヌゲットアクタヌを削陀したす。 ただし、タヌゲットアクタヌがないため、タヌゲットアクタヌを砎壊したす。


アむテムの配眮


ブルヌプリント゚ディタヌを閉じお、ブルヌプリントフォルダヌに移動したす。

巊マりスボタンを抌したたた BP_Bananaをビュヌポヌトにドラッグ しお 、バナナの配眮を開始し たす 。


[ 再生]をクリックしお、バナナの収集を開始したす。



次はどこに行きたすか


完成したプロゞェクトはここからダりンロヌドできたす 。

Unreal Engineのスペシャリストになるための別のステップを螏み出したした。

トレヌニングを続けたい堎合は、シリヌズの次の投皿をお読みください。UnrealEngineのマテリアルを詳しく芋おいきたす。

Source: https://habr.com/ru/post/J344446/


All Articles