如何使用Physics2d.raycast检测射线撞击图层

时间:2019-04-27 15:12:25

标签: c# visual-studio unity3d

我正在尝试使用c#统一制作游戏的外观。我需要检测我是否在特定层上构建。

我已尝试多次将代码向下编辑,但似乎找不到问题。我还观看了多个视频,这些视频解释了我的代码应该可以工作,但也许我只是没看到什么。任何帮助都会很棒。

这是我用于图层检测的代码:

        let pictureHTML = data.map(function(data) {
            return data = `
            <div class="name-title-bottom>">
                <img class="profile-img" ${data.picture}>
                <li class="data-name">${data.name}</li>
                <li class="data-jobTitle">${data.jobTitle}</li>
            </div>
            `
        });    


        let dataHTML = data.map(function(data) {
         return data =`
            <div class="right-side">
                <ul>
                <li class="data-jobTitle">Company: ${data.Company}</li>
                <li class="data-name">School: ${data.School}</li>
                <li class="data-name">Experience: ${data.Experience}</li>
                <li class="data-jobTitle">School: ${data.School}</li>
                <li class="data-name">Major: ${data.Major}</li>
                <li class="data-jobTitle">Email: ${data.Email}</li>
                <li class="data-email">${data.LinkedInUrl}</li></ul><br></div>
            `
        });


        $(".hook").append(pictureHTML);
        $(".hook2").append(dataHTML);

        });

.main{
// position: relative;
padding: 80px 80px 130px 10px;
display: inline-block;

.right-side{
    display: inline-block;
    float: right;
    // position: absolute;
    // top: 180px;
    // right: 0px;
    width: 250px;
    height: 200px;
    padding: 10px;
}

.name-title-bottom{
    // position: absolute;
    // bottom: 0;
    // left: 200px;
    float: left;
    padding: 30px 30px 30px 40px;
    text-align: center;
    display: inline-block;
  }
}

这应该做的是,如果射线与某些图层碰撞(在代码中进一步设置为图层蒙版),则将布尔值buildBlocked设置为true,但不这样做,并且buildBlocked永久为false。同样,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

来自https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

// Bit shift the index of the layer (8) to get a bit mask
        int layerMask = 1 << 8;

        // This would cast rays only against colliders in layer 8.
        // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
        layerMask = ~layerMask;

        RaycastHit hit;
        // Does the ray intersect any objects excluding the player layer
        if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask))
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            Debug.Log("Did Hit");
        }
        else
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white);
            Debug.Log("Did not Hit");
        }