Unityでブロック崩しのチュートリアルをする

今日はブロック崩しチュートリアルをする。

今日もチュートリアルについて翻訳してくれているサイトを参考にする。

https://baba-s.hatenablog.com/entry/my-first-unity

 

しかも今回は翻訳元が消えているとのこと。

こうやって記録を残してくれているのは本当に助かる。

ということでやっていきましょう。

 

まずはガワを作る。壁、パドル、ボールを用意する。

次にボールに初速を与えるスクリプトを付ける。

この時Gravityを外すのを忘れずに。

public class BallController : MonoBehaviour
{
    public float speed = 10;

    private void Start()
    {
        var force = ( transform.forward + transform.right ) * speed;
        GetComponent<Rigidbody>().AddForce( force, ForceMode.VelocityChange );
    }
}

 正直これでどうしてボールが動くのかがわからない。

var Forceってなんだ?

 

次にパドルを動かすプログラム。

ここも新しい表記が出てきたがhorizontalで左右に動かせるのなら簡単そう。

using UnityEngine;

 

public class PaddleController : MonoBehaviour
{
    public float accel = 1000;

    private void Update()
    {
        var force = transform.right * Input.GetAxisRaw( "Horizontal" ) * accel;
        GetComponent<Rigidbody>().AddForce( force, ForceMode.Impulse );
    }
}

 これでパドルにもRigidbodyを与えるのだが

このまま動かすとパドルが飛んでってしまう。

f:id:sashimimayonezu:20200810200512g:plain

ぶつかった衝撃で吹っ飛ぶ

どうやらぶつかった衝撃を物理的に計算してしまい、

パドルが回転してしまうようだ。

移動は物体の水平方向で指定しているのであらぬ方向へ行ってしまう。

ここでConstraitsで以下のようにチェックして拘束してやる必要があるらしい

これは覚えておくと便利かも。

f:id:sashimimayonezu:20200810200916p:plain

 

次にブロックを置いて壊すプログラムを付ける

public class BlockController : MonoBehaviour
{
    private void OnCollisionEnter( Collision collision )
    {
        Destroy( gameObject );
    }
}

こんなシンプルに作れるとは思わなかった。

これは参考になる。

次にブロックを並べる。

親子関係を作るとまとめて動かせることは覚えて起きたぐらい便利。

 

次にゲームオーバーを作る。

今回は下の壁にぶつかったらゲームオーバーとすることにした。

using UnityEngine;

public class BottomWallController : MonoBehaviour
{
    private void OnCollisionEnter( Collision collision )
    {
        Destroy( collision.gameObject );
    }
}

この手はかしこいと思った。こういった発想が必要だな・・・

最後に音を入れようと思ったがファイルダウンロードできなかったのであきらめた。

とりあえずこれで完成。

f:id:sashimimayonezu:20200810205347p:plain

Unityroomに公開します。

https://unityroom.com/games/breakblock222

今日はここまで

https://help.hatenablog.com/entry/developer-option?_gl=1*ojnx55*_gcl_au*NzA5NzY1Mzc3LjE3MTA2NTgyODA.