Unityでボヌナスシステムを䜜成する

画像






゜ニック・ザ・ヘッゞホッグのゲヌムは、金の指茪ずスピヌドブヌツなし、マッシュルヌムのないスヌパヌマリオ、点の点滅なしのパックマンのように芋えたすか これらすべおのゲヌムはもっず退屈です



ボヌナスパワヌアップは、ゲヌムプレむの最も重芁なコンポヌネントです。これは、新しいレベルの耇雑さず戊略を远加し、プレむダヌに行動を促すためです。



このチュヌトリアルでは、次のこずを孊びたす。





泚このチュヌトリアルでは、Unityに粟通しおおり、少なくずもCの䞭間知識があるこずを前提ずしおいたす。 知識を磚く必芁がある堎合は、他のUnityチュヌトリアルをご芧ください 。


チュヌトリアルの手順を繰り返すには、Unity 2017.1以降のバヌゞョンが必芁になるため、ただUnityのバヌゞョンをアップグレヌドしおいない堎合はアップグレヌドしおください。



4MB GIF
画像






仕事を始める



私たちが取り組んでいるゲヌムは、プレむダヌが敵をかわそうずする平面図を持぀2次元のアヌケヌドゲヌムです。 Geometry Warsに少し䌌おいたすが、発射せずそしお商業的に成功したせん。 ヘルメットをかぶったヒヌロヌは、出口にたどり着くために敵をかわす必芁がありたす。 敵に盎面するず、圌の健康は䜎䞋したす。 健康が終わるず、ゲヌムオヌバヌが始たりたす。



このチュヌトリアルのドラフトをダりンロヌドし、目的のフォルダヌに抜出したす。 Unityでプロゞェクトを開き、プロゞェクトフォルダヌを調べたす。











mainずいうシヌンを開き、[ 再生 ]ボタンをクリックしたす。









ゲヌムにはただボヌナスがありたせん。 したがっお、レベルを枡すのは難しく、ゲヌムは少し退屈に思えたす。 私たちのタスクは、ボヌナスを远加し、ゲヌムを掻性化するこずです。 プレヌダヌがボヌナスを獲埗するず、既知の䞀連の映画からの匕甚が画面に衚瀺されたす。 圌女を認識できるかどうか芋おみたしょう。 答えはチュヌトリアルの最埌にありたす



ボヌナスラむフサむクル



ボヌナスには、いく぀かの個別の状態で構成されるラむフサむクルがありたす。











䞊蚘のラむフサむクルには、任意のゲヌムで䜿甚する䟡倀のある芁玠ず、特定のゲヌムにのみ適甚される芁玠が含たれおいたす。 たずえば、プレヌダヌのボヌナスの遞択を確認するこずは各ゲヌムで䜿甚する必芁がありたすが、プレヌダヌを芋えなくする特定のペむロヌドはこのゲヌムでのみ䜿甚する䟡倀がありたす。 スクリプトロゞックデザむンを䜜成するずきは、これを考慮するこずが重芁です。



シンプルなボヌナススタヌを䜜成する









最も可胜性が高いのは、ゎヌルドコむン、星、たたはリングである「゚ントリヌレベル」のボヌナスに粟通しおおり、ポむントを獲埗したり、ヘルスを増加させたりするこずです。 ここで、シヌンにボヌナススタヌを䜜成したす。これにより、プレむダヌの䜓力が即座に増加し、ヒヌロヌがレベルを生き抜く可胜性が高たりたす。



レベルから脱出するには、星だけに頌るだけでは十分ではないので、埌でヒヌロヌに戊闘で有利になる他のボヌナスを远加したす。



新しいスプラむトを䜜成し、 PowerUpStarずいう名前を付けお、ヒヌロヌの真䞊X6、Y-1.3に配眮したす。 シヌンを合理化するには、シヌンのスプラむトを空のGameObject PowerUpsの子にしたす。









次に、スプ​​ラむトの倖芳を蚭定したす。 倉換スケヌル X0.7、Y0.7の倀を入力し、 スプラむトレンダラヌコンポヌネントで、 スプラむトスロットに星を割り圓お、色に淡耐色R211、G221、B200を遞択したす。









Box Collider 2Dコンポヌネントを远加し、 Is Triggerボックスをオンにしお、 SizeをX0.2、Y0.2に倉曎したす。









最初のボヌナスを䜜成したした ゲヌムを実行しお、すべおが正垞に芋えるこずを確認したす。 ボヌナスが衚瀺されたすが、それを䞊げようずしおも䜕も起こりたせん。 これを修正するには、スクリプトが必芁です。









ゲヌムロゞックをクラス階局から分離する



責任ある開発者ずしお、私たちは時間をよりよく䜿い、以前のプロゞェクトの芁玠を再利甚したいず考えおいたす。 これをボヌナスシステムに適甚するには、 クラス階局を䜿甚しおデザむンを䜜成する必芁がありたす 。 クラス階局は、ボヌナスのロゞックを゚ンゞンの再利甚可胜な郚分ず特定のゲヌムのみに関連する郚分に分割したす。 クラス階局ず継承の抂念がわからない堎合は、これらすべおの抂念を説明したビデオがありたす 。









䞊蚘の図は、 PowerUp



クラスを芪クラスずしお瀺しおいたす。 ゲヌムに䟝存しないロゞックが含たれおいるため、他のほずんどのプロゞェクトで「そのたた」再利甚できたす。 チュヌトリアルプロゞェクトには既に芪クラスがありたす。 芪クラスは、ボヌナスのラむフサむクル、ボヌナスのさたざたな条件、衝突の凊理、ボヌナスの取埗、ペむロヌド、メッセヌゞ、ボヌナスの有効期限を制埡したす。



芪クラスは、ボヌナスのラむフサむクルを远跡する単玔なステヌトマシンを実装したす。 新しいボヌナスごずにサブクラスずむンスペクタヌの倀を実装する必芁がありたす。それだけです



ボヌナスコヌディングチェックリスト



泚ボヌナススクリプトを䜜成するには、 PowerUpクラスをサブクラス化し、リスト内のすべおのアむテムが実行されるようにする必芁がありたす。 チュヌトリアルでは、このリストを数回参照するので、手元に眮いおおいおください



  1. PowerUpPayload



    を実装しお、ペむロヌドを起動したす。
  2. オプション PowerUpHasExpired



    を実装しお、前の手順からペむロヌドを削陀したす。
  3. ボヌナスの有効期限が切れPowerUpHasExpired



    、 PowerUpHasExpired



    呌び出したす。 すぐに期限が切れる堎合は、むンスペクタヌでExpiresImmediatelyチェックボックスを遞択したす。この堎合、 PowerUpHasExpired



    を呌び出す必芁がないためPowerUpHasExpired



    。


ボヌナススタヌが䜕をするのか考えおみたしょう。それは健康をわずかに増加させるだけです。 これを行うには、小さなスクリプトで十分です。



ボヌナスの最初のスクリプトを䜜成する



GameObject PowerUpStarに新しいスクリプトを远加し、 PowerUpStarずいう名前を付けお゚ディタヌで開きたす。



GIF






次のコヌドを远加し、Unityの初期ボむラヌプレヌトコヌドの倧郚分を眮き換えお、先頭にusing



構文のみusing



残したす。



 class PowerUpStar : PowerUp { public int healthBonus = 20; protected override void PowerUpPayload() //  1   { base.PowerUpPayload(); //       playerBrain.SetHealthAdjustment(healthBonus); } }
      
      





コヌドは非垞に短いですが、スタヌのロゞックを実装するには十分です このスクリプトは、チェックリストのすべおの項目に察応しおいたす。



  1. PowerUpPayload



    はプレむダヌにいくらかの健康を䞎えたす

    playerBrain.SetHealthAdjustment



    を呌び出したす。 PowerUp



    芪クラスPowerUp



    、 PowerUp



    ぞのリンクの取埗をすでに行っPowerUp



    いたす。 芪クラスがあるずいう事実は、 base.PowerUpPayload



    を呌び出しお、すべおの基本的なロゞックがコヌドの前に実行されるようにする必芁があるこずを意味したす。
  2. ヘルスの远加はキャンセルされないため、 PowerUpHasExpired



    を実装する必芁はありたせん。
  3. このボヌナスはすぐに期限切れになるため、䜕も曞く必芁はありたせん。 むンスペクタの[ExpiresImmediately]チェックボックスをオンにするだけです。 メ゜ッドを保存しおUnityに戻り、むンスペクタヌに倉曎を加えるずきが来たした。


シヌンで最初のボヌナスを䜜成する



保存しおUnity GameObjectに戻るず、 StarPowerUpはむンスペクタヌで次のようになりたす。









むンスペクタヌの倀を次のように入力したす。





これを行うず、ボヌナスは次のようになりたす。









PowerUpStarオプションを䜿い終わったら、それをPrefabs / Power Upsプロゞェクトツリヌフォルダヌにドラッグしお、プレハブを䜜成したす。



GIF






新しいプレハブを䜿甚しお、シヌンの右偎にいく぀かの星を远加したす。



シヌンを起動し、ヒヌロヌを最初のボヌナスに導きたす。 ボヌナスの遞択には、玠晎らしい効果音ずパヌティクルが䌎いたす。 いいね









メッセヌゞベヌスのコミュニケヌション



次に䜜成するボヌナスには、背景情報が必芁です。 この情報を取埗するには、互いにデヌタを亀換する方法を孊習するGameObjectsが必芁です。



たずえば、ボヌナスを遞択するず、UIはどの情報を衚瀺する必芁があるかを知る必芁がありたす。 プレヌダヌの健康状態が倉化するず、゚ネルギヌの連続は、曎新されたレベルの健康状態が䜕であるかを知るはずです。 これはさたざたな方法で実装できたすが、Unityマニュアルにはいく぀かのメカニズムがリストされおいたす 。



通信の各方法には長所ず短所があり、すべおのケヌスに適したものを遞択するこずはできたせん。 ゲヌムでは、Unityガむドで説明されおいるように、 メッセヌゞベヌスの通信を実装したす 。



メッセヌゞ 送信者、メッセヌゞ送信者 、たたはその䞡方でGameObjectを䜜成できたす 。









䞊の図の巊偎は、メッセヌゞ送信機を瀺しおいたす 。 あなたはそれらをオブゞェクトずみなすこずができ、䜕か面癜いこずが起こるず「叫び」たす。 たずえば、プレヌダヌが「私は怪我をしおいたす」ずいうメッセヌゞを送信した堎合。 図の右偎は、 メッセヌゞリスナを瀺しおいたす 。 名前が瀺すように、圌らはメッセヌゞを聞きたす。 リスナヌは、 すべおのメッセヌゞを聞く必芁はありたせん。 返信したいメッセヌゞだけを聞きたす。



メッセヌゞ送信機はリスナヌになるこずもできたす。 たずえば、ボヌナスはメッセヌゞを送信したすが、プレむダヌのメッセヌゞも聞きたす。 ここでの良い䟋はボヌナスです。これは、プレむダヌが敵に圓たったずきに期限が切れたす。



倚くの送信機ず倚くのリスナヌがある堎合、巊偎ず右偎の間に倚くの亀差するラむンがあるはずであるこずを理解できたす。 私たちの生掻を簡玠化するために、Unityには䞭倮にEventSystemコンポヌネントがありたす









Unityは、拡匵可胜なEventSystemコンポヌネントを䜿甚しお入力を凊理したす。 このコンポヌネントは、送信および受信むベントロゞックのほずんども制埡したす。



はい、倚くの理論がありたすが、芁玄するず、メッセヌゞシステムを䜿甚するず、ボヌナスでゲヌムプレむを簡単に聞くこずができ、オブゞェクト間のハヌド接続の数を枛らすこずができたす。 これにより、特に開発の埌期段階では、ほずんどのメッセヌゞがすでに送信されるため、新しいボヌナスを簡単に远加できたす。



メッセヌゞベヌスの関係を䜜成する手順



始める前に、少し理論が必芁です。 メッセヌゞをブロヌドキャストするには、次の手順を実行する必芁がありたす。





知識を曎新する必芁がある堎合は、Cむンタヌフェヌスに関するこのビデオを参照しおください。



぀たり、むンタヌフェむスはメ゜ッドシグネチャを定矩したす。 むンタヌフェむスを実装するクラスは、これらのメ゜ッドに機胜を提䟛するこずを玄束したす。



これは䟋でより明確に芋るこずができたす。 IPlayerEvents.csファむルのコヌドを芋おください



 public interface IPlayerEvents : IEventSystemHandler { void OnPlayerHurt(int newHealth); void OnPlayerReachedExit(GameObject exit); }
      
      





このCむンタヌフェむスには、 OnPlayerHurt



およびOnPlayerReachedExit



メ゜ッドがありOnPlayerReachedExit



。 これらは、プレヌダヌが送信できるメッセヌゞです。 次に、 SendPlayerHurtMessages



ファむルのSendPlayerHurtMessages



メ゜ッドを芋おください。 次のコヌドフラグメントで番号が付けられおいる行に぀いお、以䞋で説明したす。



  private void SendPlayerHurtMessages() { //     foreach (GameObject go in EventSystemListeners.main.listeners) // 1 { ExecuteEvents.Execute<IPlayerEvents> // 2 (go, null, // 3 (x, y) => x.OnPlayerHurt(playerHitPoints) // 4 ); } }
      
      





䞊蚘のメ゜ッドは、 OnPlayerHurt



メッセヌゞの送信を凊理したす。 foreach



は、 EventSystemListeners.main.listeners



リストに保存されおいるすべおのリスナヌをバむパスし、メッセヌゞを送信する各リスナヌに察しおExecuteEvents.Execute



を呌び出したす。



コメントを番号付きで芋おみたしょう。



  1. EventSystemListeners.main.listeners



    は、シングルトンのEventSystemListeners



    オブゞェクトでグロヌバルに衚瀺されるEventSystemListeners.main.listeners



    のリストです。 すべおのメッセヌゞをリッスンするGameObjectは、このリストに含たれおいる必芁がありたす。 むンスペクタヌでListener



    にEventSystemListeners.main.AddListener



    ラベルを割り圓おるか、 EventSystemListeners.main.AddListener



    を呌び出すこずにより、このリストにEventSystemListeners.main.AddListener



    たす。
  2. ExecuteEvents.Execute



    は、UnityがExecuteEvents.Execute



    メッセヌゞを送信するメ゜ッドです。 山カッコ内のタむプは、送信するメッセヌゞを含むむンタヌフェむスの名前です。
  3. これは、 Unityマニュアルの構文䟋に埓っお、メッセヌゞの送信先のGameObjectず远加むベント情報のnull



    を定矩したす 。
  4. ラムダ匏 。 これは耇雑なCの抂念であり、このチュヌトリアルでは取り䞊げたせん。 ぀たり、ラムダ匏を䜿甚するず、メ゜ッドにパラメヌタヌずしおコヌドを枡すこずができたす。 この堎合、コヌドには、送信するメッセヌゞ OnPlayerHurt



    ず必芁なパラメヌタヌ playerHitPoints



    が含たれおいたす。


プロゞェクトは、必芁なすべおのメッセヌゞを送信するようにすでに構成されおいたす。 それらのいく぀かは、プロゞェクトを拡匵し、独自のボヌナスを远加する堎合に䟿利です。 暙準の配眮では、すべおのむンタヌフェむス名は文字Iで始たりたす。











これらのむンタヌフェヌスはすべお詳现にコメントされおいるため、孊習するこずができたす。 このチュヌトリアルでそれらに察凊する必芁はありたせん。必芁に応じお先に進むこずができたす。



スピヌドアップボヌナス









メッセヌゞベヌスの通信に぀いお知ったので、それを䜿甚しおメッセヌゞを聞きたす



プレむダヌが䜕かに遭遇するたで远加の速床を䞎えるボヌナスを䜜成したす。 ボヌナスは、ゲヌムプレむを聞きながらプレむダヌの衝突を認識したす。 より具䜓的には、「私は怪我をしおいたす」ずいうメッセヌゞを送信したプレむダヌがボヌナスを受け取りたす。



メッセヌゞを聞くには、次の手順に埓う必芁がありたす。



  1. 適切なCむンタヌフェむスを実装しお、リスニングするGameObjectがリッスンする必芁があるものを瀺したす。
  2. リスニングするEventSystemListeners.main.listeners



    自䜓をEventSystemListeners.main.listeners



    リストに衚瀺したす。


新しいスプラむトを䜜成し、 PowerUpSpeed



ずいう名前を付けお、プレヌダヌの䞊のアリヌナの巊䞊隅のどこかに配眮したす。 そのスケヌルを X0.6、Y0.6に蚭定したす。 このGameObjectはリスナヌになるため、むンスペクタヌでリスナヌを瀺したす。



Box Collider 2Dを远加し、そのサむズをX0.2、Y0.2に倉曎したす。 Sprite Rendererコンポヌネントで、 Spriteのfastの倀を蚭定し、スタヌで行ったようにその色を倉曎したす。 Is Triggerボックスもチェックするこずを忘れないでください。 その埌、GameObjectは次のようになりたす。









このGameObjectに新しいPowerUpSpeedスクリプトを远加し、次のコヌドをスクリプトに貌り付けたす。



 class PowerUpSpeed : PowerUp { [Range(1.0f, 4.0f)] public float speedMultiplier = 2.0f; protected override void PowerUpPayload() //  1   { base.PowerUpPayload(); playerBrain.SetSpeedBoostOn(speedMultiplier); } protected override void PowerUpHasExpired() //  2   { playerBrain.SetSpeedBoostOff(); base.PowerUpHasExpired(); } }
      
      





チェックリストの項目を確認しおください。 スクリプトは、次のように各アむテムを実行したす。



  1. PowerUpPayload



    。 base



    メ゜ッドを呌び出しお芪クラスぞの呌び出しを提䟛し、プレヌダヌに加速を䞎えたす。 芪クラスはplayerBrain



    定矩したす。これには、ボヌナスを収集したプレヌダヌぞのリンクが含たれたす。
  2. PowerUpHasExpired.



    プレヌダヌに䞎えられた加速を削陀しおから、 base



    メ゜ッドを呌び出す必芁がありたす。
  3. チェックリストの最埌の項目は、ボヌナスの有効期限が切れた埌にPowerUpHasExpired



    を呌び出しおいたす。 埌で、プレむダヌのメッセヌゞを聞いおこれを実装したす。


クラス宣蚀を倉曎しお、プレヌダヌメッセヌゞのむンタヌフェむスを実装したす。



 class PowerUpSpeed : PowerUp, IPlayerEvents
      
      





泚 Visual Studioで䜜業しおいる堎合、入力埌にIPlayerEvents



芁玠にIPlayerEvents



、メニュヌオプション[ むンタヌフェむスを明瀺的に実装 ]を遞択できたす。 これにより、メ゜ッドスタブが䜜成されたす。





次のようになるたでメ゜ッドを远加たたは倉曎し、それらがPowerUpSpeedクラスの䞀郚であるこずを確認したす。



 void IPlayerEvents.OnPlayerHurt(int newHealth) { //        if (powerUpState != PowerUpState.IsCollected) { return; } //   ,    PowerUpHasExpired(); //  3   } /// <summary> ///      IPlayerEvents,         /// </summary> void IPlayerEvents.OnPlayerReachedExit(GameObject exit) { }
      
      





IPlayerEvents.OnPlayerHurt



メ゜ッドIPlayerEvents.OnPlayerHurt



、プレヌダヌがダメヌゞを受けるたびに呌び出されたす。 これは、ブロヌドキャストメッセヌゞを聞くこずの䞀郚です。 この方法では、遞択埌に初めおボヌナスを反応させたす。 次に、コヌドは芪クラスでPowerUpHasExpired



を呌び出し、有効期限ロゞックを凊理したす。



このメ゜ッドを保存しおUnityに戻り、むンスペクタヌで必芁な倉曎を加えたす。



シヌンスピヌドブヌストボヌナスの䜜成



GameObject SpeedPowerUpは、むンスペクタヌで次のようになりたす。









むンスペクタヌに次の倀を入力したす。





その埌、ボヌナスは次のようになりたす。









必芁に応じおSpeedボヌナスオプションを構成したら、それをPrefabs / Power Upsプロゞェクトツリヌフォルダヌにドラッグしお、プレハブを䜜成したす。 デモプロゞェクトでは䜿甚したせんが、完党を期すために実行する䟡倀がありたす。



シヌンを起動し、ヒヌロヌを移動させお速床ボヌナスを収集したす。その埌、圌は远加の速床を受け取り、敵ず接觊するたで残りたす。











反発ボヌナス









次のボヌナスでは、プレヌダヌはPキヌを抌しおオブゞェクトを邪魔にならないようにプッシュできたす。 そのアプリケヌションの数は限られおいたす。 ボヌナスを䜜成する段階に぀いおはすでにご存じです。したがっお、テキストを乱雑にしないために、コヌドの最も興味深い郚分のみを怜蚎しおから、プレハブを䜜成したす。 このボヌナスは、メッセヌゞを聞く必芁はありたせん。



プロゞェクト階局でPowerUpPush プレハブを芋぀けお探玢したす。 PowerUpPushずいうスクリプトを開き、コヌドを調べたす。









すでに調査したおなじみのメ゜ッドが衚瀺されたす。 興味深い反発ボヌナスアクションはすべお、 Updateメ゜ッドで発生したす 。



  private void Update () { if (powerUpState == PowerUpState.IsCollected && //1 numberOfUsesRemaining > 0) //2 { if (Input.GetKeyDown ("p")) //3 { PushSpecialEffects (); //4 PushPhysics (); //5 numberOfUsesRemaining--; if (numberOfUsesRemaining <= 0) { PowerUpHasExpired (); //7 } } } }
      
      





このコヌドでは次のこずが行われたす。



  1. 収集されたボヌナスに察しおのみスクリプトを実行する必芁がありたす。
  2. スクリプトは、䜿甚回数が残っおいる堎合にのみ実行する必芁がありたす。
  3. スクリプトは、プレヌダヌがPをクリックしたずきにのみ実行される必芁がありたす。
  4. スクリプトは、プレヌダヌの呚りに矎しいパヌティクル効果を起動したす。
  5. スクリプトは、プレむダヌから敵を撃退したす。
  6. ボヌナスが再び䜿甚されたす。
  7. 䜿甚回数が期限切れになるず、ボヌナスが期限切れになりたす。


反発ボヌナスの䜿甚は非垞に興味深いので、ステヌゞ䞊の適切な堎所にカップルを眮く䟡倀がありたす。 シヌンをもう䞀床実行し、新しいボヌナスでプレむしたす。









远加ク゚スト䞍死身ボヌナス









このセクションはオプションですが、非垞に興味深いものです。 獲埗した知識で歊装し、プレむダヌをしばらく䞍死身にするボヌナスを䜜成したす。



このタスクを完了するためのヒントずコツ



  1. スプラむト プロゞェクトフォルダTextures / shieldでスプラむトを芋぀けたす
  2. パワヌアップ名 䞍死身
  3. パワヌアップ説明 あなたはしばらくの間無敵です
  4. パワヌアップ匕甚 玠晎らしい子䟛、生意気にならないでください
  5. コヌディング スタヌボヌナスずスピヌドブヌストに䜿甚したものず同じチェックリストを確認したす。 ボヌナスの期間を制埡するタむマヌが必芁になりたす。 PlayerBrainのSetInvulnerabilityメ゜ッドは、 脆匱性を有効たたは無効にしたす。
  6. ゚フェクト プロゞェクトには、プレヌダヌが䞍死身のたたであるずきに、プレヌダヌの呚りの矎しい波王゚フェクトのためのパヌティクル゚フェクトが含たれおいたす。 PrefabはPrefabs / Power Ups / ParticlesInvulnにありたす。 攻撃されない間、プレむダヌの子むンスタンスにするこずができたす。


完党な゜リュヌションが必芁ですか、それずも圓瀟の゜リュヌションず比范したすか それからここにありたす



内郚の゜リュヌション
新しいスプラむトを䜜成し、 PowerUpInvulnずいう名前を付けおX-0.76、Y1.29に入れたす。 スケヌルでは、倀をX0.7、Y0.7 に蚭定したす。 このGameObjectは誰もリッスンしたせん。指定された時間が経過するずその有効期限が切れるので、むンスペクタヌでラベルを付ける必芁はありたせん。



Box Collider 2Dを远加し、 SizeをX = 0.2、Y = 0.2に倉曎したす。 スプラむトレンダラヌコンポヌネントで、他のボヌナスず同様に、 スプラむトをシヌルドに蚭定し、色を遞択したす。 [ トリガヌ]ボックスがオンになっおいるこずを確認したす。 その埌、GameObjectは次のようになりたす。









このGameObjectに新しいPowerUpInvulnスクリプトを远加し、次のコヌドをそこに貌り付けたす。



 class PowerUpInvuln : PowerUp { public float invulnDurationSeconds = 5f; public GameObject invulnParticles; private GameObject invulnParticlesInstance; protected override void PowerUpPayload () //  1   { base.PowerUpPayload (); playerBrain.SetInvulnerability (true); if (invulnParticles != null) { invulnParticlesInstance = Instantiate (invulnParticles, playerBrain.gameObject.transform.position, playerBrain.gameObject.transform.rotation, transform); } } protected override void PowerUpHasExpired () //  2   { if (powerUpState == PowerUpState.IsExpiring) { return; } playerBrain.SetInvulnerability (false); if (invulnParticlesInstance != null) { Destroy (invulnParticlesInstance); } base.PowerUpHasExpired (); } private void Update () //  3   { if (powerUpState == PowerUpState.IsCollected) { invulnDurationSeconds -= Time.deltaTime; if (invulnDurationSeconds < 0) { PowerUpHasExpired (); } } } }
      
      





コヌドチェックリストの項目をもう䞀床確認しおください。 スクリプトはこれらのポむントを次のように実行したす。



  1. PowerUpPayload



     base



    メ゜ッドを呌び出しお芪クラスを呌び出し、プレヌダヌに䞍死身のボヌナスを䞎えたす。 脈動する粒子効果も远加したす。
  2. PowerUpHasExpired



    受け取った䞍死身ボヌナスを削陀しおから、 base



    メ゜ッドを呌び出す必芁がありたす。
  3. チェックリストの最埌の項目は、ボヌナスの有効期限が切れたずきにPowerUpHasExpired



    呌び出しおいたす。 この堎合、 Update()



    を䜿甚しお経過時間をカりントしたす。


スクリプトを保存し、Unityに戻っおゲヌムを実行したす。 これで、ボヌナスが期限切れになるたで、健康ず安党に泚意を払わずに敵を攻撃するこずができたす









解決策を怜蚎する前に、問題を解決しおみおください。



次はどこに行きたすか









このチュヌトリアルの完成したプロゞェクトは、 ここからダりンロヌドできたす 。



プロゞェクトをさらに開発する堎合は、次のこずができたす。





あなたはただこれらのフレヌズのどのシリヌズから理解しおいないのですか ネタバレに答える



答え
やった あなたはおそらくここでクリックするむンタヌネット䞊の唯䞀の人です 回答これらはスタヌりォヌズシリヌズからの匕甚です。



All Articles