⚖️

[Unity, R3]ローグライクゲームのレリックを実装する

2024/12/09に公開

背景

ローグライクゲームを作る際に、PeglinSlay the Spireのようなレリック効果の複雑な相互作用をどのように実装するべきか悩みました。
この際にR3(旧UniRx)というライブラリを使えば比較的綺麗に実装できるのではないかと思い、実装してみました。

(R3に関しては既に色々な解説記事があるので、解説は省略します。)

実装のイメージ

概要

ゲーム内のレリックが発動しそうなタイミング(プレイヤーが攻撃した時、コインを入手した時等)に、値を紐付けたイベントを発行します。
この際にイベントに紐付けられたレリックの処理を呼び出し、紐づけられた値を任意に上書きし、上書き後の値をゲーム進行に使うという流れです。

処理の流れ

以下に、「プレイヤーの体力が8割以上なら獲得するコイン量が2倍になる」というレリックの効果が発動する流れを説明します。

1.OnCoinGainイベントを定義する
2.レリック処理を定義し、OnCoinGainイベントに紐付ける
3.コインを2枚入手
3.OnCoinGainイベントがValue=2で発行される
4.レリック処理が発動し、条件を満たしていたらOnCoinGainイベントのValueを2倍にする
5.OnCoinGainイベントのValueを参照し、実際にコインを4枚獲得
6.OnCoinGainイベントのValueをリセットする

コード

以下に実際のコードを示します

GameEvent<T>

コード全文

IRelicBehavior

コード全文

EventManager

コード全文

レリック

コード全文

コイン獲得処理

コード全文

使用方法

EventManagerに任意のイベントを定義し、任意のレリックのIRelicBehavior.ApplyEffect()内でレリックの処理をするメソッドをイベントのGameEvent<T>.Subscribe()を使って登録します。
任意のタイミングで、GameEvent<T>.Trigger()を呼び出すことでレリックの処理が発動するので、その後にGameEvent<T>.GetValue()で値を読み取ってゲーム進行に使います。

最後に

冒頭でも書きましたが、この実装はあくまでR3を初めて触った自分が思いつきで実装してみたものです。
他にいい実装法をご存知の方が居られましたら是非コメントなどで教えて頂きたいです!🙇

GitHubで編集を提案

Discussion