AutoCAD 3DMAX C語言 Pro/E UG JAVA編程 PHP編程 Maya動畫 Matlab應用 Android
Photoshop Word Excel flash VB編程 VC編程 Coreldraw SolidWorks A Designer Unity3D
 首頁 > Unity3D

Unity檢測發射體VS.防護碰撞

51自學網 2014-05-24 http://www.0532cf.com

本文選自StackOverflow(簡稱:SOF)精選問答匯總系列文章之一,本系列文章將為讀者分享國外最優質的精彩問與答,供讀者學習和了解國外最新技術,本文Unity碰撞檢測問題。

問題:

Tomáš Zato

我在嘗試檢測,發射體是否要撞擊防護體,以及碰撞在哪里發生。

這幅圖可以顯示出具體的情形,雖然A和B發射體距離中心防護體中心S的距離基本相同,但是一個會撞擊到防護體,另一個卻不會。

用簡單的數學來解決它,需要用到圓的數學方程和發射體路徑線的方程。只要用一支筆和一張紙,我就能計算出來。然而,我直接解析幾何的經歷非常糟糕。此外,發射體將離開防護體,返回陽極。怎樣過濾它們呢?

第二種方法是比較友好的方法——測量發射體路徑與防護體中心的最短距離,如果L比R小,就發生碰撞。看上去很容易實現,但是這不能讓我知道碰撞在哪里發生。

我做的是二維游戲,使用C#和Unity游戲引擎,歡迎大家提出各種通用解決方法。

發射體的大小忽略不計。

回答:

Lajos Arpad

你的防護體可以被描述成:

(X - X1)^2+ (Y - Y1)^2= R^2

發射體的路徑線可以描述為:

Y - Y3 = ((Y4 -Y3) / (X4 - X3)) * (X - X3)

從這里:

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

用上述拓展第一個方程,得到:

(X - X1)^2+ (((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3 -Y1)^2= R^2

這是一個 二次方程 ,如果解決則能給出交點的X值。閱讀鏈接中的二次方程解決方案,它將用一個公式獲得第一個脈沖來解決問題。當然,如果判別式為負,就沒有交點,那么方程式就沒有真正的答案。如果判別式是0,那么發射體就會觸碰到防護體。如果判別式為正,那你就獲得了答案,用方程式的結果退出X。

知道了X的值之后,就可以計算用下面的公式計算Y的值。

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

最后注意,只有在發射體的路徑線不是垂直的才能夠起作用,因為那樣X4就等于X3,導致基本方程無用。當出現發射體穿過一條直線的情況下,線的公式為:

X = X1

然后使用公式:

Y = ((Y4 - Y3) / (X4 - X3)) * (X - X3) + Y3

來獲得可能的解決方案。(再次聲明,這是一個二次元方程)

所以這一執行應該檢查發射體的路徑線是否垂直,然后根據具體情況選擇相應的解決方案。希望這能幫到你。

原文鏈接:Detecting possible projectile vs shield collision

 

文章選自StackOverFlow社區,鑒于其內容對于開發者有所幫助,現將文章翻譯于此,供大家參考及學習。9Tech將每日持續更新,讀者可點擊StackOverflow(簡稱:SOF)精選問答匯總,查看全部譯文內容。同時,我們也招募志同道合的技術朋友共同翻譯,造福大家!


建議使用電驢(eMule)下載分享的資源。

說明
:本教程來源互聯網或網友分享或出版商宣傳分享,僅為學習研究或媒體推廣,51zixue.net不保證資料的完整性。
 
上一篇:Unity 相關經典博客資源總結  下一篇:用Unity3D 開發游戲哪種語言最好?
彩客网 临汾 | 馆陶 | 张掖 | 武夷山 | 厦门 | 平凉 | 枣庄 | 天水 | 宿州 | 陵水 | 改则 | 塔城 | 张掖 | 海东 | 龙岩 | 舟山 | 赵县 | 库尔勒 | 上饶 | 鹰潭 | 果洛 | 汉中 | 泗洪 | 通辽 | 三亚 | 三沙 | 霍邱 | 仁寿 | 丹东 | 台山 | 克孜勒苏 | 西藏拉萨 | 榆林 | 汝州 | 南充 | 张掖 | 十堰 | 泗阳 | 基隆 | 乐山 | 昭通 | 楚雄 | 蓬莱 | 吐鲁番 | 新余 | 信阳 | 博罗 | 淄博 | 台湾台湾 | 三亚 | 大理 | 安阳 | 仁寿 | 昆山 | 大兴安岭 | 建湖 | 海丰 | 三亚 | 南充 | 天水 | 诸城 | 内江 | 丽江 | 曹县 | 陵水 | 张家界 | 公主岭 | 新疆乌鲁木齐 | 凉山 | 淮北 | 营口 | 钦州 | 呼伦贝尔 | 襄阳 | 灵宝 | 贵州贵阳 | 商洛 | 天门 | 姜堰 | 阜新 | 宜昌 | 新泰 | 郴州 | 东台 | 晋城 | 鹤壁 | 湖州 | 马鞍山 | 龙口 | 乐平 | 漳州 | 秦皇岛 | 桐乡 | 长葛 | 台山 | 宣城 | 邯郸 | 景德镇 | 江苏苏州 | 来宾 | 盘锦 | 乐平 | 连云港 | 锦州 | 湘西 | 海南 | 乌海 | 防城港 | 郴州 | 安庆 | 海东 | 乐平 | 六盘水 |