この記事は「Unity Advent Calendar 2019」11日目の記事です。
前回はgremitoさんの個別オーダーメイドカリキュラムは難しいがもの作り感があって面白い!でした
子から親へのデータの受け渡し
やりたいときありませんか?
僕はやりたかったのでやりました。
MAURUNについて
https://youtu.be/9yx-3RXG8rI
VTUBERが作る同人ゲームです。僕はそのお手伝いしてたのでその話をします。どんなゲームかは遊んでください。Boothからダウンロード出来ます。声有りバージョンが有料ですがあります。
ZenjectとかUniRxとかUniTaskとかよくあるやつは使ってます。便利ですよね
要件
データの受け渡しをしたかったんですよね。
MAURUNのゲームシーンはこんな感じでマルチシーンになってます。
メインシーンにあるもの
・HPとかのUI
・ゲーム全体の状態管理
ステージシーンにあるもの
・障害物とか回復アイテムとか得点アイテムとかの配置
・スタート地点の配置
・ゴール地点の配置
やりたかったこと
・ステージごとにスタート地点を変えたい
・ステージのデータからスタート地点を取得してプレイヤーキャラクターを配置したかった。
設計
そんな難しい事はしないです。Zenject使ってるからこの辺めっちゃ楽だった。
参照関係はこんな感じ
実際はこんな感じの処理
public class StartPoint : MonoBehaviour, IStageEntryPoint
{
[Inject] private SetupStartPointUseCase usecase;
void Start()
{
usecase.In(this.transform.position);
}
}
public class StageBuilder : IStageBuilder
{
// 省略
// Initializerから呼ばれる
public async UniTask SetupGame(IMovable character)
{
var startPoint = await usecase.Out().Where(x => x != null).First();
character.SetPosition(startPoint);
}
}
多分こんな感じ
無事にステージごとに違う感じにできました。実際にスタート位置とかだけだとあんま利用されなかったです…でもやりたい時にできないのはだるいし実際ステージ事に変わるデータなんでこれで良い…
親から子も行ける
親が子のContextのクラス参照するのは大変ですけどこのUseCaseは親のContextにあるんで当然親が子にデータを流すことも出来ます。UseCaseって名付けが適切かの余地はありそうだけどまあこれでいいんじゃないでしょうか。
おわりに(そして宣伝)
Zenjectわからんって言いながらMAURUNってゲーム作ってました。
Zenjectわからない人はいもさんのZenjectチョットワカルBookおすすめです(勝手に宣伝)
それと冒頭にも書きましたけどMAURUNってゲーム作って公開してます。
遊んでください。
https://7name.site/maurun.github.io/
あと今週末に技術書同人誌博覧会2って同人誌即売会があるんですけどそこでモバイルゲームを100本くらい触ってライセンス表記の有無とかクレジット表記の有無を調べて回ったポエム集を頒布します。物申したい人は遊びに来てください。
技術書同人誌博覧会2 ながら工房
ついでに既刊とかBooth - ながら工房でダウンロード販売もしてます。気になったら是非手にとってください。
明日は・・・?
明日はKan_Kikuchiさんの「12日、もう一度来て下さい、最高のAudio Managerをお見せしますよ」です。