Unityでボーリングゲームを作る #6 ピンのインスタンスを生成する

投稿者: | 2020-01-31


ボーリングのピンのインスタンスを10本生成してみます。

面倒ですがピンを置く位置を10本分スクリプトにそのまま書きました。

void GenerateNewPins()
{
    Vector3[] newPinsPos = {
    new Vector3(-42.29f, 0.02f, 0.0493f),new Vector3(-42.85f, 0.02f, 0.42f),new Vector3(-42.85f, 0.02f, -0.35f),
    new Vector3(-43.34f, 0.02f, 0.79f),new Vector3(-43.34f, 0.02f, 0.02f),new Vector3(-43.34f, 0.02f, -0.769f),
    new Vector3(-43.86f, 0.02f, 1.178f),new Vector3(-43.86f, 0.02f, 0.408f),new Vector3(-43.86f, 0.02f, -0.39f),
    new Vector3(-43.86f, 0.02f, -1.16f),};

    for(int p = 0; p < 10; p++)
    {
        Instantiate(bowling_pin, newPinsPos[p],Quaternion.Euler(0f, 0f, 0f));
    }

}

シーン上のボーリングのピンを選択して、Transformの値をそのまま入力しています。

キー入力でこの関数が実行されます。

if(Input.GetKeyDown(KeyCode.G))
{
    GenerateNewPins();
}

できましたが、本来はピンがもう少し上で生成されて、ピンをセットする機械の子オブジェクトになって、親オブジェクトが降りてくるアニメーションと一緒に動いてレーン上に配置されます。

なので、プレイ中にピンが持ち上がったところで停止ボタンを押して、ピンのポジションのY座標を見ます。

しかし、これはローカル座標なので、選択したピンをCubeの下からドラッグアンドドロップで移動します。

これでワールド座標がわかりました。

ボールが通過したときに自動で機械が動くようにする

今までキー入力でピンを持ち上げたり、倒れたピンを払いのけるアニメーションが始まっていましたが、ボールが通過した直後に自動で開始されるようにします。

ピンをセットするためのスクリプトだけを追加したゲームオブジェクトをピンの近くに移動します。

これにBoxコライダーを付けて、Edit Colliderをオンにします。Is Triggerのチェックを入れておきます。

シーン上でBoxコライダーの大きさを変えられるようになるので、ボールが通過したときに当たる大きさにします。

Edit Colliderをオフにして、オブジェクトの位置を調節します。

ボールのプレハブに「Ball」タグを付けます。

Boxコライダーに「Ball」タグのついたオブジェクトが侵入したら、ピンのセットが始まるようにします。

private void OnTriggerEnter(Collider other)
{
    if (other.tag == "Ball" && !setpin)
    {
        CountStandingPins();
    }
}

コメントを残す

メールアドレスが公開されることはありません。