<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                好了,游戲開始進入奇怪的階段了,接下來我們要在場景里放上地雷,終結這個帥氣的BugPlayer吧。 > 笨木頭花心貢獻,啥?花心?不,是用心。 > 轉載請注明,原文地址:[http://www.benmutou.com/archives/2157](http://www.benmutou.com/archives/2157) > 文章來源:[笨木頭與游戲開發](http://www.benmutou.com/blog/) ### 1.Sphere物體 除了Cube(立方體)之外,我們還可以創建很多種形狀的物體。 這里我們需要做一個地雷,地雷是有一個殺傷范圍的,或者叫做觸發范圍,也就是說,特么的判斷你是否踩到我了。 通常范圍的判斷都是用圓形的,而在3D的世界里,就是一個立體的圓形。 所以,我們需要創建一個球體——Sphere。 和創建Cube的方式一毛一樣:【Hierarchy】-【3D Object】-【Sphere】 如圖: ![](https://box.kancloud.cn/2016-06-06_575541af64b84.jpg) 但是有一個小細節,我們要在Terrain上面點擊右鍵來創建這個物體,這樣物體就創建到地形下面了。 還記得當時創建Cube時的情況嗎?它會跑到世界的某個角落,很難找,所以我們要把它創建到Terrian的角落。 ### 2.移動球體到BugPlayer的附近 OK,把球體移動到合適的位置,離BugPlayer近一些。 大家看我的操作,移動物體是有個小技巧的,不需要通過箭頭來移動,而是通過物體的某個“面”來移動。 大家自己感受吧: ![u008_1.gif](https://box.kancloud.cn/2016-06-06_575541af793f8.gif) ### 3.地雷和球體有什么關系? 也許大家覺得很奇怪,地雷為什么要用球體來實現? 這是因為,地雷的技能(自爆)是由外界來觸發的,特么的你踩我了,我這暴脾氣就出來了,這就是自爆。(小若:特么的好有道理) 而觸發某個事件需要觸發器,并且需要一個范圍,剛剛已經解釋了,用球體作為范圍來判斷是否觸發事件,是比較合適的。 當然,你喜歡正方體也行、不規則形狀也行,越復雜的形狀,會越消耗性能。 ### 4.觸發器 剛剛我們提到了觸發器,這是[游戲開發](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D3%CE%CF%B7%BF%AA%B7%A2&k0=%D3%CE%CF%B7%BF%AA%B7%A2&kdi0=0&luki=5&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)里一個很重要的東西。 而Cube、Sphere等物體都是自帶觸發器的,正確地說,是碰撞器。 我們先來看看Sphere的碰撞器,如圖: ![](https://box.kancloud.cn/2016-06-06_575541af99f13.png) 碰撞器也是物體的一個[組件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),記住,一切都是組件。 Sphere物體的碰撞器就叫做【Sphere Collider】,Cube的碰撞器就叫做【Cube Collider】,只是形狀不一樣。 不知道大家發現了沒有,我偷偷在【Is Trigger】的屬性里打勾了。(小若:沒看見,被奇怪的東西擋住了) 這個屬性是關鍵,只有勾上這個屬性,【碰撞器】才能真正的稱之為【觸發器】。 有了Is Trigger屬性之后,碰撞器就能檢查到是否有物體進入了它的范圍,并且會觸發回調函數。 而我們只需要在回調函數里做我們想做的事情。 ### 5.觸發器事件函數 現在這個地雷是假的,因為它沒有任何實際效果,要想有實際效果,就得給它一個AI,沒錯,我們得給它加個腳本。 新建一個腳本文件,[命名](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%C3%FC%C3%FB&k0=%C3%FC%C3%FB&kdi0=0&luki=1&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)為..SomethingGGD吧,一些怪怪的東西。 然后把腳本拖到Sphere物體上。 打開SomethingGGD腳本,加入以下三個函數: ~~~ public?class?SomethingGGD?:?MonoBehaviour?{? ??void?Start()? ??{? ? ? ? Debug.Log("Start");? ??}? ??void?OnTriggerEnter(Collider other)? ??{? ? ? ? Debug.Log("OnTriggerEnter");? ??}? ??void?OnTriggerStay(Collider other)? ??{? ? ? ? Debug.Log("OnTriggerStay");? ??}? ??void?OnTriggerExit(Collider other)? ??{? ? ? ? Debug.Log("OnTriggerExit");? ??}} ~~~ Start:這個[函數](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=2&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)在這里是多余的,只是為了驗證這個腳本是否生效了。 OnTriggerEnter:當有物體進入我的[觸發器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)范圍時調用; OnTriggerStay:當物體在我的觸發器范圍內停留時,一直調用; OnTriggerExit:當物體離開我的[觸發器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)范圍時調用。 三個函數都很好理解,不多說了。 重點是下面要做的事情。 ### 6.讓主角去觸發 觸發器 我們試試主角現在進入地雷范圍時,會不會觸發這些函數。 但,在這之前,我們的Sphere有點小,幾乎看不到它了,把Sphere的Scale屬性設大一些,就設為(10,10,10)吧: ![](https://box.kancloud.cn/2016-06-06_575541afb3947.png) OK,運行游戲,看看主角是否能觸發這些函數,在運行游戲時,左下角會出現一些日志。 而我們在代碼里調用Debug.Log()[函數](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=2&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)就可以在這個地方打印日志。 現在運行游戲,可以看到日志“Start”,證明這個SomethingGGD腳本是已經在運作的,如圖: ![u008_2.gif](https://box.kancloud.cn/2016-06-06_575541ebd521a.gif) 但是當我們嘗試讓主角去撞地雷的時候,卻沒有任何新的日志輸出,這就代表觸發器沒生效,這是為什么呢? 因為我們的主角并不是一個“剛體”,也就是說,主角不是一個物理對象。 只有物理對象才有碰撞的說法,只有碰撞了才能讓觸發器生效。 ### 7.給主角添加剛體組件 我們先來給主角添加一個剛體組件: ![u008_3.gif](https://box.kancloud.cn/2016-06-06_575541ebf2e61.gif) 添加了剛體組件之后,主角就具備一些物體特性了,但實際上我們不需要主角模擬物體特性,我們只是要它能產生碰撞而已。 所以我在創建了剛體組件后,把【Use Gravity】屬性的勾給去掉了,這個屬性代表主角是否受重力影響。 如果主角受重力影響,那么,主角會一直往下掉的。 OK,再次運行[游戲](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=4&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),讓主角去撞地雷,這次就能出現日志了: ![u008_4.gif](https://box.kancloud.cn/2016-06-06_575541ec26090.gif) ### 8.碰撞器 我們一直在說的[觸發器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),其實是碰撞器,碰撞是需要兩個碰撞器相互產生的。 如果大家有留意的話,應該能發現BugPlayer身上也是有一個碰撞器(Collider)的: ![](https://box.kancloud.cn/2016-06-06_575541ec476bf.png) 如果把這個碰撞器從主角身上移除,那么,地雷的碰撞器也就無法發現主角了。 我們來理一理: 1. 要產生碰撞,需要雙方都有一個碰撞器,因為這是判斷物體是否碰撞的依據,可以理解為,這是一個碰撞范圍。 2. 碰撞器只是判斷是否碰撞的依據,但是要真正觸發碰撞事件,則必須至少有一個物體是具備剛體[組件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)的。 3. 總結:至少存在一個剛體時,才能觸發碰撞事件,而判斷物體是否碰撞的依據是碰撞器(碰撞器的碰撞范圍是可以調整的,比如球體形、立方體形、不規則形狀) 好了,關于碰撞,還是需要慢慢理解的,我也只是處于初步了解的狀態,不多說。 ### 9.待續 這一篇寫得有點多,下次我們來實現什么功能好呢? 要不,我們來炸死主角吧。 本篇源碼:[Unity_benmutou_008.7z](http://www.benmutou.com/wp-content/uploads/2015/11/wpid-90d41d8ecb5577b5fa88cb400af14f1c_Unity_benmutou_008.7z)[](#)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看