こちらを元に解説しています。
https://qiita.com/hanatan079/items/3675855784e14acda119
★★★★★随時更新★★★★★
2022.11.22追記
20022.11.28追記
★★★★★★★★★★★★★★★
(見本)Block.cs
//回転していいブロックかどうか
[SerializeField]
private bool canRotate = true;
//移動用
void Move(Vector3 moveDirection)
{
transform.position += moveDirection;
}
//移動関数を呼ぶ関数(4種類)
public void MoveLeft()
{
Move(new Vector3(-1,0,0));
}
public void MoveRight()
{
Move(new Vector3(1,0,0));
}
public void MoveUp()
{
Move(new Vector3(0,1,0));
}
public void MoveDown()
{
Move(new Vector3(0,-1,0));
}
//回転用(2種類)
public void RotateRight()
{
if(canRotate)
{
transform.Rotate(0,0,-90);
}
}
public void RotateLeft()
{
if(canRotate)
{
transform.Rotate(0,0,90);
}
}
(GameManager.cs)
void Update()
{
//下に落ちるように関数呼び出し
if (activeBlock)
{
activeBlock.MoveDown();
}
}
解説
【(変数)回転していいブロックかどうか】
①[SerializeField]
②private bool canRotate = ③true;
①インスペクタ呼び出し
②bool型(変数)→真偽値を入れる
③今回はtrueを入れる、trueだったら回転可能
【(関数)移動用】
①void ②Move(Vector3 moveDirection)
{
③transform.position ④+= ⑤moveDirection;
}
①何もないことを意味するデータ型
②Moveメゾット、動かしたい方向へ引数を渡す
Vector3位置指定、moveDirection引数(数値)
③現在の位置,加算して代入,引数(数値)受け取り
現在地へmoveDirection引数をプラスする
現在の位置からmoveDirectionへ動くようにする
Moveメゾット について
https://learn.microsoft.com/ja-jp/dotnet/api/system.io.file.move?view=net-7.0
https://qiita.com/hanatan079/items/a109b40b0e159779590c
代入演算子
https://qiita.com/hanatan079/items/01530bc45bab85f3d19f
【(関数)移動関数を呼ぶ関数-4種類】
①public void MoveLeft()
{
②Move(new ③Vector3(-1,0,0));
}
①public void MoveRight()
{
②Move(new ③Vector3(1,0,0));
}
①public void MoveUp()
{
②Move(new ③Vector3(0,1,0));
}
①public void MoveDown()
{
②Move(new ③Vector3(0,-1,0));
}
①他から呼び出し可能
左右上下移動
②Move=オブジェクトを移動する
動きたい方向へ引数を渡す
③左右(xが−1、1)、上下(yが1、ー1)
【(関数)回転用-2種類】
①public void RotateRight()
{
②if(canRotate)
{
③transform.Rotate(0,0,-90);
}
}
①public void RotateLeft()
{
②if(canRotate)
{
③transform.Rotate(0,0,90);
}
}
①他から呼び出し可能
②canRotate→(変数)回転していいブロックかどうか
もし回転できるブロックなら回転する
③z軸を中心に回転する
【下に落ちるように関数呼び出す】
(GameManager.cs)
void Update()
{
①if (activeBlock)
{
② activeBlock.MoveDown();
}
}
①ブロック内にブロックがあるなら
②そのブロックを下へ落下させる
【落下速度制限の実装】
(見本)GameManeger.cs
//次のブロックが落ちるまでのインターバル時間
[SerializeField]
private float dropInterval = 0.25f;
//次にブロックが落ちるまでの時間
float nextdropTimer;
void Update()
{
//Updateで時間判定をして判定次第で落下関数を呼ぶ
if (Time.time > nextdropTimer)
{
nextdropTimer = Time.time + dropInterval;
if (activeBlock)
{
activeBlock.MoveDown();
}
}
}
解説
//次のブロックが落ちるまでのインターバル時間
[SerializeField]
①private float dropInterval = 0.25f;
//次にブロックが落ちるまでの時間
②float nextdropTimer;
①インターバル時間を0.25とする
②nextdropTimer(変数)
float型について
https://qiita.com/hanatan079/items/36386ae4335bb0b06c88
【Updateで時間判定をして判定次第で落下関数を呼ぶ】
void Update()
{
①if (Time.time > nextdropTimer)
{
②nextdropTimer = Time.time + dropInterval;
③if (activeBlock)
{
④activeBlock.MoveDown();
}
}
}
①Time.time=ゲーム開始時から現在までの経過時間(秒)
もしタイマー時間よりプレイ時間の方が長くなっていたら
②nextdropTimer(次にブロックが落ちるまでの時間)
dropInterval(次のブロックが落ちるまでのインターバル時間)
現在のゲーム時間+インターバルの時間をnextdropTimerに代入
その為、一時的に落下を防止する。
③もしactiveBlock(配列内に生成されたブロック)がある時は
④activeBlockは下に移動する
【ブロックの位置を調整(スタート)】
(GameManeger.cs)
spawner.transform.position= Rounding.Round(spawner.transform.position);