樱花草在线播放免费高清观看,国产成人久久综合777777麻豆,啦啦啦在线视频免费观看正在播放1,在线天堂√中文,亚洲色大成网站www永久男同,国产丰满乱子伦无码专区,日韩精品 在线 国产 丝袜 ,三级在线看中文字幕完整版
  • 您的位置:首頁 > 新聞動態 > Unity3D

    Unity3D的射線碰撞檢測方法總結

    2019/12/12??????點擊:

    射線檢測故名就是通過射線去檢測是否和碰撞器產生了交集,和碰撞器與碰撞器發生交集一樣,如果檢測到了會返回一個真。
    射線的用法很多:比如檢測是否跳躍,通過向地面投射射線控制在地面時候可以跳起。
            射擊游戲中可以通過定長射線去判斷目標物體是否被擊中等

    主要用到的工具類有:

    • Physics
    • RaycastHit 光線投射碰撞
    • Ray 射線


    第1種方法:Physics.Linecast 線性投射
    從開始位置到結束位置做一個光線投射,如果與碰撞體交互,返回真。

     Debug.DrawLine(transform.position, Line_floor.position, Color.red, 1f);
     bool grounded  = Physics.Linecast(transform.position, Line_floor.position, 1 << LayerMask.NameToLayer("Ground"));
     if (grounded)
     {
         Debug.LogError("發生了碰撞");   
     }
     else {
         Debug.LogError("碰撞結束");
     }
    第二種方法在場景中投下可與所有碰撞器碰撞的一條光線??煽刂仆渡浞较蚝屯渡溟L度。
    Vector3 fwd = transform.TransformDirection(-Vector3.up);
    bool grounded =  Physics.Raycast(transform.position,fwd, 10 );
    if (grounded)
     {
       Debug.LogError("發生了碰撞");   
     }
    else 
    {
        Debug.LogError("碰撞結束");
     }
    第三種方法:在場景中投下可與所有碰撞器碰撞的一條光線,并返回碰撞的細節信息。



    RaycastHit hit;
    bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit);
    // 可控制投射距離bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit,100.0);
    if (grounded)
    {
    Debug.LogError("發生了碰撞");
    Debug.LogError("距離是:" + hit.distance);
    Debug.LogError("被碰撞的物體是:" + hit.collider.gameObject.name);
    }
    else {
    Debug.LogError("碰撞結束");
    }
    
    注意:這里返回的碰撞器的信息是依次的,先返回第一個碰撞的,第一個碰撞結束后才返回第二個。


    第四種方法:Physics.RaycastAll 所有光線投射。

    投射一條光線并返回所有碰撞,也就是投射光線并返回一個RaycastHit[]結構體。


    RaycastHit[] hits;
    hits = Physics.RaycastAll(transform.position, -Vector3.up, 100.0F);
    int i = 0;
    while (i < hits.Length)
    {
    Debug.LogError("發生了碰撞");
    RaycastHit hit = hits[i];
    Debug.LogError("被碰撞的物體是:" + hit.collider.gameObject.name);
    i++;
    }


    第五種方法:控制碰撞的層,可以設置射線的長度,并且用debug查看射線的長度。

    使用層的時候,要注意,要給別的對象也附上層的名字,不能用缺省,會出問題。


    RaycastHit hit;
    // Debug.DrawLine()
    bool grounded = Physics.Raycast(transform.position, transform.up, out hit, 10000f, 1 << LayerMask.NameToLayer("Diren"));
    Debug.DrawRay(transform.position, transform.up * 10000f, Color.red);
    if (grounded)
    {
    Debug.LogError("發生了碰撞");
    Debug.LogError("距離是:" + hit.distance);
    Debug.LogError("被碰撞的物體是:" + hit.collider.gameObject.name);
    
    }
    else {
    Debug.LogError("碰撞結束");
    }
    第五種:Physics.OverlapSphere 相交球。
    返回球型半徑之內(包括半徑)的所有碰撞體 collider[]。可用于拾取物品用。此方法在VR交互時為了提高用戶體驗,使用較多。
    Collider[] col =  Physics.OverlapSphere(transform.position,1f, 1 << LayerMask.NameToLayer("zhuangbei"));
    if (col.Length > 0)
    {
    foreach (Collider zhuangbei in col)
    {
      zhuangbei.gameObject.GetComponent().material.color = Color.red;
    }
    }




    主站蜘蛛池模板: 精品国精品国产自在久国产| 色欲人妻综合aaaaaaaa网| 日产精品99久久久久久| 亚洲欧美成人久久综合中文网| 丰满少妇高潮惨叫正在播放| 超碰人人超碰人人| 真实单亲乱l仑对白视频| 国产成人一区二区三区视频免费| 国产免费视频| 亚洲人成电影在线天堂色| 日韩欧美aⅴ综合网站发布| 久久久久人妻精品一区三寸| 四房播色| 小宝极品内射国产在线| 《与上司出轨的人妻》电影| 野花日本大全免费观看6高清版| 国产精品多p对白交换绿帽| 国产精品一区二区av| 白嫩白嫩bbbbbbbbb| 国产亚洲av人片在线观看| 亚洲av无码一区二区三区网站| 啦啦啦观看免费观看视频6| 国产chinese男男gay视频网| 欲色天天网综合久久| 五月婷婷综合缴情六月| 韩国三级中文字幕hd| 真实单亲乱l仑对白视频| 永久黄网站色视频免费观看| 精品日韩卡1二2卡3卡4卡乱码| 久久午夜夜伦鲁鲁片免费无码| 放荡的教师中文字幕| 亚洲色图片区| 少妇自慰流白口浆21p| 孕交videosgratis孕妇性欧美| 国产精品视频露脸| 色护士极品影院| 好男人在线视频免费观看| 亚洲熟妇av一区| 精品成在人线av无码免费看| 日本一卡2卡3卡4卡无卡免费| 狠狠色丁香婷婷久久综合|