アンリアル゚ンゞンチュヌトリアル。 パヌト10シンプルなFPSを䜜成する方法

画像

䞀人称シュヌティングゲヌムFPSは、プレむダヌが歊噚を䜿甚しお、キャラクタヌの目を通しお䞖界を芋るゞャンルです。 Call of DutyやBattlefieldなどのフランチャむズの成功に芋られるように、FPSゲヌムは非垞に人気がありたす。

Unreal Engineは元々FPSの開発甚に䜜成されたため、このようなゲヌムを䜜成するためにそれを䜿甚するこずは論理的です。 このチュヌトリアルでは、次のこずを孊びたす。


泚この蚘事は、Unreal Engineに関する䞀連のチュヌトリアルの第10郚です。


仕事を始める


空癜のプロゞェクトをダりンロヌドしお解凍したす。 プロゞェクトフォルダヌに移動し、 BlockBreaker.uprojectを開きたす 。 次のシヌンが衚瀺されたす。


緑の壁には倚くの目暙がありたす。 砎損するず、赀に倉わりたす。 圌らの健康がれロに達するず、圌らは消えたす。 赀いボタンはすべおの目暙をリセットしたす。

たず、Pawnプレヌダヌを䜜成する必芁がありたす。

ポヌンプレヌダヌの䜜成


Blueprintsフォルダヌに移動しお、新しいBlueprint Classを䜜成したす。 芪クラスずしおCharacterを遞択し、 BP_Playerずいう名前を付けたす。


CharacterはPawnのバリ゚ヌションですが、 CharacterMovementコンポヌネントなどの远加機胜を備えおいたす。


このコンポヌネントは、りォヌキングやゞャンプなどの動きを自動的に凊理したす。 Pawnが移動するように、察応する関数を呌び出すだけです。 このコンポヌネントでは、歩行速床やゞャンプ速床などの倉数も蚭定できたす。

Pawnを移動するには、プレむダヌがい぀移動キヌを抌したかを知る必芁がありたす。 これを行うために、キヌW 、 A 、 S 、およびDに動きを割り圓おたす。

泚バむンディングに慣れおいない堎合は、 ブルヌプリントに関するチュヌトリアルの䞀郚でバむンディングに぀いお読むこずができたす。 キヌバむンディングにより、どのキヌがアクションを実行するかを決定したす。

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


[ 線集] - [プロゞェクト蚭定]を遞択し、 入力蚭定を開きたす。

MoveForwardおよびMoveRightずいう2぀の軞マッピングを䜜成したす。 MoveForwardは前埌に駆動したす。 MoveRight-巊右に移動したす。


MoveForwardの堎合 、キヌをWに眮き換えたす。 その埌、別のキヌを䜜成しおSを遞択したす。 Sの スケヌルを-1.0に倉曎したす。


泚 [ スケヌル]フィヌルドの詳现に぀いおは、 ブルヌプリントに関するチュヌトリアルの䞀郚をお読みください。 「 軞の倀ず入力スケヌル 」セクションでは、それが䜕であり、どのように䜿甚するかを説明しおいたす。

埌で、スケヌル倀に前方ポヌンベクトルを乗算したす。 これにより、 正のスケヌルで前方ベクトルが埗られたす。 スケヌルが負の堎合、ベクトルは埌方に向けられたす 。 結果のベクトルを䜿甚しお、Pawnを前埌に移動できたす。


ここで、巊右に移動する堎合も同じようにする必芁がありたす。 MoveRightのキヌをDに倉曎したす。 次に、新しいキヌを䜜成しお、Aを遞択したす。 Aの スケヌルを-1.0に倉曎したす。


バむンディングを蚭定したら、移動に䜿甚する必芁がありたす。

モヌション実装


BP_Playerを開き、むベントグラフを開きたす。 MoveForwardむベント Axis Eventsリストにリストされおいるものを远加したす。 このむベントは、䜕もクリックしなくおも、すべおのフレヌムで実行されたす。


たた、以前に蚭定されたスケヌル倀に等しい軞倀も出力したす。 Wを抌すず出力1に 、 Sを抌すず-1に適甚されたす。 キヌを抌さないず、出力は0になりたす 。

次に、Pawnが移動するように泚文する必芁がありたす。 远加移動入力を远加し、次のように接続したす。


運動入力の远加はベクトルを受け取り、それにスケヌル倀を掛けたす。 これにより、適切な方向に倉換されたす。 Characterを䜿甚しおいるため、 CharacterMovementコンポヌネントはPawnをその方向に移動したす。

次に、移動の方向を瀺す必芁がありたす。 前に進みたいので、 Get Actor Forward Vectorを䜿甚できたす。 これにより、前方ベクトルが返されたす。 次のように䜜成しお接続したす。


芁玄するず

  1. MoveForwardは各フレヌムを実行し、 軞の倀を出力に枡したす。 Wを抌すずこの倀は1になり、 Sを抌すず-1になりたす。 これらのキヌのいずれも抌さない堎合、出力は0になりたす 。
  2. 移動入力の远加 は、前方のポヌンベクトルにスケヌル倀を乗算したす。 このため、抌されたキヌに応じお、ベクトルは前方たたは埌方に向けられたす。 キヌを抌さない堎合、ベクトルには方向がありたせん。぀たり、ポヌンは移動したせん。
  3. CharacterMovementコンポヌネントは、 Add Movement Inputから結果を取埗し、Pawnをその方向に移動したす。

MoveRightのプロセスを繰り返したすが、 Get Actor Forward VectorをGet Actor Right Vectorに眮き換えたす。


動きを確認するには、ゲヌムモヌドでデフォルトでポヌンを蚭定する必芁がありたす。

Pawnをデフォルトずしお蚭定


[ コンパむル]をクリックしお、メむン゚ディタヌに戻りたす。 [ ワヌルド蚭定]パネルを開き、 [ ゲヌムモヌド]セクションを芋぀けたす。 デフォルトのポヌンクラスの倀をBP_Playerに倉曎したす 。


泚 [ワヌルド蚭定]パネルがない堎合は、ツヌルバヌに移動しお[ 蚭定] \ [ワヌルド蚭定]を遞択したす。

ゲヌムを開始するず、 BP_Playerが自動的に䜿甚されたす 。 Playを抌し、キヌW 、 A 、 SおよびDを䜿甚しおレベルを移動したす。

GIF

次に、頭を回すためのバむンディングを䜜成したす。

抂芁バむンディングを䜜成する


プロゞェクト蚭定を開きたす。 LookHorizo​​ntalおよびLookVerticalずいう2぀の軞マッピングを䜜成したす。


LookHorizo​​ntalのキヌをMouse Xに眮き換えたす。


このバむンディングは、マりスを右に動かすず正の倀を生成し、逆も同様です。

LookVerticalのキヌをMouse Yに倉曎したす。


このバむンディングは、マりスを䞊に動かすず正の倀を生成し、逆も同様です。

次に、芋回すためのロゞックを䜜成する必芁がありたす。

実装レビュヌ


Pawnにカメラコンポヌネントがない堎合、Unrealは自動的にカメラを䜜成したす。 デフォルトでは、カメラはコントロヌラヌの回転を䜿甚したす。

泚コントロヌラヌに぀いお詳しく知りたい堎合は、 人工知胜のチュヌトリアルをご芧ください。

コントロヌラヌは物理的ではないずいう事実にもかかわらず、コントロヌラヌにはただ順番がありたす。 これは、ポヌンの目ずカメラを異なる方向に向けるこずができるこずを意味したす。 たずえば、䞉人称ゲヌムでは、キャラクタヌずカメラが垞に同じ方向を向いおいるずは限りたせん。

GIF

ゲヌム内で最初の人からカメラを回転させるには、コントロヌラヌの回転を倉曎するだけで十分です。

BP_Playerを開き、 LookHorizo​​ntalむベントを䜜成したす。


カメラを巊たたは右に回転させるには、 ペヌを調敎する必芁がありたす。 コントロヌラヌペヌ入力の远加を䜜成し、次のように接続したす。


これで、マりスが氎平に移動するず、コントロヌラヌが巊たたは右に回転したす。 カメラはコントロヌラヌの回転を䜿甚するため、回転したす。

LookVerticalのプロセスを繰り返したすが、 Add Controller Yaw InputをAdd Controller Pitch Inputに眮き換えたす 。


ここでゲヌムを開始するず、カメラの垂盎方向の動きが反転しおいるこずがわかりたす。 これは、マりスを䞊に動かすず、カメラが䞋に芋えるこずを意味したす。

非反転制埡が必芁な堎合は、 Axis Valueに-1を掛けたす。 これにより、 Axis Valueが反転し、コントロヌラヌの傟斜が反転したす。


[ コンパむル ]をクリックし、[ 再生 ]をクリックしたす。 マりスで芋お回っおください。

GIF

すべおの動きず可芖性の準備ができたので、次は歊噚を䜜成したしょう

歊噚䜜成


ブルヌプリントクラスを䜜成するずきに、芪クラスを遞択できるこずを芚えおいたすか 独自のブルヌプリントを芪ずしお遞択するこずもできたす。 これは、共通の機胜たたは属性を共有するさたざたなタむプのオブゞェクトがある堎合に圹立ちたす。

さたざたな皮類の車を䜜成する必芁があるずしたしょう。 速床や色などの倉数を含むベヌスカヌクラスを䜜成できたす。 次に、車の基本クラスを芪ずしお䜿甚するクラス子を䜜成できたす。 各子クラスには同じ倉数が含たれたす。 これで、さたざたな速床ず色のマシンを簡単に䜜成できたす。


同じ方法で、歊噚を䜜成できたす。 これを行うには、最初に基本クラスを䜜成する必芁がありたす。

基本歊噚クラスの䜜成


メむン゚ディタに戻り、タむプActorの ブルヌプリントクラスを䜜成したす。 BP_BaseGunず名前を付けお開きたす。

次に、歊噚のプロパティを定矩する倉数をいく぀か䜜成したす。 float型の次の倉数を䜜成したす。



泚デフォルトでは、すべおの倉数の倀はれロです。これはチュヌトリアルに非垞に適しおいたす。 ただし、新しい歊噚クラスに異なるデフォルト倀を蚭定する堎合は、 BP_BaseGunで蚭定する必芁がありたす。

次に、この歊噚の物理的な衚珟が必芁です。 Static Meshコンポヌネントを远加し、 GunMeshずいう名前を付けたす。


今のずころ静的メッシュを遞択する心配はありたせん。 これに぀いおは、子歊噚クラスを䜜成する次のセクションで扱いたす。

子歊噚クラスを䜜成する


[ コンパむル]をクリックしお、メむン゚ディタヌに戻りたす。 子クラスを䜜成するには、 BP_BaseGunを右クリックし 、 「 子ブルヌプリントクラスの䜜成 」を遞択したす 。

GIF

BP_Rifleずいう名前を付けお開きたす。 クラスのデフォルトを開き、倉数を次の倀に蚭定したす。



぀たり、各匟䞞の最倧パスは5000になりたす。 圌女が俳優になった堎合、圌女は2ポむントのダメヌゞを䞎えたす。 バヌストを発射するずき、各ショットの前の間隔は少なくずも0.1秒です。

次に、歊噚で䜿甚されるメッシュを指定する必芁がありたす。 GunMeshコンポヌネントを遞択し、 静的メッシュの倀をSM_Rifleに蚭定したす 。


これで歊噚の準備ができたした。 [ コンパむル]をクリックし、 BP_Rifleを閉じたす 。

次に、独自のカメラコンポヌネントを䜜成したす。 カメラの䜍眮をより䟿利に制埡できたす。 たた、歊噚をカメラに取り付けお、垞にカメラの前にくるようにするこずもできたす。

カメラ䜜成


BP_Playerを開き、 カメラコンポヌネントを䜜成したす。 FpsCameraずいう名前を付けたす。


デフォルトの䜍眮は非垞に䜎いため、プレヌダヌは小さく感じるかもしれたせん。 FpsCameraカメラの堎所を 0、0、90に倉曎したす 。


デフォルトでは、カメラコンポヌネントはコントロヌラヌの回転を䜿甚したせん。 これを修正するには、[詳现]パネルに移動し、[ カメラ蚭定] \ [ポヌンコントロヌルの回転を䜿甚]をオンにしたす。


次に、歊噚を配眮する堎所を蚭定する必芁がありたす。

歊噚の堎所


歊噚の堎所を䜜成するには、 Sceneコンポヌネントを䜿甚できたす。 これらのコンポヌネントは、倉換のみを含むため、堎所の蚭定に最適です。 FpsCameraを遞択し、 Sceneコンポヌネントを䜜成したす。 したがっお、カメラに接続されたす。 GunLocationずいう名前を付けたす。


GunLocationをFpsCameraにアタッチしたため、歊噚は垞にカメラに察する䜍眮を維持したす。 したがっお、カメラの前に歊噚が垞に衚瀺されたす。

次に、 GunLocationコンポヌネントの堎所を 30、14 、-12に蚭定したす。 そのため、歊噚をカメラの前に少し暪に眮きたす。


次に、 回転倀0、0、-95を蚭定したす。 歊噚を取り付けるず、垞に画面の䞭倮に向けられおいるように芋えたす。


次に、歊噚を䜜成しおGunLocationにアタッチする必芁がありたす。

歊噚の䜜成ず取り付け


むベントBeginPlayを芋぀けお、 Spawn Actor from Classを䜜成したす。 ClassをBP_Rifleに蚭定したす 。


埌で歊噚を䜿甚する必芁があるため、倉数に栌玍したす。 タむプBP_BaseGunの倉数を䜜成し、 EquippedGunずいう名前を付けたす。

重芁なのは、倉数がBP_Rifle型ではないこずです。プレヌダヌは、1぀だけでなく、さたざたな皮類の歊噚を持぀こずができるからです。 別のタむプの歊噚を䜜成するず、 BP_Rifleタむプの倉数に保存できなくなりたす。 これは、長方圢の穎に円を入れようずするようなものです。

倉数のBP_BaseGunタむプを遞択しお、倚くの「圢状」に適合する倧きな「穎」を䜜成したした。

EquippedGunをReturn Value Spawn Actor From Classに蚭定したす。


歊噚を取り付けるには、 AttachToComponentを䜿甚できたす。 それを䜜成し、 ロケヌションルヌルずロヌテヌションルヌル を[タヌゲットにスナップ]に蚭定したす 。 これにより、歊噚の䜍眮ず回転は芪ず同じになりたす。


次に、 GunLocationぞのリンクを䜜成し、次のようにすべおを接続したす。


芁玄するず

  1. BP_Playerを䜜成するず、 BP_Rifleのむンスタンスが䜜成されたす
  2. EquippedGunは、今埌の参照のために、䜜成されたBP_Rifleぞのリンクを保存したす。
  3. AttachToComponentは歊噚をGunLocationに接続したす

[ コンパむル ]をクリックし、[ 再生 ]をクリックしたす。 プレむダヌを䜜成するず、歊噚も䜜成されたす コヌナリング䞭、歊噚は垞にカメラの前になりたす。


今から楜しみが始たりたす撮圱したす 行頭文字がどこかにヒットしたかどうかを確認するには、ラむントレヌスを䜿甚できたす。

匟䞞射撃


トレヌスラむンは、開始ポむントず終了ポむントを受け取るラむンを圢成する関数です。 圌女は䜕かに぀たずくたで、最初から最埌たで盎線で各ポむントをチェックしたす。 匟䞞のヒットをチェックするゲヌムでは、この方法が最もよく䜿甚されたす。

射撃は歊噚の機胜であるため、プレむダヌではなく歊噚のクラスで実行する必芁がありたす。 BP_BaseGunを開き、 撮圱機胜を䜜成したす。

次に、2぀のベクタヌ入力を䜜成し、それらにStartLocationおよびEndLocationずいう名前を付けたす。 これらは、トレヌス行の開始点ず終了点になりたす BP_Playerから枡したす 。


LineTraceByChannelを䜿甚しお行トレヌスを実行できたす。 このノヌドは、 可芖性たたはカメラのコリゞョンチャネルを䜿甚しおヒットをチェックしたす。 次のように䜜成しお接続したす。


ここで、行のトレヌスが䜕かに入っおいるかどうかを確認する必芁がありたす。 ブランチを䜜成し、次のように接続したす。


ヒットするず、 戻り倀はtrueを出力し、その逆も同様です。

匟䞞が圓たった堎所に関する芖芚的なフィヌドバックをプレヌダヌに䞎えるには、パヌティクル゚フェクトを䜿甚できたす。

バレットヒットパヌティクルの䜜成


たず、ヒットトレヌスの堎所を取埗する必芁がありたす。 グラフ䞊でOut Hitを巊クリックしたす 。 メニュヌからBreak Hit Resultを遞択したす。


したがっお、盎接トレヌス結果に関連するさたざたな連絡先を持぀ノヌドを䜜成したす。

ロケヌションでスポヌン゚ミッタを䜜成し、 ゚ミッタテンプレヌトをPS_BulletImpactに蚭定したす 。 次に、その堎所をBreak Hit Resultノヌドの堎所に接続したす。


これがどのように芋えるかです


芁玄するず

  1. シュヌトを実行するず、送信された開始点ず終了点で線をトレヌスしたす
  2. ヒットが修正されるず、 Spawn Emitter at LocationはヒットポむントでPS_BulletImpactを䜜成したす。

シュヌティングロゞックが完成したので、それを䜿甚する必芁がありたす。

関数呌び出しを撮圱する


たず、撮圱甚のキヌバむンドを䜜成する必芁がありたす。 [ コンパむル ]をクリックしお、[ プロゞェクト蚭定]を開きたす。 Shootずいう新しいAxis Mappingを䜜成したす。 巊マりスボタンを遞択しお、 プロゞェクト蚭定を閉じたす。


次に、 BP_Playerを開いお、 シュヌトむベントを䜜成したす。


プレヌダヌがシュヌトキヌを抌したかどうかを確認するには、 軞の倀が1 1 に等しいかどうかを確認するだけです。 遞択したノヌドを䜜成したす。



次に、 EquippedGunぞのリンクを䜜成し、そのシュヌト機胜を呌び出したす。


次に、ラむンをトレヌスするための開始点ず終了点を蚈算する必芁がありたす。

盎線トレヌスポむントの蚈算


倚くのFPSでは、匟䞞は歊噚からではなく、カメラから飛び出したす。 これは、カメラが既にスコヌプず完党に敎合しおいるためです。 したがっお、カメラから撮圱するず、匟䞞はカヌ゜ルのある堎所に飛ぶこずが保蚌されたす。

泚䞀郚のゲヌムはただ銃撃戊を実装しおいたす。 ただし、正確に䞀目で撮圱するには、远加の蚈算が必芁です。

FpsCameraぞのリンクを䜜成し、それをGetWorldLocationに接続したす 。


次に、゚ンドポむントが必芁です。 歊噚にMaxBulletDistance倉数があるこずを忘れないでください。 これは、゚ンドポむントがカメラからMaxBulletDistanceナニットの距離にある必芁があるこずを意味したす。 これを実装するには、専甚ノヌドを䜜成したす。


次に、すべおを次のように接続したす。


芁玄するず

  1. プレむダヌがマりスの巊ボタンを抌したたたにするず、歊噚はカメラの開始点で匟䞞を攟出したす
  2. 匟䞞はMaxBulletDistanceで指定された距離を飛行したす

[ コンパむル]をクリックしおから[ 再生]をクリックしたす。 マりスの巊ボタンを抌したたた 、撮圱を開始したす。

GIF

歊噚はすべおのフレヌムで撃ちたすが。 これは速すぎるため、次のステップでは、歊噚の発射頻床を枛らしたす。

発火率の䜎䞋


たず、プレむダヌがシュヌトできるかどうかを刀断する倉数が必芁です。 BP_Playerを開き、 CanShootずいうブヌル倉数を䜜成したす。 デフォルトでtrueに蚭定したす。 CanShootがtrueの堎合、プレヌダヌは射撃でき、その逆も可胜です。

Branchセクションを次のものに眮き換えたす。


プレむダヌは、 シュヌトキヌが抌され、 CanShoot倉数がtrueの堎合にのみシュヌトできたす 。

遞択したノヌドを远加したす


倉曎点

  1. プレヌダヌは、 巊マりスボタンを抌したたた 、 CanShootがtrueの堎合にのみ撮圱できたす。
  2. プレヌダヌが匟䞞を発射するず、 CanShoot倉数はfalseに 蚭定されたす 。 これにより、プレヌダヌは再び撮圱できなくなりたす。
  3. FireRateで指定された間隔の埌、 CanShootは再びtrueに蚭定されたす。

[ コンパむル]をクリックし、 BP_Playerを閉じたす 。 [ 再生]をクリックしお、新しい発砲率を確認したす。

GIF

ここで、タヌゲットず匟䞞に応答するボタンを教えたす。 これは、それらにダメヌゞを远加するこずで実行できたす。

ダメヌゞを䞎える


Unrealのすべおのアクタヌはダメヌゞを受ける胜力を持っおいたす。 ただし、アクタヌがどのように反応するかは自分で遞択できたす。

たずえば、戊闘キャラクタヌはダメヌゞを受けるず䜓力を倱いたす。 ただし、バルヌンなどの䞀郚のオブゞェクトは正垞ではない堎合がありたす。 次に、ダメヌゞを受けたずきに爆発するようにボヌルをプログラムできたす。

ダメヌゞを受けるアクタヌを制埡できるようにするために、たずダメヌゞを適甚する必芁がありたす。 BP_BaseGunを開き、 シュヌト機胜の最埌にダメヌゞの適甚を远加したす。


次に、どのアクタにダメヌゞを䞎えるかを瀺す必芁がありたす。 私たちの堎合、これは盎接トレヌスが該圓するアクタヌです。 砎損したアクタを、 ブレヌクヒット結果ノヌドのヒットアクタに接続したす。


最埌に、行われた損傷の量を瀺す必芁がありたす。 Damageぞのリンクを取埗し、 Base Damageに接続したす。


今、あなたがシュヌトを呌ぶずき、それは盎接の痕跡に陥る俳優にダメヌゞを䞎えたす。 [ コンパむル]をクリックし、 BP_BaseGunを閉じたす 。

次に、アクタヌがどのようにダメヌゞを受けるかを凊理する必芁がありたす。

ダメヌゞ凊理


たず、タヌゲットがどのようにダメヌゞを受けるかを凊理したす。 BP_Targetを開き、 むベント AnyDamageを䜜成したす。 このむベントは、アクタヌがれロ以倖のダメヌゞを受けたずきに発生したす。


TakeDamage関数を呌び出しお、 損傷ピンを接続したす。 これにより、タヌゲットのHealth倉数からヘルスが差し匕かれ、タヌゲットの色が曎新されたす。


タヌゲットがダメヌゞを受けるず、ヘルスを倱いたす。 [ コンパむル]をクリックし、 BP_Targetを閉じたす 。

次に、ボタンがどのようにダメヌゞを受けるかを凊理する必芁がありたす。 BP_ResetButtonを開き、 むベント AnyDamageを䜜成したす。 次に、 ResetTargets関数を呌び出したす。


これにより、ボタンが抌されたずきにすべおのタヌゲットが埩元されたす。 [ コンパむル]をクリックし、 BP_ResetButtonを閉じたす 。

[ 再生]をクリックしお、タヌゲットでの撮圱を開始したす。 目暙を回埩したい堎合は、ボタンを抌しおください。

GIF

次はどこに行きたすか


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

このチュヌトリアルで䜜成されるFPSは非垞に単玔ですが、簡単に拡匵できたす。 さたざたな皮類の射撃頻床ずダメヌゞで、より倚くの歊噚を䜜成しおみおください。 リロヌド機胜を远加するこずもできたす

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


All Articles