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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

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

Q&A

解決済

1回答

561閲覧

タイミング合わせに要したフレーム数を一定にしたい

Olphin

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

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

0グッド

0クリップ

投稿2020/05/27 10:14

編集2020/05/27 11:02
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioScript : MonoBehaviour { private AudioSource audioSource; private float nowtime = 0.0f; //曲の再生されてからの時間 private float nexttime = 0.4444444f; //次のタイミング秒数 private int framecount = 0; //タイミングが来るまでかかったフレーム数 private int loopcount = 0; //何回タイミングループしたか // Start is called before the first frame update void Start() { audioSource = GetComponent<AudioSource>(); } void FixedUpdate()//0.0167秒に必ず呼ばれる(はず) { nowtime = audioSource.time; framecount++; if (nowtime >= nexttime) {       loopcount++; nexttime = 0.44444444f * loopcount; Debug.Log("Time" + nowtime + " Frame" + framecount); framecount = 0; } } }

イメージ説明

0.44444秒にいちど読み込まれる処理を配置しました
しかし毎回起動するごとにログの内容が異なります(ログ右側にあるFramexxのログ)

1.Frame:xxの情報が一定にならないのはなぜなのか
2.何回やっても結果を一定にする何か良い方法はないでしょうか?
フレーム数を均等にするのではなく起動ごとにログの内容が変わるのを防ぎたいです

よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

FixedUpdateはデフォルトだと0.0167秒毎に呼ばれます。
0.44444444秒は上記数字で割り切れないので、絶対にいつかフレーム数がズレます。
更にfloatは元々誤差が出るので起動の度に値が変わると予想されます。(詳しくは「unity float 誤差」でググってください)

「Edit > Project Settings > Time」の「Fixed Timestep」でFixedUpdateの頻度が変えられるので、0.44444444を割り切れる数字にすると緩和するかもしれません。

投稿2020/05/28 01:04

sakura_hana

総合スコア11427

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

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

Olphin

2020/05/28 13:34

割り切れる数値でやってみましたが結果は変わらず StartCoroutine もだめでした 時間をFLOATで取り扱うという意味では同じのようです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問