ドリー ズーム(別名 "トロンボーン" エフェクト)
傾斜円錐の使用

カメラからのRay

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

視錐台を理解する のセクションではカメラのビューのどの地点でもワールド座標の線に相当することを説明しました。その線の数学的な表現を,もちいることが便利なときがありますが,UnityはこれをRay という形で提供しています。Rayはつねにビューの点に相当するのでCameraクラスはScreenPointToRay および ViewportPointToRay を提供しています。この二つの違いはScreenPointToRayが点をピクセル座標を必要とするのに対してViewportPointToRayは正規化された座標を0..1 の範囲(ビュー上で0が左または下,1が右または上)です。この各々の関数は原点とそこからの向きを表すベクトルから構成されます。RayはCameraのtransform.position ではなくニアクリッピング平面を起点としています。

Rayキャスティング

Rayの最も一般的な使用方法は レイキャスト をシーンに向かって実行することです。raycastは仮想の “レーザービーム” をrayに沿って原点から発してシーンのコライダに衝突するまで進みます。次にオブジェクトの情報についてRaycastHit のどこに当たったのかが返されます。これは画面上でオブジェクトを見つけるのに便利な方法です。例えば,マウス位置にあるオブジェクトは次のコードで判定出来ます:

var hit: RaycastHit;
var ray: Ray = camera.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast(ray, hit)) {
    var objectHit: Transform = hit.transform;
    
    // Do something with the object that was hit by the raycast.
}

Rayに沿ったカメラの移動

画面位置に対応するrayを取得してカメラをそれに沿って移動させると便利な場合があります。例えばユーザがオブジェクトをマウスで選択して同じ画面位置を “ピンで維持” しながらズームインしたい場合があるかもしれません(カメラが部分マップを見ている時に便利かもしれません)。これを行うためのコードは比較的容易です:-

var zooming: boolean;
var zoomSpeed: float;

if (zooming) {
    var ray: Ray = camera.ScreenPointToRay(Input.mousePosition);
    zoomDistance = zoomSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
    camera.transform.Translate(ray.direction * zoomDistance, Space.World);
}

ドリー ズーム(別名 "トロンボーン" エフェクト)
傾斜円錐の使用