スタミナシステムと言うか現実時間の経過でコインが復活するという処理です。
コインの処理を書いていた時にコインにIDをつけていたので何かに使えないかなと思っていました。
アプリの収益化の方法として、売り切りか、コインを販売するか、広告見たらコイン配布か、広告のみで考えていて、コインで服買えたりアイテム買えたりする予定なのでコインを簡単にゲットさせたくないと思ってます。
コインはステージに何枚かあってステージを始めると前回とったコインもすべて復活するという、まあ当たり前の仕組みだったんですが、ステージを繰り返せば何枚でもゲットできてしまうのでこれを少し制限してゲットしてからある程度時間が経たないとコインが復活しないと言うシステムにしました。
作っている最中は、これいる?と何度か思いましたが復活時間を1~2分にすれば他のステージを遊ぶきっかけになるかなと思ってます。
あと、ブログを書いていて思いついたのが簡単なステージは復活時間を長くして難しいステージでは短いというシステムにすれば面白いかなと思いました。
コインを取得した時の処理
コインを取得したらUtcNow(NowとUtcNowがある一応Utcで取得しておく)を取得した時間としてInterfaceを使ってGameStateに渡す。(言い方があっているかわからないけど)
GammeStateで配列のConIDの値の位置に変数を渡してます。
ステージが開始された時の処理
Interfaceを使って変数を取得します。配列で保存してあるのでCoinIDでゲットするIndexを決めます.。
最初にGet?変数でBranchします。(Getされていたらtrueになります)
次に時間が過ぎているかを調べます。UtcNowで現在時刻を求めそこからGetDate変数を引きます。
結果からTimeSpanが引き出せるのでそれをGetTortalSecondsノードで秒数を求めます。
最初、ここでGetSecondsノードで求めていたのでしばらくうまく動かなかったです。
秒数が復活時間より大きければtrueになります。
これでコインの処理はとりあえず完成です。
今度はステージ選択画面でステージにあるコインを見せたかったのでその処理を作りました。
その前にステージ選択の処理の仕方は、ステージのアイコン的なオブジェクトをタッチっすると詳細画面が出てきてそこでスタートボタンを押すとステージに遷移するというシステムです。
一つ親BPを作りそれにどのステージに行くのかとか判断させてます。
なのでその親BPにステージにコインがあるかどうかを調べる処理を書いていきます。
まず子BPのTagにステージID(1-1的な)とコインIDの範囲?(どのIDからIDまでステージにあるか)をもたせます。
親BPにコリジョンを付けてコリジョンをタッチしたらGetOwnerで子アクターをGetして変数に入れます。
上のやつはステージ選択画面で前後のステージを選べるようにしたのでその処理です。
Stageのタグからステージにあるコインidを取得してその範囲でループするというコメントの通りのことをします。
ループの中ではコインと同じ処理をして、あるかないかを求めてウィジェットに送るようの新しい配列に加えていきます。
次はウィジェットの処理です。
Interfaceでコイン変数を受けとりForEachLoopでIndexの値で変数を切り替えて結果を入れていきます。この変数はウィジェットの文字に紐付いているのでこれでコインの有無がわかります。
後々コインのアイコンに切り替えます。
Utcをローカル時刻に変換(素人)
Utcで保存したのでついでにUtcをローカルに変換できないのかなと思いノードを探しましたが見つかりませんでした。いろいろ試しているうちにこれでいいのかなというものが出来たので載せときます。
とりあえず正しい時刻が出てきたので合ってるんじゃないかなと思います。
0 件のコメント :
コメントを投稿