Unity ScreenToWorldPoint 座標変換ガイド|2D/3D クリック位置と UI 連動
Unity ゲーム開発 座標変換 C#
結論:30秒で Unity 座標変換をマスターする
- 基本 C# コード:
Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, distanceToCamera)); - ハマりどころ:
Input.mousePosition.zは0なので必ず手動で Z 距離を代入する - 変換ツール: 下のコンポーネントでブラウザ内即時座標検証
1. オンライン Unity 座標変換シミュレーター
画面解像度とカメラ設定を入力し、スクリーンピクセル座標がどのワールド空間座標にマッピングされるかをシミュレーションできます。
🎮 この場で座標変換を計算する
カメラ設定
Screen → World
ScreenToWorldPoint 相当。screen.z はカメラからの距離(depth)
World: (0, 0, 0)
World → Screen
WorldToScreenPoint 相当
Screen: (960, 540) / Depth:: 10
2. C# 実装コード例(2D & 3D)
using UnityEngine;
public class MouseToWorldPosition : MonoBehaviour
{
[SerializeField] private Camera targetCamera;
[SerializeField] private float targetZDistance = 10f;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 mouseScreenPos = Input.mousePosition;
// 重要: カメラからの奥行き(距離)を Z に代入
mouseScreenPos.z = targetZDistance;
Vector3 worldPos = targetCamera.ScreenToWorldPoint(mouseScreenPos);
Debug.Log($"Screen: {Input.mousePosition} -> World: {worldPos}");
}
}
}
3. 注意点(ハマりどころ)
Camera.mainの null 参照とパフォーマンス問題Camera.mainは毎フレーム参照すると内部でGameObject.FindWithTag("MainCamera")が走り低速になる場合があります。Awake()や[SerializeField]で変数にキャッシュしてください。