絞り込み

最新の投稿

Unity Polygon
Unity

Unityでサウンド遅延を最低限に抑える ~CRI ADX2の導入とSonicSYNC~

ノーツタッチ時の遅延がなかなか改善できませんでした改善前は、効果音はUnity標準のサウンドアセットを使用していました。この再生方式は、安定した音声を再生するために十分な量のデータをバッファに溜め込んでから出力しています。 これまでBufferingTimeを短くしたり、音声データの先頭余白をギリギリまでカットしたりすることで、体感上遅延が少なくなるように工夫してきましたが、ノーツが多く同時に効果音が再生される箇所では遅延が若干感じられました。 ▼ ノーツの少ない箇所(遅延が小さい) ▼ ノーツの多い箇所(遅延が大きい) プロセカで使われている SonicSYNC 技術の解説動画を発見しましたたまたまチャンネル登録していた CA.Developer チャンネルで、「プロジェクトセカイ」の音声再生の仕組みとSonicSYNCで変わったこと | CA.Unity#3 という動画が、5日ほど前に投稿されました。 「プロジェクトセカイ」の音声再生の仕組みとSonicSYNCで変わったこと | CA.Unity#3 https://www.youtube.com/watch?v=7ql4CNBehes SonicSYNC とは、「スマートフォンでの音声再生遅延を限りなくゼロにする機能」で、ハードウェアと同期して即座に音声信号を生成することにより、ソフトウェア処理による再生遅延を限りなくゼロにできる技術です。音声処理が短時間で終わるように細かく分割し、音が必要になった時にすぐに準備して鳴らすという工程を繰り返すことで、これまでのようにバッファーに溜めておく必要がないため遅延が改善されます。 個人が無償で使えるADX2 LEというミドルウェア本来であれば企業向けである ADX2 が有償で提供されているのですが、学生や個人が無償で使うことができる ADX2 LE というものがあります。(コンテンツの売り上げが1,000万円以内であることなど、一定の条件はあります。)今回 ADX2 LE を導入して、ノーツタッチ時の効果音の遅延を改善していきたいと思います。 必要な音声ファイルを生成する今回の ADX2 では、音声ファイルを以下のものに変換する必要があります。 .acf: 環境設定やACBファイルから参照されるキューシート共通の情報を格納する .acb: キュー情報、再生パラメータ、メモリ再生用波形データをキューシート単位でパッキング .awb: ストリーム再生用波形データをキューシート単位でパッキング(ストリームにする場合のみ、今回は使用しない) これらのファイルを生成するために、「CRI Atom Craft」というソフトウェアを使用します。 CRI Atom Craft https://game.criware.jp/learn/tutorial/atomcraft/ 変換元の素材ファイルは以下のものが使用できます。 ファイル種類: WAVファイル(.wav)または AIFFファイル(.aif) チャンネル数: 最大6チャンネル 量子化ビット数: 16ビット 今回は1つのキューシートに、Perfect Great Good の3つのサウンドを登録します。 最後の書き出し時には、Unity Assets出力 にチェックを忘れないようにしましょう。 書き出したファイルは、Unity の CRIWARE からインポートすることで、StreamingAssets フォルダに保存されます。 ハマったところUnity 側で CRI Atom のスクリプトがありますので、読み込んだACFファイル ACBファイル を指定します。 ここで、Don't Destroy On Load のチェックをつけておきます。読み込み後に destroy してしまうと、Sceneを2回目に読み込んだ際(2曲目をプレイする際)にサウンド再生ができなくなります。 そして、Don't Initialize On Awake のチェックを外しておきます。 また、ビルドする際に 強制的にUnity 標準オーディオが無効化 されます。 Unity標準のオーディオが無効化されることで、アプリケーションのCPU負荷およびメモリ使用量を軽減できるそうです。 しかし今回は、プレイ音源は Assetbundle を使用しているため、Unity標準オーディオと共存させます。 CriWareBuildPreprocessorPrefs.asset という設定ファイルを書き出し、Mute Other Audio を解除します。 これでビルド時に、強制的にUnity標準オーディオが無効化されないようになります。 導入後の遅延の測定計測した結果、ノーツをタッチしてから効果音が鳴るまで、約60~70ミリ秒まで遅延を減らすことができました。 CRIWAREの公式サイトでは、iOS・Android共に「画面をタップしてから音が出るまで」53ミリ秒程度と記載されていたので、vivace(製作中の音ゲー)のタッチ入力のアルゴリズムに改善方法があるということになります。 しかし、ノーツが多い時の効果音遅延が劇的に改善されているので、DEMON譜面をプレイされるガチプレイヤーさんたちには大きなアップデートになるのではないでしょうか。もう少しアルゴリズムを改修してからストアにリリースしようと思いますので、お楽しみに〜 ダウンロードはこちらさっきDBをみてみると、登録ユーザー数が299人になっていました! これを見たあなた、ぜひ300番目のプレイヤーになってください AppStore: https://bit.ly/vivace-app-ios GooglePlayStore: https://bit.ly/vivace-app-android

> 内容を見る

Unity Polygon
Unity

Unityでクソデカリバーシを作った日記なのにリバーシ要素があまりにも薄すぎる なんでやねん

初めてUnityを使いまして、習作としてリバーシを作りました。その名も「大は小を兼ねる クソデカリバーシ」です。 Unityroomで公開しています。https://unityroom.com/games/scalable-reversi さて、日記形式で開発記録を掘り返していきます。Gitのlogから記憶を呼び起こしているので捏造等あるかもしれません。 Unity未経験のプログラミング経験者目線での進捗なので、「はーこういう進め方もあるのかー」と参考にしてみてください。だからって一番最初にShaderに取り掛かるやついないと思うぞ1週目7/31(土)Affine変換(Wikipedia)を用いて一気に大量のコマを動かすことのできるリバーシを作ろうとUnityを触り始める(テスト前に何やってんだ) ちなみにこの頃はZ/8Zが体をなさない(乗法逆元を持たない元が存在する→複数のコマの座標を変換したとき同じ座標に移動することがある→409 Conflict)ことをどうしようか悩んでいた8/1(日)適当なサイトに書いてあるのをパクってShader Graphでグリッドを作った8/2(月)Input#GetKeyDown(KeyCode)とかTransform#positionとかSpriteRenderer#colorとかを使ってカーソルの移動を実装 この時点でキー操作はできるようになってて割とモチベが湧いた8/3(火)Prefabの概念を知る コマをPrefabをInstantiateすることで配置できるようになる8/4・5(水・木)開発おやすみ 多分水曜は英語の期末課題を片付けて、木曜は試験がなくなったので部室でシャニマスしてた8/6(金)なぜか急にリバーシが完成した はやい ちゃんと1weekじゃん もしかしたらcommitせずためてただけで木曜も開発してたのかも あとはスコアをリアルタイムに表示するUIを作成2週目8/7(土)おやすみ8/8(日)Cg/HLSL言語を使ってフラグメントシェーダを書く これによって盤面サイズが可変になった(ということは、Affine変換のアイデアはもう捨てている) ちなみにShader Graphでも変数使えるのであんまり書く意味なかったみたいですよ8/9(月)おやすみ8/10(火)ゲームプログラム側を可変サイズに対応させるのとタイトル画面の作成とSingletonパターンを覚えるのとSEの追加 TextMesh Proの存在を知る8/11(水)Sliderを動かすとリアルタイムに値が表示されるようにするなど8/12(木)TextMesh Proの導入によってGitHubの言語統計が滅茶苦茶になったのでgithub-linguistについて調べて除外する8/13(金)グリッド全体のサイズを調節して常にグリッドが正規直交正方形になるように これせんと斜めがめっちゃ見ずらいんですわ 盤面リセットとかも実装 Unityゲーム開発者ギルド(通称UGDG)に入る ワクチンの副反応で9時に寝る3週目8/14(土)Unityのコルーチンについてなんとなーく知る あとMaterialPropertyBlockを使うことでMaterialを直接編集しないように8/15(日)ちっさいリファクタリング8/16(月)おやすみ8/17(火)ツイートリンクを実装8/18(水)スクリーンショットの保存を実装(WebGL版はJavaScriptのblobを活用するなどしている(ソースコード)) C#の拡張メソッドの作り方を知る8/19・20・21(木・金・土)完全乱択のクソザコAIを実装(完成!) ちなみに3日かかったのは変数名を変えたときに1つ残してしまったせいでパス周りの実装がバグってたから感想本当は1,2週間で完成させるつもりだったのがだいぶ長引いてしまったけど、色々と身についたので悪くはない 来月のunity1weekに向けて頑張ります

> 内容を見る

Unity Polygon
Unity

MyCrane制作記1

こんにちは.しげです. 今回から,現在製作中のゲームである「MyCrane」の制作について少しずつ紹介していきます.多分長くなると思うのですが,よろしければお付き合いください.クレーンゲームは...クレーンゲームと言えば,誰もが遊んだことがあるのではないでしょうか? 僕は,小学生のときによく遊んでいたのが懐かしいです.下手くそで全然景品獲れなかったですけどね(). ムキになってお金を入れまくるとお小遣いも一瞬でなくなるものです.悲しきかな. そんなクレーンゲームですが,遊ぶとお金がかかってしまいます.そこでお店ではなく,ネットのゲームで遊べば無料で遊んだ感を得られるゲームはないのかと思って,ネットの海を探しました.2Dのクレーンゲームとかは見つけられましたが,3Dとなるとそんなに多くないし,現実には2本ヅメの筐体や3本ヅメの筐体など,特徴ある筐体が無数にあります. そのすべてを網羅するのは簡単ではないですし,リアリティがあるものも少なく感じます. そこで「MyCrane」というリアリティを求めたクレーンゲームの製作をすることになりました.モチーフにした筐体MyCrane Type1のモチーフになったのは,ナムコ社から出ている「CLENA 2K」という筐体です.CLENA 2Kの写真は持っていないので,ここでは代わりにCLENA 2の写真を貼っています. CLENA2シリーズの操作パネルは,MyCraneの操作UIにも導入されているデザインです. 柔軟なフィールド設定が可能な2本ヅメの筐体です. MyCrane Type2のモチーフになったのは,北日本通信工業社から出ている「DecaCre α Ver1.5」という筐体です. ソレノイドコイルを使用した大型の3本ヅメが特徴の機種です. ボタン操作式とレバー操作式の筐体があり,レバー操作式の筐体には制限時間設定があります. MyCrane Type3のモチーフになったのは,エスプラン社から出ている「CARINO Ⅲ」という筐体です(写真はCARINO Ⅱです). 3本ヅメの小さなクレーンゲーム機です.カプセル型の景品が入っていることが多い機種です. 確率設定があるため,毎回獲れるとは限りません. 以上3機種を製作中です.今後機種を加えていく予定もあります. プロジェクトサイトはhttps://sites.google.com/view/mycraneになります.よければ訪ねてやってください.テスト用のプレイファイルにもアクセスできますよ! それでは初回はこのへんで.

> 内容を見る