タワーを作ろう
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 67/67。
クレーンが土台の上を左右に移動します。Spaceキーを押すたび、またはクリックするたびに、クレーンからブロックが真下に落ちます。積み重ねたブロックの上に落ちたブロックはその場に残り、次のブロックはその上に着地させる必要があります。外れたブロックは落下していきます。積み重ねたブロックの高さがスコアになります。
ゲーム全体をクレーンに取り付けた1つのスクリプト、Craneに書きましょう。
チャレンジ
難しいCrane に Crane スクリプトを書きます。Inspector で blockPrefab(Block プレハブ)、top(Base、これまでに積み上げたスタックの一番上)、craneSpeed(3)、craneEdge(4)、fallSpeed(7)を設定します。
- クレーンは毎秒
craneSpeed単位の速さで x 軸に沿って移動します。craneEdgeを越えると左に折り返し、-craneEdgeを越えると右に折り返します。 - Space キーを押すか左クリックすると、クレーンの x 座標で、クレーンより 1 単位下に Block を落とします。ブロックが落下中は、キーを押しても何も起こりません。
- 落下中のブロックは毎秒
fallSpeed単位の速さで下に移動します。 - その y 座標が
topの y 座標 + 1 まで下がり、x 座標がtopの x 座標から 1 未満の距離にあると、ブロックは着地します。y 座標を正確にtopの y 座標 + 1 に設定し、そのブロックを新しいtopにして、スタックの高さをStack: 1、Stack: 2などとログに出力します。 - 着地しなかったブロックは落下し続けます。y = -3 より下に落ちたら破棄し、
Missed!とログに出力します。
Play を押してタワーを作り、それから Check を押します。
自分で試してみよう
using UnityEngine;
public class Crane : MonoBehaviour
{
[SerializeField] private GameObject blockPrefab;
[SerializeField] private Transform top;
[SerializeField] private float craneSpeed = 3f;
[SerializeField] private float craneEdge = 4f;
[SerializeField] private float fallSpeed = 7f;
void Update()
{
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。