質問するログイン新規登録

Q&A

解決済

1回答

1421閲覧

unity テトリスブロックの落下速度の制限をするコードを理解したい

teruyoru

総合スコア13

0グッド

0クリップ

投稿2022/02/27 06:21

0

0

unity テトリスブロックの落下速度の制限をするコードを理解したい

if (Time.time>nextdropTimer)
{
nextdropTimer=Time.time+dropInterval;
if (activeBlock)
{
activeBlock.MoveDown();
}
}
}
このコードでテトリスブロックの落下するスピードが遅くなりました。
はじめ2行のコードの意味が全く分かりません。
お教え頂けますでしょうか?

下記に全コード入力しております。

C#

1 2 [SerializeField] 3 private float dropInterval = 0.25f; 4 float nextdropTimer; 5 6 // Start is called before the first frame update 7 void Start() 8 { 9 spawner=GameObject.FindObjectOfType<Spawner>(); 10 if (!activeBlock) 11 { 12 activeBlock=spawner.SpawnBlock(); 13 } 14 } 15 16 17 private void Update() 18 { 19 20 if (Time.time>nextdropTimer) 21 { 22 nextdropTimer=Time.time+dropInterval; 23 24 if (activeBlock) 25 { 26 activeBlock.MoveDown(); 27 } 28 29 } 30 } 31 32 33}

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードを示しているのにその意味がわからないということは、自分で書いたものではないんだろう、と推測しています。そういう場合は出典を明示してください。

おそらく、変数の意味がわからないんだろうと思います。それぞれの変数は以下の意味です。

  • dropInterval: ドロップする間隔(秒)
  • nextdropTimer: 次にドロップする時間
  • Time.time: ゲーム開始から経過した時間(秒)

該当のコードでは、Time.time が「次にドロップする時間」を過ぎたら、「次にドロップする時間」を再計算してドロップ処理をする、ということを繰り返しています。

追記

このパターンの処理は俗に「タイマー」あるいは「タイマー処理」と呼ばれるパターンで、ゲームを作る時に非常によく出てくるやり方です。unity タイマー処理といったキーワードで検索してみるとよいと思います。

投稿2022/02/27 06:34

編集2022/02/27 06:39
bboydaisuke

総合スコア5339

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

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

teruyoru

2022/02/27 06:42

ご回答ありがとうございます。 https://www.youtube.com/watch?v=IbHhV_-8VxQ こちらをみて勉強しております。 それぞれの変数の意味は理解いたしました。 しかしこのコードでブロックの落下速度がなぜ遅くなるのでしょうか?
teruyoru

2022/02/27 06:46

追記です。 53分30秒あたりが私がわからない部分です
bboydaisuke

2022/02/27 06:48

> このコードでブロックの落下速度がなぜ遅くなるのでしょうか? 回答に書いた通り、0.25 秒間隔でドロップするようにプログラムを書いているからです。
bboydaisuke

2022/02/27 06:53

Youtube 動画は最近投稿されたもので、コメント欄を見ると動画投稿者がコメントに回答してますね。そちらで聞いた方がよいのではないでしょうか?
bboydaisuke

2022/02/28 04:08 編集

動画を少し見ましたが、ここまでにしてきた説明は全て動画内でされているようですし、動画ではコード内にコメントが追加されていて、変数の意味などが説明されていました。
teruyoru

2022/02/28 13:32

ご回答ありがとうございます。 YouTubeのコメント欄で一度質問したものはかいとういただきましたが、2度目は回答がいただけなかったのでこちらで質問させてもらいました。 最後に宜しければご回答頂ければ幸いです。 何度も申し訳ございません。 if (Time.time>nextdropTimer) { nextdropTimer=Time.time+dropInterval; if (activeBlock) { activeBlock.MoveDown(); ① if (Time.time>nextdropTimer) このコードを書いた時点では変数droptimerを定義していないのにこの条件を満たす場合などあるのでしょうか? ② nextdropTimer=Time.time+dropInterval; と定義した時にはif文を満たさなくなりますがその場合でもブロックが落ちるのは何故ですか?
bboydaisuke

2022/02/28 14:30 編集

> ① if (Time.time>nextdropTimer) > このコードを書いた時点では変数droptimerを定義していないのにこの条件を満たす場合などあるのでしょうか? droptimer という変数はどこにも出てきません。Time.time はその機能により単調増加するため、いつかはその条件を満たします。 > ② nextdropTimer=Time.time+dropInterval; > と定義した時にはif文を満たさなくなりますがその場合でもブロックが落ちるのは何故ですか? 上で行っているのは演算及び代入であり、定義ではありません。そして if 文の条件は満たします。 文章を見るに、以下の齟齬により誤った解釈や誤った表現による誤解を生んでいると思います。 1. Time.time の意味がわかっていない - その意味は回答内にリンクがあります 2. 定義・宣言・代入(・演算)の違いがわかっていない つまらないとは思いますが、地味な C# の学習も多少やった方が良いと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問