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

这基本上是两个网格,其中一个将是不可见的(禁用的渲染),但我把它放在上下文中。
目标是从后面的网格中的每个瓷砖中创建一个射线投射,以检测它前面是否有什么东西,然后更改tiles标记。
我的代码如下所示:
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
发布于 2016-11-01 10:12:09
我的“地图”对象中没有一个既没有刚体也没有对撞机,这是毫无价值的。
Physics.Raycast 不会在没有对撞机的情况下工作。
因为这是一个2D游戏,你必须使用盒对撞机2D。同时,将Rigidbody 2D附加到它。
最后,Physics.Raycast只用于none 2D对撞机。你必须用RaycastHit2D.Raycast代替它。同时,RaycastHit也应该被RaycastHit2D取代。
为了使它更容易,只需改变:
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";
}至
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。
https://stackoverflow.com/questions/40357096
复制相似问题