Menu
CoddyTech

陸地か、失敗か

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 85/85。

この課題では、塔のゲームとコースの最初のセクションを完成させます。クレーン、落下するブロック、そして Mathf.Abs を使った着地テストを作ります。

challenge icon

チャレンジ

難しい

各ブロックを積み重ねるか、落下させます。

  1. 落下中のブロックがtopの y + 1 まで下がり、topの x から 1 以内にあるとき、その y を正確にその値に設定し、topにして、fallingを空にし、"Stack: " + countをログに出力します。
  2. それ以外の場合、y = -3より下に来たら、それを破棄し、fallingを空にし、Missed!をログに出力します。

「プレイ」を押してブロックを積み重ねます。着地するたびに高さがログに出力されます。その後、「確認」を押します。

自分で試してみよう

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;

    private float direction = 1f;
    private Transform falling;
    private int stack;

    void Update()
    {
        transform.position += new Vector3(direction * craneSpeed * Time.deltaTime, 0f, 0f);
        if (transform.position.x > craneEdge) direction = -1f;
        if (transform.position.x < -craneEdge) direction = 1f;

        bool drop = Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0);
        if (drop && falling == null)
        {
            Vector3 spot = new Vector3(transform.position.x, transform.position.y - 1f, 0f);
            falling = Instantiate(blockPrefab, spot, Quaternion.identity).transform;
        }

        if (falling != null)
        {
            falling.position += Vector3.down * fallSpeed * Time.deltaTime;
            // 積み重ねたブロックへの着地:次のレッスンで扱います。
        }
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド