1. 程式人生 > >Unity將螢幕座標轉為世界座標的思路

Unity將螢幕座標轉為世界座標的思路

1.使用ScreenToWorldPoint將獲取的螢幕位置直接轉成世界座標:

            坑1:獲取的螢幕座標Input.mousePosition是一個2d座標,z軸值為0,這個z值是相對於當前camera的,為零表示z軸與相機重合了,因此給ScreenToWorlfdPoint傳值時,不能直接傳Input.mousePosition,否則獲取的世界座標永遠只有一個值;

            坑2:為了解決坑1,便使傳入的z軸值,那麼傳什麼值呢,可以取當前相機的z軸值絕對值,大概意思就是距離相機的距離,生成點的位置最後會在一個平面(因為傳入的z值固定了),比較適合一個平面內取點

2.射線檢測,取得螢幕座標,發射射線,取得碰撞資訊,比較準確,射線碰到那個有碰撞器的位置,就返回這個位置

 Ray ray= mainCamera.ScreenPointToRay(screenPos);
            RaycastHit hit;
            bool ishit=Physics.Raycast(ray,out hit);
            if (ishit)
            {
                Vector3 spacePos = hit.point;
                print("screenPos:" + screenPos);
                print("spacePos:" + spacePos);

           }

 

如下圖,

          黑色為方式一的,可以看出,生成的都在一個平面內,在一個斜的平面內,

          紅色為方式二的,射線檢測,碰撞到collider就返回碰撞資訊,有一大串是因為點選一下,多次計算了點選位置,生成了多個小球,