<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                有沒有發現越往后寫,旁白出現的次數越少? 是的,最近公司出了點小問題,思緒就變得沉重了一些,思緒一沉重,我的精神分裂就很難發作。 不嘮叨了,這次我們來試試在代碼里操作物體吧,很簡單很簡單的。 > 笨木頭花心貢獻,啥?花心?不,是用心。 > 轉載請注明,原文地址:[http://www.benmutou.com/archives/2176](http://www.benmutou.com/archives/2176) > 文章來源:[笨木頭與游戲開發](http://www.benmutou.com/blog/) ### 1.找遍全世界,只為了發現你——FindGameObjectWithTag 還記得很早之前我們介紹的Tag嗎?我知道你們肯定不記得的。 先給我們的BugPlayer設置一個Tag吧,如下操作: ![u009_1.gif](https://box.kancloud.cn/2016-06-06_575541ec655a9.gif) OK,Tag只是物體身上的一個屬性,我們可以利用這個屬性做自己想做的事情。(小若:嘿嘿嘿,真的嗎?) 別做怪怪的事情就好了... Unity本身封裝了一些針對Tag的操作,是的,包括在全世界中搜索某個Tag的物體。 打開腳本文件SomethingGGD,在OnTriggerEnter函數里加上兩句代碼: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????GameObject?obj?=?GameObject.FindGameObjectWithTag(“BugPlayer”); ???????obj.SetActive(false); ???} ~~~ 利用FindGameObjectWithTag函數,可以在整個場景里查找Tag等于某個值的物體。 這是一個靜態函數。 當然,Tag等于某個值的物體可以不止一個,因為Tag的值是可以隨意設置的,因此也有FindGameObjectsWithTag函數,可以查找所有滿足Tag值的物體,返回一個數組。 (小若:那,如果有很多個具有Tag=”BugPlayer”的物體呢?用FIndGameObjectWithTag會怎么樣?) 如果擁有某個Tag屬性的物體有多個,而你特么的又故意用FindGameObjectWithTag來查找單個物體,那就等著出Bug吧,我可不知道會發生什么。 留意第二句代碼:obj.SetActive(false),這句代碼會把物體變成非活動狀態,這樣就會就不會在場景中出現,也不會參與場景中的各種事件。就好像,它死了,但靈魂還在。 我們來看看效果: ![u009_2.gif](https://box.kancloud.cn/2016-06-06_575541ec8496c.gif) BugPlayer撞到地雷的時候,立刻就消失了。 怎么樣?我這地雷質量不錯吧?明天給你家門口裝一個,免費的哈。 ### 2.把你裝在心里,隨時都能…滅了你——將物體作為屬性保存 除了使用Find**(特么的這函數名字太長,我不想寫)來查找物體之外,還有一個更偷懶的方法。 首先,給SomethingGGD腳本加上一個屬性,順便修改OnTriggerEnter函數,如下所示: ~~~ public?class?SomethingGGD?:?MonoBehaviour?{ ???public?GameObject?bugPlayer?=?null; ???void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????bugPlayer.SetActive(false); ???} } ~~~ 很簡單,bugPlayer作為SomethingGGD的一個屬性,我隨時可以調用它。 等等,這個屬性在哪里賦值呢?這是個好問題。(小若:特么就沒人問你) 我們來看看Unity編輯器,每次修改完代碼,回到編輯器時,它都會編譯代碼,所以要稍等一會。 然后點擊Sphere,看看它的屬性: ![](https://box.kancloud.cn/2016-06-06_575541ec9c5d1.png) 有沒有發現什么? 是的,SomethingGGD里多了一個BugPlayer屬性,而且它右邊還有一個框框,看起來好像可以拖東西進去。 在Unity里就是這樣,看起像的東西,那么它一定就是了。 腳本里的Public屬性,是可以出現在編輯里的,而且可以直接拖動賦值。 我們把BugPlayer拖動到這個屬性里吧: ![u009_3.gif](https://box.kancloud.cn/2016-06-06_575541ecbb134.gif) 拖動物體的時候,在到達位置之前,一定不要松開鼠標,否則就會變成選中這個物體了。 OK,運行游戲,效果和之前是一毛一樣的。 ### 3.特么的對不起,我一直在騙你——Collider參數 各位,其實我剛剛說的兩種方式,完全不適合在這里使用,為什么呢? 因為在兩個彭撞器發生碰撞的時候,它們是能相互知道對方是誰的。 既然如此,我們根本就不需要去這么辛苦地查詢。 忘記剛剛的那些操作,我們在OnTriggerEnter函數里寫上這么一句代碼: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????other.gameObject.SetActive(false); ???} ~~~ OnTriggerEnter函數本身就有一個Collider參數,這個參數就是和我這個碰撞器發生碰撞的碰撞器對象。 碰撞器是一個Collider,Collider只是物體身上的一個組件,所以,Collider的gameObject就是那個和我產生碰撞的物體。 于是,僅僅需要調用:other.gameObject.SetActivie(false) 就能讓這個和我產生碰撞的物體消失。 ### 4.更多好玩的 現在, 地雷已經能操作BugPlayer了,那就很多東西可以玩了。 我們試試把OnTriggerEnter函數改成這樣: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????int?rand?=?(int)Random.Range(1,?100); ???????if(rand?<?50) ???????{ ???????????other.gameObject.transform.position?=?new?Vector3( ???????????other.gameObject.transform.position.x, ???????????other.gameObject.transform.position.y, ???????????other.gameObject.transform.position.z?–?20 ???????????); ???????} ???????else ???????{ ???????????other.gameObject.transform.position?=?new?Vector3( ???????????other.gameObject.transform.position.x?+?20, ???????????other.gameObject.transform.position.y, ???????????other.gameObject.transform.position.z ???????????); ???????} ???} ~~~ 這樣就有隨機效果了,隨機改變BugPlayer的x或z坐標。 為什么要有隨機效果?因為我們要創建多個地雷了。 還記得怎么復制物體嗎?Ctrl+D,我們多復制幾個地雷,擺滿場景: ![](https://box.kancloud.cn/2016-06-06_575541ed1a38b.jpg) 我們復制出來的地雷和原來的是一毛一樣的,地雷的所有邏輯都存在。 這是很爽的事情,我們只需配好一個物體,就能制作一堆相同的物體了。 現在,運行游戲,讓BugPlayer踩地雷去吧。 ![u009_4.gif](https://box.kancloud.cn/2016-06-06_575541ed32d4a.gif) 我發現這主角還蠻難控制的…. ### 5待續 好了,這個Demo的主要功能已經完成了。 下一篇,也是最后一篇,我們給BugPlayer加上UI 本篇源碼:?[Unity_benmutou_009](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_009.7z) 有沒有發現越往后寫,旁白出現的次數越少? 是的,最近公司出了點小問題,思緒就變得沉重了一些,思緒一沉重,我的精神分裂就很難發作。 不嘮叨了,這次我們來試試在代碼里操作物體吧,很簡單很簡單的。 > **笨木頭花心貢獻,啥?花心?不,是用心。** > **轉載請注明,原文地址:[http://www.benmutou.com/archives/2176](http://www.benmutou.com/archives/2176)** > **文章來源:[笨木頭與游戲開發](http://www.benmutou.com/blog/)** ### 1.找遍全世界,只為了發現你——FindGameObjectWithTag 還記得很早之前我們介紹的Tag嗎?我知道你們肯定不記得的。 先給我們的BugPlayer設置一個Tag吧,如下操作: ![u009_1.gif](https://box.kancloud.cn/2016-06-06_575541ec655a9.gif) OK,Tag只是物體身上的一個屬性,我們可以利用這個屬性做自己想做的事情。(小若:嘿嘿嘿,真的嗎?) 別做怪怪的事情就好了... Unity本身封裝了一些針對Tag的操作,是的,包括在全世界中搜索某個Tag的物體。 打開腳本文件SomethingGGD,在OnTriggerEnter函數里加上兩句代碼: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????GameObject?obj?=?GameObject.FindGameObjectWithTag(“BugPlayer”); ???????obj.SetActive(false); ???} ~~~ 利用FindGameObjectWithTag函數,可以在整個場景里查找Tag等于某個值的物體。 這是一個靜態函數。 當然,Tag等于某個值的物體可以不止一個,因為Tag的值是可以隨意設置的,因此也有FindGameObject**s**WithTag函數,可以查找所有滿足Tag值的物體,返回一個數組。 (小若:那,如果有很多個具有Tag=”BugPlayer”的物體呢?用FIndGameObjectWithTag會怎么樣?) 如果擁有某個Tag屬性的物體有多個,而你特么的又故意用FindGameObjectWithTag來查找單個物體,那就等著出Bug吧,我可不知道會發生什么。 留意第二句代碼:obj.SetActive(false),這句代碼會把物體變成非活動狀態,這樣就會就不會在場景中出現,也不會參與場景中的各種事件。就好像,它死了,但靈魂還在。 我們來看看效果: ![u009_2.gif](https://box.kancloud.cn/2016-06-06_575541ec8496c.gif) BugPlayer撞到地雷的時候,立刻就消失了。 怎么樣?我這地雷質量不錯吧?明天給你家門口裝一個,免費的哈。 ### 2.把你裝在心里,隨時都能…滅了你——將物體作為屬性保存 除了使用Find**(特么的這函數名字太長,我不想寫)來查找物體之外,還有一個更偷懶的方法。 首先,給SomethingGGD腳本加上一個屬性,順便修改OnTriggerEnter函數,如下所示: ~~~ public?class?SomethingGGD?:?MonoBehaviour?{ ???public?GameObject?bugPlayer?=?null; ???void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????bugPlayer.SetActive(false); ???} } ~~~ 很簡單,bugPlayer作為SomethingGGD的一個屬性,我隨時可以調用它。 等等,這個屬性在哪里賦值呢?這是個好問題。(小若:特么就沒人問你) 我們來看看Unity編輯器,每次修改完代碼,回到編輯器時,它都會編譯代碼,所以要稍等一會。 然后點擊Sphere,看看它的屬性: ![](https://box.kancloud.cn/2016-06-06_575541ec9c5d1.png) 有沒有發現什么? 是的,SomethingGGD里多了一個BugPlayer屬性,而且它右邊還有一個框框,看起來好像可以拖東西進去。 在Unity里就是這樣,看起像的東西,那么它一定就是了。 腳本里的Public屬性,是可以出現在編輯里的,而且可以直接拖動賦值。 我們把BugPlayer拖動到這個屬性里吧: ![u009_3.gif](https://box.kancloud.cn/2016-06-06_575541ecbb134.gif) 拖動物體的時候,在到達位置之前,一定不要松開鼠標,否則就會變成選中這個物體了。 OK,運行游戲,效果和之前是一毛一樣的。 ### 3.特么的對不起,我一直在騙你——Collider參數 各位,其實我剛剛說的兩種方式,完全不適合在這里使用,為什么呢? 因為在兩個彭撞器發生碰撞的時候,它們是能相互知道對方是誰的。 既然如此,我們根本就不需要去這么辛苦地查詢。 忘記剛剛的那些操作,我們在OnTriggerEnter函數里寫上這么一句代碼: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????other.gameObject.SetActive(false); ???} ~~~ OnTriggerEnter函數本身就有一個Collider參數,這個參數就是和我這個碰撞器發生碰撞的碰撞器對象。 碰撞器是一個Collider,Collider只是物體身上的一個組件,所以,Collider的gameObject就是那個和我產生碰撞的物體。 于是,僅僅需要調用:other.gameObject.SetActivie(false) 就能讓這個和我產生碰撞的物體消失。 ### 4.更多好玩的 現在, 地雷已經能操作BugPlayer了,那就很多東西可以玩了。 我們試試把OnTriggerEnter函數改成這樣: ~~~ ??void?OnTriggerEnter(Collider?other) ???{ ???????Debug.Log(“OnTriggerEnter”); ???????int?rand?=?(int)Random.Range(1,?100); ???????if(rand?<?50) ???????{ ???????????other.gameObject.transform.position?=?new?Vector3( ???????????other.gameObject.transform.position.x, ???????????other.gameObject.transform.position.y, ???????????other.gameObject.transform.position.z?–?20 ???????????); ???????} ???????else ???????{ ???????????other.gameObject.transform.position?=?new?Vector3( ???????????other.gameObject.transform.position.x?+?20, ???????????other.gameObject.transform.position.y, ???????????other.gameObject.transform.position.z ???????????); ???????} ???} ~~~ 這樣就有隨機效果了,隨機改變BugPlayer的x或z坐標。 為什么要有隨機效果?因為我們要創建多個地雷了。 還記得怎么復制物體嗎?Ctrl+D,我們多復制幾個地雷,擺滿場景: ![](https://box.kancloud.cn/2016-06-06_575541ed1a38b.jpg) 我們復制出來的地雷和原來的是一毛一樣的,地雷的所有邏輯都存在。 這是很爽的事情,我們只需配好一個物體,就能制作一堆相同的物體了。 現在,運行游戲,讓BugPlayer踩地雷去吧。 ![u009_4.gif](https://box.kancloud.cn/2016-06-06_575541ed32d4a.gif) 我發現這主角還蠻難控制的…. ### 5待續 好了,這個Demo的主要功能已經完成了。 下一篇,也是最后一篇,我們給BugPlayer加上UI 本篇源碼:?[Unity_benmutou_009](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_009.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>

                              哎呀哎呀视频在线观看