![]() パステル オービット |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
---|
ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3
|
![]() ゴールデンな一週間が過ぎ去って久しい昨今。皆様如何お過ごしでしょうか。 過ぎ去って久しい感じがするのは本業に苛まれていたからであると信じたい所ですが、 精神的本業のアプリ制作への時間配分がなかなか思う様にはいかず、 そろそろ、ヤフオクにて「精神と時の部屋の入場券」を本気で探し始めたTeamDyquemです。皆様こんにちは。 1万円までは即決します。 東十条を「ひがじゅう」と呼ぶのは古来より定められたアラフォーの呪縛かもしれませんが、 それを即座に「僻み充実」の略と勘違いできる超絶ドM後輩の発言に、今日も心の緑地が荒らされる気分。 以前に少し紹介したアプリ作成仲間でもあるこの後輩。 彼もまたマルチプラットフォーム化を施したエンジンを漸く完成させ、 本格的にアプリ本編開発を開始した模様。 リリースの暁には、本ブログにても改めてご紹介させて頂けましたらと思います。 ![]() マルチプラットフォームネタと可変長フレームレート さて、マルチプラットフォームネタ第三弾で御座います。 今回は、マルチにとどまらないネタとしてエントリーを構成してみました。 以前のエントリー 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1」 「iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ」 シリーズエントリーと致しまして、上記も併せてご覧頂けましたら幸いです。 さて。 マルチプラットフォーム化により、iOS系デバイス、iOSシミュレータ、 及びWindows環境にて同一の共通コードをビルドし実行する事が出来る様になってくると、 そもそも実行速度に違いのある幾多のデバイス上でありますから、 同じゲームでも環境によりフレームレート差違が生じるケースを考慮する事になるでしょう。 昨今では一言にiOS系デバイスと言いましても、iPhone3G辺りの古いデバイスから最新のiPhone4やiPad2等、 そのデバイス処理能力にも大きな差が生まれています。 古いデバイスをサポートしないという選択肢も存在しておりますが、それだけでは無く、 アプリケーションのフレームレートを動的に柔軟に設定出来る様、 エンジンの根本から考慮し設計していく事は様々なメリットをもたらします。 フレームレートとは1秒間に何回画面を更新するかという数値であります。 その上で例えば、秒間60回の更新処理を想定している様なゲームにおいて、 その処理完了が60分の1秒以内に合わずに、 結果処理落ちと呼ばれる現象が発生し画面がスローになってしまうパターン、 昨今では多くありませんが、こうしたゲームを見かける事もあるかと思います。 昨今の様に様々なデバイスが存在すると、例えばiPhone4ではスムーズに動くが、 iPhone3では処理落ちが発生しスローなゲームになってしまうという可能性が出てきます。 可変長フレームレートとはつまり、こうしたケースに対応する為の手法の一つでありまして、 1フレームの処理に対し時間経過を測定し、これをDT値と呼んだ上で毎フレーム運用します。 例えばあるフレームにおいてその処理が問題なく60分の1秒で完了しているならば、 それを 1.0 という係数へ正規化しDT値とします。 30分の1秒かかってしまったならば、その時は2.0という係数を算出しやはりDT値とします。 この上で。 例えば、ある敵キャラクターが毎フレーム1ドット移動する様な処理になっているとしましょう。 この敵キャラクターの座標値を正直に +1 ずつしていると、 処理落ちした際には当然スローな動きになってしまいます。 ここでDT値が登場します。 敵キャラの座標 += 1; としてる様な箇所は全て、 敵キャラの座標 += 1.0 * DT; という形に統一します。 ゲームが進行するありとあらゆる箇所にてこのDT倍率付加を採用するわけですね。 座標だけではなく例えば100秒でタイムアップとなるゲームならば、 int timer = 100*60; で timer--; としていたかもしれませんが、 可変長フレームレート環境下ではこの処理は上手く行きません float timer = 100.0f * 60.0f; とし、 timer -= 1.0f * dt; とする事で、 フレームレートに依存せずにタイマーを進行させる事が可能になるわけです。 この様に実装する事により、 デバイスの処理能力に依存せずどの機種どの環境においても、 又、処理落ち時においても画面の更新頻度が下がるだけで、 本編の進行速度自体は一定となるゲームが制作可能となるのです。 ![]() 実装例 さて、具体的とまではいきませんが簡単なサンプルを。 まず、例えば下記の様なゲーム本編管理クラスの一部抜粋を想定します。
このクラスを、各機種のメインループにてドライブしていくわけですが、 例として iOS版、 Windows版のメインループサンプル抜粋をご覧下さい。 Windows版
iOS版
これらはあくまでも単純なサンプルではありますが、 本実装する場合におきましても理論は変わりません。 ![]() 実装コストと、将来への展望 コストの問題等によりそういった処理は行わず、 単にiPhone3をサポートしないといった選択肢も存在してはおりますが、 それはあくまでも単に現在現時点に対してたまたま有効な解決策であったというだけであり、 エンジン設計という観点から考えるならば、 今後どの様なデバイスが突然登場しても対応出来る合理的な設計ポリシーを、 予め敷設しておくに越したことはありません。 ![]() さらなるメリット 現時点にてiPhone3等の比較的低速なデバイスにおいても、 例えば特に処理落ち等が発生していないプロジェクトがあるとしましょう。 この案件へ可変長フレームレート実装を施す意味は無い様に思えるかもしれません。 しかし、フレームレートが可変する事のないケースにおいても、 DT値ベースでの運用は多大な付加価値をもたらします。 進行速度の任意可変を施すことが出来るという事そのものが既に大きな機能的優位性であり、 寧ろ、こちらが真のメリットであると言っても過言ではありません。 格闘ゲーム等で、激しいコンボ中に攻撃がヒットする度画面が一瞬ストップする演出、 敵キャラクターのHPを全て奪いスローになりながらトドメの技がアップになる演出、 映画マトリックスの様に、登場人物は空中でスローになりながらもカメラは等速に進行する様な演出、 これらは全て、進行速度任意可変により実現可能な技術であり、 DT値運用を用いている場合のメリットです。 フレームレートが可変しなくてもDT値は任意に生成する事が出来ますからね。 その発展系としてキャラクター毎にDT値を持っても構わないわけです。 それぞれのDT自体をツリー構造で繋ぎ、システム抜本にマスターDTを用意。 ここへフレームレートによる可変長性を反映、枝のDTではそれぞれが演出用に値を制御。 こうする事で全てが一貫したツリーDT運営が可能です。 また、開発時やデバッグ時の繰り返しテストする冗長なシーンの効率向上として、 「全体早送り機能」や「全体スロー機能」なんて事も簡単に実装する事が出来ます。 根本のDTを0にすれば、既にそれはポーズ機能です。 これらの手法はTeamDyquem的お気に入りでありまして、 商業ゲームにおいても10年以上実装してきておりますよ。 さて。GWが明けて一気に弛緩ムードの日本列島で御座います。 次の祭日はいつなのだろうと思うと泣きたくなりますけれども、頑張って参りましょう!
![]() シリーズ記事まとめ ■Aニュース、ガジェット通信 寄稿記事 「『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」」 「『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」」 ■ゲーム制作初心者さん向け系 ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事 ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ? ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法 「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」 「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」 「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」 「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」 「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」 ■「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた ■個人でも出来る、マルチプラットフォーム開発関連 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4」 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3」 「iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ」 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1」 ■リリースしました系 「PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。」 「TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app」 「アプリ新作「ネコりす マカロン」をリリースしました」 「埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app」 「アプリ新作「ひよこガーデン」をリリースしました」 「TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース」 「iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました」 「自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました」 「iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました」 「iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました」 「秋刀魚は関係ないけれど、新作「i-Wishbone」リリース」 「アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた」 「「泡リス 女子部」、販売開始」 「AppBankにまりも紹介記事が!」 「ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app」 □ビジネス系 「ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム」 「ゲームプログラマが語る。秀丸エディタのビジネスモデル」 ■SFネタ系 「ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?」 「ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話」 「iPhoneアプリ作者が語る。流れ星に馳せる真実」 「iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意」 「iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?」 ![]() |
||