音楽ゲーム関係で、判定処理の方法についてお聞きしたいです。
音符ごとに決まったタイミング(例:曲開始から6.0秒)と曲開始から経過した現在時刻を比較し、その差から判定処理を行うようプログラムしているのですが、現在使用しているもの(以下に示します)から「Mathf.Absによる絶対値<=(各音符のタイミング)」や「(各音符のタイミング)プラスマイナス〇秒と現在時刻を比較」での処理にし、一定範囲内で音符の処理を行えるようにしたいと考えています。しかしながらこれらスマートな形式にしたくとも、後述するエラーなどによって上手くいきません。
###使用中のコード
Unity
1if (notetim - timer<=-0.05 /*下限*/ && notetim -timer>=-0.1 /*上限*/){ 2// notetim:音符ごとに決められた時間(-1.6していません) 3// 追記 2020/11/18:notetimは音符ごとに決められた時間です。 4// -1.6しているのは音符生成をする別のスクリプト内に使用している変数で、 5// 判定ラインの中央に来るよう-1.6しています。 6// timer:曲開始からの経過時間です 7 //ここでパーフェクト/ミス判定を行います 8}
##エラーなど
これで一応は動くのですが、ごく狭い範囲でしか判定されず極端に厳しい判定になってしまいます。ラインの中央から若干遅れているのはいいのですが、判定エリアそのものをかなり広く取りたいため上側にこの判定範囲を拡大したいと思っています。そこでそのために上限の数値を変更するとこのごく狭いエリアごと上下に動いてしまい、範囲を広げることができません。
また「それなら先に下限を決めておいて後からif文で上限を決めればいいか」と思い先に下限の位置を設定したのですが、Destroy関数の場所で範囲外としてエラーが出ています。これに関連して、この特定範囲から外れた時にミスを返し音符を消す処理を足したときも同じ現象が起きています。
##実現したいこと
if文の中身を変更し、本来のタイミングからプラスマイナス〇秒の間にボタンを押すと判定処理を返す処理で、広い判定エリアを作りたいです。
使用環境 Unity2019.1.51f VisualStudio
追記(2020/11/18)
変数の説明が間違っていたため、該当部分の追記と修正を行いました。
回答1件
あなたの回答
tips
プレビュー