Unityで弾の移動などを実装しているとき、コンソールに以下のようなエラーが出て困っていませんか?
Assets/Bullet.cs(11,58): error CS0117: ‘Time’ does not contain a definition for ‘deleteTime’
このエラーは、結論から言うとコードの単純なスペルミス(打ち間違い)が原因です。 今回は、このエラーの原因と具体的な修正方法、そしてなぜそのコードが必要なのかを分かりやすく解説します!
エラーの原因:Timeクラスに「deleteTime」は存在しない
エラー文にある 'Time' does not contain a definition for 'deleteTime' というのは、「Timeという機能の中に、deleteTimeなんて定義(設定)はないよ!」という意味です。
ゲームの移動処理でよく使われる「フレーム間の経過時間」を表す単語は、deleteTime(デリートタイム)ではなく、正確にはdeltaTime(デルタタイム)です。
音が似ているため、タイピングの際にうっかり間違えてしまうことがよくあります。
【解決策】修正前と修正後のコード
エラーを直すには、プログラム内の Time.deleteTime を Time.deltaTime に書き換えるだけでOKです。
❌ 間違っているコード(修正前)
C#
// deleteTimeになってしまっている
transform.Translate(Vector3.forward * speed * Time.deleteTime);
⭕ 正しいコード(修正後)
C#
// deltaTimeに修正
transform.Translate(Vector3.forward * speed * Time.deltaTime);
コードを書き換えて保存(Ctrl + S)し、Unityエディタに戻るとエラーが消えるはずです。
豆知識:なぜ「Time.deltaTime」を掛ける必要があるの?
Unityの Update() 関数は、1フレーム(画面が1回更新される間。1秒間に何十回も実行される)ごとに呼び出されます。
もし Time.deltaTime を掛けずに speed だけで移動させてしまうと、パソコンの性能が良い(フレームレートが高い)環境ほど、弾がものすごい速さで飛んでいってしまうというバグが起きてしまいます。
そこで、前のフレームからの経過秒数である Time.deltaTime を掛け算することで、「どのパソコンで遊んでも、1秒間にspeedの分だけ進む」という公平な動きにすることができます。移動処理には欠かせない大切なコードです!
まとめ
Unityで error CS0117: 'Time' does not contain a definition for 'deleteTime' が出たときは、Time.deltaTime のスペルミスを疑ってみてください。
- ❌
Time.deleteTime(間違い) - ⭕
Time.deltaTime(正しい:頭文字のdとt以外は小文字)
一文字直すだけで簡単に解決するので、焦らずチェックしてみてくださいね。快適なゲーム制作ライフを!


コメント