今日もおだやかな日にしました。そしてそれはまぁ今日で終わりです。
これからやることをある程度決めたので、まぁ、いいかんじにやっていきましょう…。
年越し前、おふねのお手伝いをちょっとだけしていました。
元はというと蕎麦の同期が微妙に厄介だったのをうまく治す方法、みたいな感じだった覚えがあります。
もはやUdonでよくない?(そういう意味ではない) という提案を思いついてみたところ、案外マジでよさそうなことがわかってしまい。
そうするとついでに日の出もできるので良いね、ということでやりますかーとなりました。
…概ねうまくいってました。色々検証とかもしてました。
今回起こしてしまった不具合は以下です。
- タイムゾーン依存の吸収が行われていなかった
- 動画のSyncスイッチの設定がグローバルになってた
後者は完全に運用のミスです。「この辺最後にチェックしてもらったほうがいいな~」とか思っていたことを完全に忘れていました。書いてなかったのが本当に最悪。
これによって度々配信がアレしてしまった方が居たと思います。本当申し訳なかった。
…そしてまぁ。タイムゾーンね…。
ちなみに本日の失敗は「DateTime.Parseで拾ってきたDateTimeはToFileTimeUtcではなくToFileTimeを使うべきだった」でした
— phi16 (@phi16_) 2020年12月31日
まず、「全員同じものを見るべき」という願いの下、日の位置はタイムゾーンに依存しません。つまり全てUTCを基準として計算することが必要十分です。
DateTime.Now で拾ってきた時刻はそのままだとローカルタイムゾーンに依存します。しかも DateTime.Today とかも勿論使えません。
「日本時間の0:00」をうまく指定する方法を探していると、FileTime という謎概念があることがわかりました。これは絶対時間っぽいので使えそうです。
そこで「日本時間の0:00をFileTimeに予め変換」「その数値を各自でデコード」「後は DateTime.Now と比較」という流れを考えました。
…予め変換しておく部分で間違いがありました。それがそのツイートです。
ToFileTimeUtc の Utc が指しているのは「引数に取ったDateTimeのタイムゾーンがUtcである場合」ということ…っぽいんですね。
そして FromFileTimeUtc に対しては、「関数が返すDateTimeのタイムゾーンがUtcである」ということだと思います。…はい。
FileTime という概念をちゃんと理解していれば良かったのかもしれませんが、私はなんだかUtcだったら全員共通だからいいのかなーと思って ToFileTimeUtc を使ってしまいました。
その後 FileTime の純粋なデコーダに通してみるとこの数値は 日本時間 0:00 じゃなかったことがわかりました。
でも日本のタイムゾーンでテストする分には「ToFileTimeUtc で+9ズレる」「FromFileTimeUtc で-9ズレる」ので正常動作するんですね。はい。
というわけで見事検証不足で死にました。本当にすいません。
まぁプログラマは絶対にいつか時刻周りでバグらせるというアレをやってしまいました。慎重にしようという気持ちだけはあったんだけどPCのタイムゾーン弄りたくない気持ちがあったのがよくなかった。
これからはちゃんと検証します。ご迷惑をおかけしました。本当にsp4ghetさんありがとうございました。
一応時間は掛かりましたが修正ができ、(多分) ちゃんと動いてたと思うのでギリギリよかったかな、とは思います…。
反省。
まぁ少なくとも5時の瞬間は本当に最高でした。
あとRyoRIさんの環境だと太陽が見えてなかった問題もありました…。こう。これは想像でしかないんですけど。
あの空、Default Skyboxだった気がするんです。自前のMaterialじゃなくて。
そうすると何が起きるかというと、他のシーンと共通のMaterialを使うということです。Materialが固有に存在していないのならば。
よって、別シーンで何らかの情報書き込みが行われたそのDefault Skyboxは、別ワールドに行っても恐らく状態を引き継ぎます。
今回はもしかしたら…それで「太陽を描画しない設定」が入ってたのかもなぁ、という、話。
なので別ワールドロードでは治らず、VRChat再起動で治る。現象を説明できます。
まぁ、わかんないんですけどね。怖いね。
というわけで…各位ご迷惑おかけしておりました。そんな気にするとかではなく、次回の教訓としてちゃんと記録しておこうという次第です。
次回どうなるかはまぁ、よくわかりませんが…。
そういえば0時0分のタイミングで花火が上がるようにしたはずなんだけど、みんな花火手動で撃ってたからちゃんと動いてたかわからんね…。
なんともいえないわ。
おなかがすきました。
明日は順当に作業の日です。アレもアレだが。
…共に、私が次に作るものが、今日なんとなく… わかってきました。
それはそれでやります。あまり外には出さないと思います。
「何か作りたい」じゃあダメなんですよね。「何かしたい」から作るんですよね。そうですね…。
いつになってもそういう基本がわかってないの、成長の無さって感じです。
今まで作ってたものとはやっぱり違うのだけど、でも芯のところではやっぱり私だなぁ、っていう。そんなことを思いました。
良いものに成るといいですね。
まぁまずメインタスクくんなんですけどね。
では。良い夢を。
追記: 私は「必要悪」なんだろうな、ということを思ったりしたけど、これはまぁいつかの機会で…