主にUnityで作られたゲームを遊んでいるとき、自分だけなんだか上手に遊べない、「ゲームの動きが速い!」と思っていた原因が分かったので記録。リフレッシュレートのせいでした。
Unity入門書にも書いてあったものの、実際のところあまりよく分かっていませんでした。
もしかしたら今までUnityで作ったゲームが、自分以外の環境だと変な挙動になってしまっているかも。申し訳ない……。
リフレッシュレート
私が使っているモニターのリフレッシュレートは165Hzです。
前回のunity1week(初心者大歓迎のゲーム制作イベント)でリフレッシュレートによって挙動が変わるという旨を記載されている作品が複数あり、「過去に遊んだ速すぎるゲームはそれが原因だったのか!」と気づきました。
また、u1w共有会(unity1weekの知見を共有して下さる会)でも一部言及して下さっていて、確信出来ました(1:11:25~)。
リフレッシュレートで挙動が変わってしまう仕様は避けたほうがよさそうです。それを使って斬新なギミックを考えることは出来そうですが、60Hzのモニターが最も普及しているであろう現状を鑑みるとちょっと難しそうです。
ディスプレイの詳細設定からリフレッシュレートを変更できるので、60Hzの方向けに作られたゲームであれば、私が遊ぶ分にはそこまで問題ありません。気付かずに2.75倍速でプレイしてしまうことがほとんどですが……。
ゲームを作るときの注意
こちらの記事が大変参考になりました。
詳しいことはよく分かりませんが、Updateが原因みたいです。FixedUpdateを使えば良さそうです(追記:そんな単純な問題でもなさそうです……。)。そういえば「Delta.timeはやめとけ」みたいな話を何度か聞いたことがありますが、こういうことだったのでしょうか……。何にでもDelta.timeをかければいいという問題でもないようなので、難しいです……。
リフレッシュレートによりゲームの挙動が変わってしまうことが分かったので、完成したゲームをテストプレイするときはリフレッシュレートを変更して確認したほうが良さそうです。
また、パーティクルや短い時間を制御するときも同様に気を付けようと思いました。
初心者向けの罠と思いきやゲーム作りに慣れている方でも実装してしまうようなので、多分私も今後やらかすのでは……。Unity1週間ゲームジャムでリフレッシュレートで挙動が変わってしまっているであろうゲームは100作品に1作品程度ありました(過去2回全作品プレイした結果です)。気づいていないだけでもっとあるかもしれません。
おわりに
主にゲームジャムの作品で遊んでいるとき、思ったようにスコアが出なかったり挙動が明らかにおかしかったりする原因が分かりました。もしかしたらリフレッシュレートのおかげでスコアが伸びたことがあったかもしれません(だとしたら申し訳ない……)。
パソコンかキーボードが壊れたのかなと疑っていたので、原因が分かって安心しました。