首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从GameObject到GameObject的Raycast检测

从GameObject到GameObject的Raycast检测
EN

Stack Overflow用户
提问于 2016-11-01 09:18:02
回答 1查看 860关注 0票数 1

我已经创建了当前的设置:

这基本上是两个网格,其中一个将是不可见的(禁用的渲染),但我把它放在上下文中。

目标是从后面的网格中的每个瓷砖中创建一个射线投射,以检测它前面是否有什么东西,然后更改tiles标记。

我的代码如下所示:

代码语言:javascript
复制
 int tileNumber = 0;
        for (float y = 0; y > mapHeight; y--)
        {
            for (float x = 0; x < mapWidth; x++)
            {
                tile.GetComponent<Renderer>().enabled = true;
                GameObject go = Instantiate(tile, new Vector3(x/3, y/3, -2), Quaternion.identity) as GameObject;
                tileNumber++;
                go.name = "tile" + tileNumber;
                go.tag = "grid";
                
                RaycastHit hit;
                Vector3 fwd = go.transform.TransformDirection(Vector3.forward);
                Debug.DrawRay(go.transform.position, fwd * 50, Color.green);
                if(Physics.Raycast(go.transform.position, fwd, out hit, 200)){
                    go.tag = "walkableGrid";
                }
                
            }
        }

但是调试射线甚至没有显示,标签也没有改变。

显示光线确实正常工作的图像,只是没有探测到我的地图网格:

编辑:程序员试图帮助我,但他的解决方案对我无效。他提到这个问题可能在其他地方,所以如果有人像他一样感兴趣,下面是我的项目:Boardgame.rar?dl=0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 10:12:09

我的“地图”对象中没有一个既没有刚体也没有对撞机,这是毫无价值的。

Physics.Raycast 不会在没有对撞机的情况下工作。

因为这是一个2D游戏,你必须使用盒对撞机2D。同时,将Rigidbody 2D附加到它。

最后,Physics.Raycast只用于none 2D对撞机。你必须用RaycastHit2D.Raycast代替它。同时,RaycastHit也应该被RaycastHit2D取代。

为了使它更容易,只需改变:

代码语言:javascript
复制
RaycastHit hit;
Vector3 fwd = go.transform.TransformDirection(Vector3.forward);
Debug.DrawRay(go.transform.position, fwd * 50, Color.green);
if (Physics.Raycast(go.transform.position, fwd, out hit, 200))
{
    go.tag = "walkableGrid";
}

代码语言:javascript
复制
RaycastHit2D hit;
Vector3 fwd = go.transform.TransformDirection(Vector3.forward);
Debug.DrawRay(go.transform.position, fwd * 50, Color.green);
hit = Physics2D.Raycast(go.transform.position, fwd, 200);

if (hit)
{
    go.tag = "walkableGrid";
}

只要将Box Collider 2D附加到每个块,现在就可以工作了。还将Rigidbody 2D附加到它们上。如果它正在下降,将重力标度设置为0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40357096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档