【24sec】長らく放置してすみません
24secを遊んでくださった方々。
長らく更新が止まってしまい申し訳ないです。
結論としては復帰の目処が立たないので、凍結します。
大まかな事情を書きますと…
・7月にインフルエンザで1週間ダウン
・ダウン中にたまってしまった仕事で7月は手一杯に
・8月に新しいカードなどを更新準備(カードグラフィックはできた)
・8月中旬についでにUnityのバージョン更新したらバグ多量発生
・仕事の合間に8月末~9月バグと奮闘するもまだ完全解決ならず
・9月また今年一番の大きな仕事が来て手一杯
という感じです。
時間が経ってしまうと、自分の書いたコードの理解も所々で飛んでしまって
バグ追求をふくめ、今はちょっと復帰が難しいと感じている状態です。
コードの複雑化と再読の困難は
素人の初制作で起きるだろうなと予想していたので、
常に意識して構成はしていたんですけれども、
コメントをたくさん書けばいいってもんでもないようだ。
記憶の消えた自分でもわかりやすいコード、
コードというか全体の構造設計かな、をやっていくには
まだ経験も学びも足りないようです。
次のゲーム制作ができるときには、
今回の(UIやデータ保存の件なども)多くの学びを踏まえて、
もう一歩上の品質を目指して頑張ります。
【24sec】残りの保存バグ修正できました!
残っていたデータ保存バグ修正できたよ、記録メモ。
【問題の症状】
●一部の方のプレイヤー名が「Player」になっていた。「Player」はこのゲームにおけるプレイヤー名データの初期値のもの。しかし、仕組み上は、Kongregateにアクセスした時点でKongregateのサインイン名称かGuest扱いにしているため、初期値が露呈する「はずがない」というもの。
●ゲームではプレイヤー名とほかのデータを紐付けて保存しているため、何かの理由で名前が「Player」になってしまった方は、「Player」になったときにデータが飛んだと思われる。
●自分が再現を試みる限り、タイトル画面でロード中に閉じると、高確率で名前が「Player」になり、データが初期化される(紐付けを失う)ことを確認した。
【原因発覚と解決】
●ロード途中での中途半端な保存を避けるため、タイトル画面を押してキャンペーンに移行するまで「保存」動作はしていない設定のつもりだった。しかし、ゲーム各所での急なブラウザ閉じに対応するための「OnApplicationQuit」で保存をかけていたため、ロード中にブラウザを閉じると、初期値などが混ざった状態で保存される危険があるとわかった。
●「OnApplicationQuit」タイミングの保存に、「タイトル画面ではない」という条件を加え、改善。少なくとも自分でわかっていた状況では「Player」発生は再現できなくなった。
ということで、この件は、一定の改善がされたと思う。公開から3週間、ようやく保存機能周辺はまともになってきたか。いやー本当にすみません。
--- 記事はこのゲームについて書いています
▼初の自作ゲーム24sec(Kongregate.com に飛びます)
Play 24sec Evolution, a free online game on Kongregate
▼関連:
ウィキ(プレイヤーさん制作)
ウィキ(作者自前)
【24sec】すみません、作業遅れてます
うーん。すみません。
カードセット更新作業が予定より遅れている。いま、スキルも全部実装でき、新コマンダーも全部実装。ひたすらミッションを作る作業が残っているだけだけど、仕事もあって、なかなか時間が割けない。もう少々お待ちください。
ついでに、新コマンダーの情報。
左上から、
アレッサンドロ…Blitz Potential / 雷撃潜在能力 (雷撃能力者を強化)
エイダ…Diffarence Engine / もうひとつの駆動機(吸管の性能変化)
ルートヴィッヒ…Chaotic Tyrant / 無秩序な暴君(爆発の強化)
ワレンチナ…Seagull / カモメ(閉塞の強化)
マリー…Double Strand Break / 二本鎖切断(呪詛のトリガー発動)
ロバート…Operetion TRINITY / トリニティ作戦(雷撃のトリガー発動)
という感じです。
--- 記事はこのゲームについて書いています
▼初の自作ゲーム24sec(Kongregate.com に飛びます)
Play 24sec Evolution, a free online game on Kongregate
▼関連:24secウィキ
【24sec】セーブ問題解決したっぽい!
これはッ!? 前進したっぽいです。セーブ問題!
少なくとも理解は進んだ。すべては、ここのコメントで詳しい状況を書いてくださった方のおかげです。ありがとうございます。
以下に問題の概要と、残った課題をまとめます。
Unity開発の初心者はきっとハマる保存の罠
巻き戻り問題の原因は、どうもUnityのPlayerPrefという仕組みのようです。このPlayerPrefの弱点はちゃんと補うメソッドが用意されているが、それがEasySave2というアセットで手軽に代用してしまった初心者には、いっそう見えなくなってしまっていた。
Playerprefsを確実に保存する - テラシュールブログ
UnityのPlayerPrefsでデータをセーブする - スマゲ
そもそも、UnityにPlayerPrefという保存機構がありながら、初心者はなぜEasySave2を使ったか。それはPlayerPrefの保存できるデータ型が少なく、EasySave2は多様だからだ。特にたくさんの数値や文字をふくんだ配列を使えるのが大きい。
EasySave2では、その保存先は結局PlayerPrefであるということは明言されていた。暗号化をふくめ、保存の行為がとても楽なのであると。しかし、PlayerPrefは、アプリが終了するときにファイルを更新する仕組みであり、Unityがクラッシュした場合にはデータが破棄されてしまうのだ。そこで、PlayerPrefには、普段使うデータ型と項目名を指定してSaveメソッドとは別に、ファイル更新を命じるメソッドがちゃんと用意されていた。
ファイル更新は、動作速度の問題があるからわざわざ別のメソッドにしているんだろうけれど、利用者の「保存」という概念から言えば、PlayerPrefは「項目別保存」と「ファイル更新」をセット考える仕組みだったんだ。だからEasySave2で項目を保存したら、必要に合わせ、PlayerPref.Save()できっちりファイル更新をしなくてはいけなかったのだと思う。WebPlayerではこれを使って初めて、セーブしたいときにセーブができる。ということのはずだ。
オンラインセーブの仕組み完成直後
このことがわかったのは、今日、オンライン保存の仕組みが完成し、ひと通り、自分なりのデバッグが終わったところだった。オンライン保存可能なデータをプレビューアップロードしつつ、次の課題としていた保存バグの究明を再開しはじめたところで氷解。以前は見つけられなかった情報があっさり見つかってしまった。
なので、このオンライン保存も公開しようか迷ったのが、バグが無いとも言い切れない。マニュアルセーブなどの保存精度は上がり、巻き戻りは起きづらくなったと思うので、その様子見期間も必要なため、まずはいったんお蔵入りに。
そもそも、保存バグとは別にオンライン保存は考えていたことなので、いずれは公開したいが、急ぐ理由が無ければ、じっくり検討し、間違いの無い形にしたい。
あと一つ、残っている課題
今回の更新で巻き戻り問題が減ったと仮定しても、データ関係ではじつはあと一つ、課題が残っている。オンラインの対戦データを管理者で覗いて見ると、名前が「Player」になっている人が若干名いる。これはデフォルトに僕が設定した名前で、本来はKongregateに来た時点でサインインしたユーザ名か、ゲストならGuestといったものに自動置き換えされるはず。それができていないということは、やはりクラッシュなどの何かを原因に特殊な状況に陥ってしまったものと思われる。全体の人数からするとごくわずかだが、原因を引き続き調べたい。
ただ、あまりこの事に因われすぎても、カードセット更新などの大切なゲーム部分が遅れてしまうので、いったんセーブ問題は頭の片隅に置いて、今後はゲーム内容更新に力を向けたい。
お詫び
ご迷惑をおかけした方々、本当にすみませんでした。初制作とはいえ、保存関係の詰めが甘かったと思います。マニュアルセーブおよび重要な場面などで PlayerPref.Save() を入れたので、おそらく、安定性は高まったと思います。ただ、EasySave2のサイトにその辺の記述が見つからないので、まだ確証がありません。もしも、また何かありましたらお手数ですがお知らせください。よろしくお願いします。
そしてすみません。 PlayerPref.Save() が無いゆえに、今回のデータ更新作業のとき、プレイ中だった方に巻き戻りが発生した可能性があるかもしれません。お詫びいたします。 m(_ _)m
【24sec】バグ修正メモその2
バグ修正の今日のメモ。週末は仕事が立てこんでなかなか動けないかも。早く収束させなくては。迷惑をかけないようにという気持ちと、新スキル実装とか楽しい部分をやりたいなあって気持ちを持続させつつ進めたい。
ゲームの保存の流れ
今回の制作の中でも、データセーブというのはUnityのチュートリアルゲームにも特になかったので、実装作業も初めてで、仕組みにまずい部分があるのかもしれない。ネットでも、ゲームの保存システムの適切な作り方といったものは、見つけられなかった。詳しい人からアドバイスがあるかもしれないので、流れだけまとめておきたい。
まず保存動作そのものは、アセット使った。EasySave2というもので、ユニティにもともと用意されたものと同じく、PrayerPrefにデータ保存する。
中身は、初めてプレイ開始したときに値が変わる変数があり、これのロード試みて、初期値と異なればデータロードを行う。ただし、保存名がプレイヤー名と関係するので、順番としてはまずプレイヤー名の保存チェック → 初期変数確認 →全データ読み込みの流れ。データ消失はunityクラッシュ時に起きるという話が多いようなので、この構造にどんな問題があるか、今後考えてみたい。
また、PvPでアクセス失敗したときに画面をいったんタイトルに戻していたが、これもひょっとしたらまずかったのかもしれないと思い、いったん戻し先をキャンペーンに変えた。具体的には、タイトルに戻ると、Kongregateにアクセスするオブジェクトが2個に増えてしまっていた。これがどう影響するかは正直よくわからない。が、想定していたことではないので避けた。これでマシになった面があれば嬉しいのだけど……
データ保存に関する大きな改善はもう少し時間がかかりそうです
ご迷惑をおかけしている方々には、本当に申し訳ないです。オンライン保存の仕組みもある程度できているんですが(さまざまな内容を文字列に変えるのと、それを戻す仕組みまで)、これがまたデータ消失原因になってもいけないので、早いことより、出来る限り確実であるよう、進めたいと思います。今週は、週明けまで動きが鈍くなると思いますが、ご容赦ください。どうぞよろしくお願いします。
--- 記事はこのゲームについて書いています
▼初の自作ゲーム24sec(Kongregate.com に飛びます)
Play 24sec Evolution, a free online game on Kongregate
▼関連:24secウィキ
【24sec】バグ修正のメモ
6/8~9ぐらいから発生し始めた、カードの表示バグ、原因が少しわかってきた。それから「無料フラシュ」さんで数多く報告いただいているセーブの件、それぞれまだわかってないこともふくめ、いったんメモ。(さっきデッキ側は表示バグを修正、ストア側はマスクを利用した動きがあったので、もう少し時間がかかりそうです)
表示バグはマスク設定が原因らしい…
検証した結果、マスク設定が原因らしい。マスクの設定そのものはおかしい使い方でないはずだけど、マスクを削除してしまうとカードの一部が欠けるというバグは無くなる。残っていると、マスクの関係性を持たせていないはずのオブジェクト間でマスク処理してしまう。なんでだ…。バグの理屈はよくわかないけど発生元がわかったという感じで、いったん調整していきます。理屈も知りたいのだけど、ウェブプレイヤーでしか発生しないということは、描画の規則が違うとか、何か表には見えない部分の違いがあるっぽい。今後も気にしておきたい。
「巻き戻る」などセーブおかしい報告
本当に申し訳ないです。消えてしまった方に深くお詫びいたします。
ゲームでの内部的なセーブのタイミングとしては、まずは何かの所持数や数字が変わるたびに、その変化は必ずセーブ。さらにカードとXP、コマンダー、ゴールド、クリスタルの5項目は変化があったたびに全データセーブという処理。残念なことにまだ、巻き戻り現象の原因がわかってないです。いったん全データセーブのタイミングを増やし、もともとフォトンを10秒おきに記録していたタイミングで全データセーブも追加しました。
この話題で思い出したのは、開発中にどう制御すりゃいいかわからないと感じたものに、「複数タブでゲームを複数併行プレイした場合の挙動」があり、もしかしたらこれを利用した方で問題が起きたケースもあるかもしれない?(複数タブの場合、保存内容に矛盾が生じたらどう対応すりゃいいんだろう……まだわかんないっす)
引き続き、消える理由、巻き戻るを探していきます。もしも、消えてしまって嫌な思いをしたにもかかわらず、その詳細を教えてくださる方がいたら、どうぞよろしくお願いします。
Kongregateのアップロード怖い
最後に。いま更新作業しながら、合間でこれ書いてるのだけど、この更新作業がいつもドキドキする。もしも公開経験があって、詳細知ってる人がいたら教えてほしいので書きます。Kongregateはゲームを一度アップロードすると、作者しか見れないプレビュー画面があり、そこにいくつかのデベロッパー用メニューがある。
で、「upload new version」というのを押すとアップロード用の画面に行く。レイアウトは最初のアップロード時とほぼ同じ。ファイルを選択してアップロードするのはいいんだけど、その下の画面サイズ設定。ここが初回設定した数字が残っているときと、消えてもう一度入力を求められるときがある。それから謎のプレビュー(+)(-)という選択も出ているときと出ていないときがある。
どちらも出てないときが、怖い。「えっ、何これ初アップだと思われてない? データ紐付け残る?」とドキドキする。同じ手順で画面遷移しても出たり出なかったりするので、すごく不安。フォーラム検索したけど、今のところ言及が見つからない。誰か知っている人、教えてください。
--- 記事はこのゲームについて書いています
▼初の自作ゲーム24sec(Kongregate.com に飛びます)
Play 24sec Evolution, a free online game on Kongregate
▼関連:24secウィキ
【24sec】ついに公開しましたー!
!!! ついに! 「24sec」 ついに公開しました。
いやー、バックエンド関係でずっと苦労していたのですが、原因わからなかったバグの正体が最後の1日で一気に氷解しました。初めてのゲーム公開です!
Play 24sec Evolution, a free online game on Kongregate
(Kongregateのサイトにジャンプします)
ブログだと時系列情報になっちゃうので、内容別でまとめたいと思い、簡単にウィキも作りました。
一人で黙々と作ってきたので、自分では気付かなかったバグなどがたぶん今後、いろいろ出てくるのかと思います。更新したい部分もあるので、時間を調整しながら、どこまでできるか。頑張ってみます。俺たちの闘いはこれからだ!