質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

1091閲覧

(音楽ゲーム制作)だんだん開いていく音符の間隔を修正したい

tuna-uniko

総合スコア10

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/12/29 10:27

2Dの音楽ゲームを制作していて、NoteEditorを使用し譜面データを作成・読み込むことまで進めましたが、どうしてもノーツのタイミングがずれて困っています。
###起きている問題
ゲームを再生後音符が降るテストプログラムにて、四分間隔のはずが少しずつ遅れて降るようになってしまいます。コード内ではstart()内で全音符を生成し、スクリプト内で音符の生成位置を計算しそこに配置しています。このとき私の実装では少しずつこの間隔が開いていきます。

スクリプト参考:https://teratail.com/questions/210116
コードを参考にさせて頂きました。
<スクリプト> 音符生成部分

C#

1Instantiate(onpupre, new Vector2(reaniti, 7.5f+((inputJson.notes[a].num * 426) / inputJson.BPM)*1), Quaternion.identity);

曲のBPMは142であるため、分子である(各音符のnum×数値)を割り切ることができず循環小数が発生するため、少しずつずれているのではないかと考えています。(426はずれを修正できないかと考え数値を弄った後のためです。元は600になります)

###実現したいこと
循環小数のせいかは断定できていませんが、このごくわずかなずれの発生をなくし、どのBPMであっても完璧な四分音符の間隔で音符を生成できるようにしたいです。

使用環境 Unity2019.1.5f1 + Visual Studio

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2020/12/30 00:12

試しに「*1」を無くすとどうなりますか?
guest

回答1

0

int同士の割り算の結果は0に近いほうに丸められます。割り算で小数部も取り扱う必要があるようなので、
/ inputJson.BPMとなっている箇所を/ (float)inputJson.BPMにしてみてください。

float型は計算時に一応誤差がでますが、今回のような用途ではおそらく十分な精度があるでしょう。
仮に精度が足りないようであればより高精度で処理とデータサイズが重いdoubleやdecimalを使ってみてください。ただしdecimalはdoubleと比較してもかなり処理が遅いです。

余談ですが、循環小数になる数値は2進数と10進数では異なります。0.1とかは2進数だと循環小数ですので、doubleやfloatを使って0.1を表現すると微妙に誤差が出ます。

投稿2020/12/30 18:03

Ram.Type-0

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問