<em id="lwy0s"></em>
      1. <div id="lwy0s"></div>
      2. 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.40288265.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 開發游戲哪種語言最好?
        北京11选5技巧

            <em id="lwy0s"></em>
          1. <div id="lwy0s"></div>

                <em id="lwy0s"></em>
              1. <div id="lwy0s"></div>