国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式

這篇具有很好參考價(jià)值的文章主要介紹了【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在游戲中,角色跳躍是普通且常見(jiàn)的能力。但就這么看似簡(jiǎn)單的功能,在實(shí)現(xiàn)過(guò)程中也會(huì)遇到很多問(wèn)題。
在本篇文章,我將分享地面檢測(cè)的三種方式。

項(xiàng)目地址

GitHub
B站視頻

為什么要地面檢測(cè)?

在游戲中。用戶對(duì)在空中的角色和地面的角色可操作方式是不同的。
比如,空中和地面不同的攻擊方式、地面上可以下蹲、空中二段跳、觸地失敗等等。
所以,要實(shí)現(xiàn)這種差異,我們首先要知道角色當(dāng)前的空間位置,所以地面檢測(cè)就是必須的。

射線檢測(cè)

核心思路:
在角色底部向下發(fā)出一條射線,當(dāng)觸碰到地面時(shí),則認(rèn)為角色在地面上。
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式

代碼如下:

        void Update()
        { 
  	        // TODO 避免檢測(cè)太頻繁影響性能,可以增大檢測(cè)間隔時(shí)間
            var raycastAll = Physics2D.RaycastAll(transform.position, Vector2.down, 0.1f, layerMask);
            if (raycastAll.Length > 0)
            {
      	         // 在地面
                 isGrounded = true;
            }
            else
            {
                   // 離地
                 isGrounded = false;
            }
        }

但是,這種現(xiàn)實(shí)會(huì)有問(wèn)題。
當(dāng)角色在地面邊緣或者斜坡時(shí),單條射線會(huì)檢測(cè)不到地面從而導(dǎo)致判斷錯(cuò)誤。
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式
要解決這個(gè)問(wèn)題也很簡(jiǎn)單,我們可以增加多幾條射線,既可以了。
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式

但是這樣實(shí)現(xiàn)起來(lái)有點(diǎn)繁瑣,有沒(méi)有更方便的方法呢?

碰撞體

核心思路:
利用 Unity 引擎提供的碰撞體,我們可以監(jiān)聽(tīng)碰撞函數(shù)來(lái)完成地面檢測(cè)邏輯。
【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式
代碼如下:

  void OnTriggerStay2D(Collider2D other)
        {
            if (other.CompareTag("Ground"))
            {
                    // 在地面
                    isGrounded = true;
            }
        }

        void OnTriggerExit2D(Collider2D other)
        {
           // 離地
           isGrounded = false;
     
        }

通過(guò)調(diào)整碰撞器的大小,已經(jīng)可以滿足我們?nèi)粘i_(kāi)發(fā)需求了。
如果你不想添加多個(gè)碰撞器,那可以試試下面的射線盒子。

射線盒子

核心思路:
也是利用射線檢測(cè),只是從多條射線換成射線盒子。由線變成面。
代碼如下:

 void Update()
        { 
            var raycastAll = Physics2D.OverlapBoxAll(transform.position,  new Vector2(0.4f,0.4f), 0,layerMask);
            if (raycastAll.Length > 0)
            {
                // 在地面
                isGrounded = true;
            }
            else
            {
                // 離地
                isGrounded = false;
            }
        }

【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式

以上就是本篇的內(nèi)容。如果你覺(jué)得還不錯(cuò),可以點(diǎn)個(gè)贊和關(guān)注噢~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405005.html

到了這里,關(guān)于【Unity300個(gè)技巧】檢測(cè)物體在地面的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity在物體內(nèi)部發(fā)射射線檢測(cè)不到物體的解決方式

    Unity在物體內(nèi)部發(fā)射射線檢測(cè)不到物體的解決方式

    在Unity2018.1.18上不大好用。

    2024年02月15日
    瀏覽(19)
  • Unity物體往下掉 如何站在地面上

    Unity物體往下掉 如何站在地面上

    為了實(shí)現(xiàn)人物能站在平面上,給人物添加剛體并勾選use gravity后,人物一直往下掉 1.給人物添加collider組件,默認(rèn)不勾選is Trigger 2.collider要把人物包圍(最好要把人物的腳包圍) 在box collider組件的center與size選項(xiàng)可以調(diào)整包圍盒大小 3.運(yùn)行后就可以站在地面了 4.如果發(fā)現(xiàn)人物會(huì)

    2023年04月08日
    瀏覽(17)
  • unity-2D游戲地面檢測(cè) 三射線檢測(cè)

    unity-2D游戲地面檢測(cè) 三射線檢測(cè)

    ? ? 2D游戲中跳躍是不可或缺的功能,要實(shí)現(xiàn)跳躍功能,就必須進(jìn)行地面檢測(cè)!常規(guī)方法是使用一根往角色下方延伸的射線檢測(cè),但是這種方法在一些復(fù)雜不規(guī)則的地面效果通常不盡人意。通過(guò)增加射線數(shù)量,即可完善這種方法的不足,達(dá)到在復(fù)雜地面也能正確檢測(cè)角色是否

    2024年02月15日
    瀏覽(22)
  • 基于YOLOv8深度學(xué)習(xí)的無(wú)人機(jī)視角地面物體檢測(cè)系統(tǒng)【python源碼+Pyqt5界面+數(shù)據(jù)集+訓(xùn)練代碼】深度學(xué)習(xí)實(shí)戰(zhàn)、目標(biāo)檢測(cè)

    基于YOLOv8深度學(xué)習(xí)的無(wú)人機(jī)視角地面物體檢測(cè)系統(tǒng)【python源碼+Pyqt5界面+數(shù)據(jù)集+訓(xùn)練代碼】深度學(xué)習(xí)實(shí)戰(zhàn)、目標(biāo)檢測(cè)

    《博主簡(jiǎn)介》 小伙伴們好,我是阿旭。專注于人工智能、AIGC、python、計(jì)算機(jī)視覺(jué)相關(guān)分享研究。 ? 更多學(xué)習(xí)資源,可關(guān)注公-仲-hao:【阿旭算法與機(jī)器學(xué)習(xí)】,共同學(xué)習(xí)交流~ ?? 感謝小伙伴們點(diǎn)贊、關(guān)注! 《------往期經(jīng)典推薦------》 一、AI應(yīng)用軟件開(kāi)發(fā)實(shí)戰(zhàn)專欄【鏈接】

    2024年03月21日
    瀏覽(77)
  • Unity三種物體溶解方法

    Unity三種物體溶解方法

    Dissolve1-3 該方法的效果好壞在于噪聲紋理的分布。本例利用SD的Blend節(jié)點(diǎn),將Noise貼圖和漸變貼圖進(jìn)行正片疊底操作,并簡(jiǎn)單調(diào)整邊緣邊緣大小,得到如下所示的噪聲貼圖。 制作的遮罩為四周較暗,且對(duì)角線軸向向內(nèi)亮度遞增,使得最終的溶解效果從四周向內(nèi)部溶解。 shader要

    2023年04月09日
    瀏覽(18)
  • 線程創(chuàng)建的三種方式

    線程創(chuàng)建的三種方式

    目錄 1.?Thread類 2.?Runnable接口 3. Callable接口 4. 線程的生命周期 新建? 就緒 運(yùn)行 阻塞 等待 結(jié)束 繼承Thread類的方式創(chuàng)建線程 定義Thread類的子類,并重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務(wù) 創(chuàng)建Thread類的子類,即創(chuàng)建了線程對(duì)象 調(diào)用線程對(duì)象的

    2024年02月09日
    瀏覽(28)
  • selenium的三種等待方式

    設(shè)置固定休眠時(shí)間,單位為秒。 由python的time包提供, 導(dǎo)入 time 包后就可以使用。 缺點(diǎn):不智能,使用太多的sleep會(huì)影響腳本運(yùn)行速度。 使用方法:time.sleep(delay) 使用舉例:打開(kāi)百度,強(qiáng)制等待5秒 (無(wú)條件等待,在一個(gè)時(shí)間段內(nèi)等待) 一次設(shè)置,全局生效。 不要當(dāng)作固定等待

    2023年04月13日
    瀏覽(14)
  • Debezium的三種部署方式

    Debezium的三種部署方式

    debezium 有下面三種部署方式,其中最常用的就是 kafka connect。 kafka connect 一般情況下,我們通過(guò) kafka connect 來(lái)部署 debezium,kafka connect 是一個(gè)框架和運(yùn)行時(shí): source connectors:像 debezium 這樣將記錄發(fā)送到 kafka 的source connector sink connectors:將記錄從 kafka topic傳播到其他系統(tǒng)的 sin

    2024年02月10日
    瀏覽(22)
  • 解決NPE的三種方式

    解決NPE的三種方式

    NullPointerException(空指針異常,NPE)是Java編程中常見(jiàn)的錯(cuò)誤。解決NPE的方法可以從以下三個(gè)方面考慮: 明確處理空引用情況: 在某些情況下,無(wú)法避免使用可能為空的引用對(duì)象。此時(shí),需要明確處理空引用情況,以避免拋出NPE。可以使用條件判斷,例如使用if-else語(yǔ)句或者三

    2024年02月22日
    瀏覽(31)
  • 驗(yàn)證合約的三種方式

    使用truffle插件: https://github.com/rkalis/truffle-plugin-verify truffle run verify?合約名稱@合約地址?--network?網(wǎng)絡(luò)名稱 --debug 注意:需要開(kāi)啟VPN,然后給CMD也設(shè)置代理,否則CMD無(wú)法訪問(wèn)外網(wǎng)會(huì)驗(yàn)證失敗 (每次新開(kāi)CMD都要執(zhí)行) 在etherscan上手動(dòng)上傳 1、合約文件如果有導(dǎo)入的外部合約,需

    2023年04月22日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包