Menu
CoddyTech

設置台を作る

Coddyの「Unityゲーム:タワーディフェンス」コースのレッスン 5/18。

プレイヤーは、道の脇にある灰色の四角形、BuildPadをクリックしてタワーを建てます。クリックは画面上のピクセル単位で発生しますが、BuildPadは3Dワールドにあるため、クリックはレイに変換されます。Camera.main.ScreenPointToRay(point)は、カメラから始まり、画面上のその点を通ってシーン内へ進むレイを返し、Physics.Raycastはそのレイをたどって、最初に当たったコライダー、つまりプレイヤーがマウスの下に見ているものを報告します。クリックしたブロックに色を塗るペイントツールです。

void Update()
{
    if (!Mouse.current.leftButton.wasPressedThisFrame)
    {
        return;
    }

    Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
    if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out Paintable block))
    {
        block.Paint(brushColor);
    }
}

&&の後半はレイが何かに当たった場合にだけ実行されるため、hitには値が設定されています。続いてTryGetComponentは、当たったものが対象かどうかを調べます。レイは地面や道、木にも当たりますが、これらにはPaintableが付いていないため、クリックしても何も起こりません。

ここで扱うすべてのシーンはUnity 6のInput Systemのみを使うため、Mouse.currentでマウスを読み取ります。その位置は画面上のピクセル単位であり、ScreenPointToRayが必要とする形式です。

challenge icon

チャレンジ

中級

パッドにはBuildPadスクリプトがあり、GameオブジェクトにはtowerPrefabがArrowTowerプレハブであるBuildManagerがあります。

  1. BuildPad.csに、型がTowerのパブリックフィールドtowerを追加します。このパッドに建てられたタワーを保持し、タワーがない場合はnullになります。
  2. BuildManagerに、シリアライズされたプライベートフィールドtowerPrefab(Tower型)を追加します。Updateでは、このフレームにマウスの左ボタンが押されたとき、カメラからマウスを通るレイを飛ばします。
  3. レイがBuildPadを持つコライダーに当たり、そのパッドにまだタワーがない場合は、パッドの位置にtowerPrefabをインスタンス化し、新しいタワーをパッドのtowerに格納します。タワーがあるパッドや、パッド以外のものには何も起こりません。

Playを押していくつかのパッドをクリックし、それからCheckを押します。

自分で試してみよう

using UnityEngine;

// 後で実装:建設パッドをクリックしてタワーを配置する機能、ショップ、タワーパネル。
public class BuildManager : MonoBehaviour
{
}
quiz icon腕試し

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

Unityゲーム:タワーディフェンスのすべてのレッスン