![見出し画像](https://assets.st-note.com/production/uploads/images/117661547/rectangle_large_type_2_2f9227a0412737516f71d586c49964f5.png?width=800)
RAYSER進捗(20230930)
RAYSERの進捗です。シーンを跨いでもVContainer
— Cz_mirror (@Cz_mirror) September 30, 2023
を用いて、Scoreを保持するようにしたので、ゲームシーンの方でもタイトルで取得したスコアを表示できるようにしました。このスコアを自機の強化などに活かせるような仕組みの実装を検討しています。 pic.twitter.com/CLzDMSj8zh
シーンを跨いでもスコアを維持するようにしたので、今度はそれをゲームシーンでも保持できるようにしてみました。
前回のままだとシーンが切り替わった際にViewに該当する部分の更新処理が発生しないので、ScoreDataPresenterのIStartable.Startを実行した際に、UIをリフレッシュするための処理を追加してみました。
using System;
using Event.Signal;
using UniRx;
using VContainer.Unity;
namespace Score
{
public class ScoreDataPresenter : IStartable, IDisposable
{
readonly ScoreService scoreService;
readonly CompositeDisposable disposable = new CompositeDisposable();
public ScoreDataPresenter(ScoreService scoreService)
{
this.scoreService = scoreService;
}
void IStartable.Start()
{
scoreService.ShowScore();
MessageBroker.Default.Receive<ScoreAccumulation>()
.Subscribe(x => this.RefreshUI(x.Score))
.AddTo(disposable);
}
private void RefreshUI(int score)
{
scoreService.AddScore(score);
scoreService.ShowScore();
}
public void Dispose()
{
disposable.Dispose();
}
}
}
ゲームシーンのスコアのライフタイムスコープはタイトルで使用しているものとクラス名以外は同じですが今後処理が変わる可能性もあるので、一応分けて作りました。
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace Score
{
/// <summary>
/// ゲームシーンのスコアのライフタイムスコープ
/// ゲームシーンのGameObjectにアタッチして使用する
/// </summary>
public class ScoreSceneGameLifetimeScope : LifetimeScope
{
[SerializeField] private ScoreScreen _scoreScreen;
protected override void Configure(IContainerBuilder builder)
{
base.Configure(builder);
builder.Register<ScoreService>(Lifetime.Singleton);
builder.Register<ScoreDataPresenter>(Lifetime.Singleton);
builder.RegisterEntryPoint<ScoreDataPresenter>();
builder.RegisterComponent(_scoreScreen);
}
}
}
![](https://assets.st-note.com/img/1696089750540-zq9lGworWi.png?width=800)
![](https://assets.st-note.com/img/1696089806833-AWofdvRPaj.png?width=800)
この記事が気に入ったらサポートをしてみませんか?