3D から 2D に切り替える理由
主に、メインカメラ下の 3D オブジェクトの位置情報を 2D 画面に変換することです。
たとえば、頭のてっぺんの情報、血のバーのフィットとフォローなど、モンスターや NPC のニーズを 3D ワールドで実現します。
ワールド空間はスクリーン空間に座標を合わせます
メイン API: Camera.WorldToScreenPoint(Vector3 position)
画面の左下隅を (0,0)、右上隅を (Screen.width,Screen.height) とします。
サポートが必要な主なコンポーネント:
- 3D オブジェクトのワールド位置: target3dPosition
- メインカメラ: Camera.main
- メインキャンバス: mainCanvas
まず、3D オブジェクトのスクリーン空間座標を取得します。
Vector3 targetPos = Camera.main.WorldToScreenPoint(target3dPosition);
まず、メイン キャンバスの下の解像度の幅と高さを取得します。
RectTransform canvasRt = mainCanvas.GetComponent<RectTransform>();
float resolutionRatioWidth = canvasRt.sizeDelta.x;
float resolutionRatioHeight = canvasRt.sizeDelta.y;
メイン キャンバスの解像度の幅と高さと画面の幅と高さの比率を計算します。
float widthRatio = resolutionRatioWidth / Screen.width;
float heightRatio = resolutionRatioHeight / Screen.height;
最終的な画面の 2D 位置座標を計算します。
//先分别乘以宽高比值
targetPos.x *= widthRatio;
targetPos.y *= heightRatio;
//计算在中心点的屏幕坐标
targetPos.x -= resolutionRatioWidth * 0.5f;
targetPos.y -= resolutionRatioHeight * 0.5f;
一連の計算の後、targetPos はtarget3dPositionに対応するスクリーン座標です。