【Unity】Cameraクラス

2024年9月18日

Cameraクラスは、Unityにおいてシーンをプレイヤーに表示するための非常に重要なコンポーネントです。この資料では、Cameraクラスの主なプロパティやメソッドについて解説し、具体的な使用例を紹介します。これにより、カメラの基本的な設定や操作方法を学ぶことができます。

1. Cameraクラスの主なプロパティ

1.1 transform

CameraTransformコンポーネントを使用して位置や回転を制御します。以下のように、transformを使ってカメラの位置を変更できます。

// カメラの位置を変更
Camera.main.transform.position = new Vector3(0, 10, -10);

1.2 fieldOfView(視野角)

カメラの視野角を設定します。このプロパティを使ってズームインやズームアウトを制御できます。

// 視野角を設定 (標準的な値は60)
Camera.main.fieldOfView = 45;

1.3 orthographic

カメラの投影方法を制御します。trueにすると、カメラは2Dのような正投影になります。

// 正投影モードを有効にする
Camera.main.orthographic = true;

1.4 backgroundColor

カメラが描画しない部分に表示される背景色を設定します。

// 背景色を青に設定
Camera.main.backgroundColor = Color.blue;

1.5 clearFlags

カメラがフレームをレンダリングする前に何をクリアするかを指定します。

// 背景をスカイボックスでクリア
Camera.main.clearFlags = CameraClearFlags.Skybox;

1.6 depth

カメラの描画順を決定します。depthの値が大きいカメラが後に描画されます。

// このカメラの描画順を設定
Camera.main.depth = 1;

1.7 cullingMask

カメラがどのレイヤーのオブジェクトを描画するかを制御します。

// 特定のレイヤー(例:Playerレイヤー)のみ描画
Camera.main.cullingMask = LayerMask.GetMask("Player");

2. Cameraクラスの主なメソッド

2.1 ScreenToWorldPoint

スクリーン座標をワールド座標に変換します。

// スクリーン座標をワールド座標に変換
Vector3 worldPoint = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));

2.2 WorldToScreenPoint

ワールド座標をスクリーン座標に変換します。

// ワールド座標をスクリーン座標に変換
Vector3 screenPoint = Camera.main.WorldToScreenPoint(new Vector3(0, 10, 0));

2.3 ViewportToWorldPoint

ビューポート座標をワールド座標に変換します。ビューポート座標は0から1の範囲で表されます。

// ビューポート座標をワールド座標に変換
Vector3 worldPoint = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10));

2.4 WorldToViewportPoint

ワールド座標をビューポート座標に変換します。

// ワールド座標をビューポート座標に変換
Vector3 viewportPoint = Camera.main.WorldToViewportPoint(new Vector3(0, 10, 0));

2.5 ScreenPointToRay

ScreenPointToRayは、指定されたスクリーン座標からシーン内に向けてレイ(仮想の光線)を飛ばすために使用されます。このメソッドは、特に3Dオブジェクトをクリックしたり、画面上の特定のポイントから何があるかを判断するのに便利です。

使用例

以下の例では、マウスクリック時にマウスのスクリーン位置からレイを飛ばし、そのレイが何かのオブジェクトにヒットした場合にそのオブジェクトを取得します。

void Update()
{
    if (Input.GetMouseButtonDown(0)) // 左クリック
    {
        // マウスのスクリーン座標からレイを作成
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        // レイがヒットしたオブジェクトを判定
        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            // ヒットしたオブジェクトの名前をコンソールに表示
            Debug.Log("Hit object: " + hit.collider.name);
        }
    }
}

解説

  • Ray: レイはスクリーンの2D座標からシーン内の3D空間に向かって飛ばされる直線です。ScreenPointToRayメソッドは、そのレイを作成します。
  • Raycast: シーン内の物理オブジェクト(コライダー)に対してレイを飛ばし、ヒットしたかどうかを確認します。out RaycastHit hitは、ヒットした場合にその詳細(例えば、ヒットしたオブジェクトの情報)を格納します。

3. 使用例

3.1 カメラの移動

カメラをプレイヤーに追従させる簡単な例です。

public class CameraFollow : MonoBehaviour
{
    public Transform player;

    void Update()
    {
        // カメラをプレイヤーに追従させる
        transform.position = new Vector3(player.position.x, player.position.y, transform.position.z);
    }
}

3.2 マウスホイールでズーム

マウスホイールの入力を使用してカメラのズームイン・アウトを制御します。

void Update()
{
    // マウスホイールの入力を取得
    float scroll = Input.GetAxis("Mouse ScrollWheel");

    // カメラの視野角を変更してズームイン・アウト
    Camera.main.fieldOfView -= scroll * 10f;

    // 視野角の範囲を制限
    Camera.main.fieldOfView = Mathf.Clamp(Camera.main.fieldOfView, 20f, 80f);
}

Unity

Posted by hidepon