Unity獲取鼠標(biāo)所在的世界坐標(biāo)(附跟隨鼠標(biāo)轉(zhuǎn)動)

好久沒有寫專欄了,趁著今(1)天(1)過(1)節(jié)(1)等外賣就來一篇.

雖然 Unity 提供了
Camera.ScreenToWorldPoint
這么個 API ,但是很多小伙伴在使用這個接口的時候還是會出現(xiàn)一些莫名其妙的問題,這是因為該接口的功能正如字面所說 Screen(屏幕) to World(世界),這個轉(zhuǎn)換的介質(zhì),是基于 Camera(相機)的,大家有沒有想到一個問題,我們的攝像機在通常情況下和地面或者玩家之間 ,是有一段距離的,而這段距離,就成了問題的多發(fā)區(qū).
眾(使用Unity進行開發(fā)的小伙伴們)所周知,Unity 的攝像機拍攝方式有兩種,透視(Perspective)和正交(Orthographic)
其中透視的的攝像機是一個點,而正交的攝像機則是一個面

[理論基礎(chǔ)]我們在調(diào)用 ScreenToWorld 的時候,?鼠標(biāo)和攝像機是處于同一的平面的,這就導(dǎo)致了,如果我們直接使用 Input.Mouse Position 作為參數(shù)的話,結(jié)果是和相機一個平面,如果是正交還好,因為起碼是一個面,但是透視則怎么都只是一個點.

使用此腳本進行測試.


分別在屏幕的四個角點擊得到的結(jié)果.
可以看到,透視模式下控制臺返回的結(jié)果都是同樣的一個點(主攝像機的位置)

有了前面的理論基礎(chǔ)后,再要解決問題就變得簡單了,即,在使用接口將鼠標(biāo)坐標(biāo)轉(zhuǎn)換之前,先修正鼠標(biāo)坐標(biāo)的Z值,以下代碼適用于默認(rèn)場景,主要物品Z軸為零的情況,小伙伴們可以根據(jù)自己的需求將其改造成適合自己項目的代碼.


可以看到,在修改了Z值之后,點擊可以正確獲取世界坐標(biāo).

[以下內(nèi)容投幣可見]
DLC——物品跟隨鼠標(biāo)轉(zhuǎn)向

效果如下:

都看到這里啦~
歡(下)迎(次)投(一)幣(定)