Joe*_*des 1 c# sendmessage unity-game-engine
我正在使用OverlapSphere来检测对象的某个半径内的所有碰撞器.然后我过滤掉了一些我不在乎的东西.剩下的几个,我尝试向这些对象发送消息以更新其渲染颜色.每当它发送消息时,团结就会冻结.我试着做一些研究,我能找到的最好的东西是无限循环可以冻结它.但我认为没有潜力.这是代码:
发送消息的对象:
void sendmyMessage(bool status)
{
Collider[] tiles = Physics.OverlapSphere(gameObject.transform.position, 10);
int i = 0;
while (i < tiles.Length)
{
if(tiles[i].tag == "Tile")
{
//turn light on
if (status == true)
{
tiles[i].SendMessage("Highlight", true);
i++;
}
//turn light off
if (status == false)
{
tiles[i].SendMessage("Highlight", false);
i++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对象接收消息:
void Highlight(bool status)
{
//turn light on
if(status == true)
{
gameObject.GetComponent<Renderer>().material.color = new Color(0, 0, 0);
}
//turn light off
if(status == false)
{
gameObject.GetComponent<Renderer>().material.color = new Color(1, 1, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢!
它因为逻辑而冻结,if(tiles[i].tag == "Tile")这是你的答案.现在假设你碰撞的物体有"不是瓷砖"标签吗?然后循环永远不会结束.
foreach(var tile in tiles) {
if (tile.tag == "Tile") {
tiles[i].SendMessage("Highlight", status);
}
}
Run Code Online (Sandbox Code Playgroud)