ボーリングのピンのインスタンスを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();
}
}