被 camera 內所提供的這個 Function 快玩死
搞了一個小時,看了一堆莫名其妙的英文..
ScreenToWorldPoint ( Vector3 position )
功能簡單而強大,提供一個螢幕座標回傳給你世界座標
首先要談談Projection
Camera 物件內有一個參數是 Projection (投影)
也就是如何將世界上的物件投影到你的螢幕上
他有兩種可選的投影方式 Perspective (透視) 和 Orthographic (不會翻!)
Perspective 就是一般 3D 隨遠近而大小的投影方式
而 Orthographic 則是 2D 那樣不管遠近,原汁原味直接貼在螢幕上
雖然我現在是在做2D的遊戲,但我仍然保留拓展至 3D 的變化性,所以我堅持用 Perspective
但這也導致我撞牆撞了一個小時
這和這 Function 有什麼關係呢? 有!差別可大了!
因為我這樣用他 ScreenToWorldPoint ( Input.mousePosition )
然後他就爽爽的一直回傳給我攝影機的 Position ....
但是我只要把攝影機 Projection 改成 Orthographic 就沒問題!
我就這樣查資料鬼打牆查半天才熊熊想到...「我好像沒給他深度值」...
所以只要這樣改
ScreenToWorldPoint ( new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 深度 ));
就沒有問題了
他的Z值就是讓人放深度用的..(淚)
深度就是離攝影機多遠的「距離」,所以會根據你給的距離不同給出不同的世界座標
但 Orthographic 因為投影方式就只是個長方體,所以不管你深度給多少都會是一樣的
Perspective 則是一個金字塔型,所以深度的遠近會有很大的差距
而我傻傻的
mousePosition 的 Z 值預設是 0,深度 0當然就是貼著攝影機,當然就是攝影機座標啦!