1 回答
TA贡献1813条经验 获得超2个赞
问题是,由于这个脚本附加到你的两个游戏对象,有两条光线投射到鼠标位置(每个脚本中的一条)。因为您只是希望看到 raycollider 与静态对象匹配,所以无论您单击哪个脚本,这两个脚本都是正确的:
if (rh.collider.gameObject.name == touch_detect.clickedObject.name) // always true
要立即修复,您应该将上述语句更改为类似的内容,以检查射线是否与脚本附加到的同一游戏对象相交:
if (rh.collider.gameObject.name == gameObject.name)
这确实不是最好的方法,因为您仍然投射两条光线,因此执行所有逻辑两次(如果您生成更多立方体,则执行更多次)。更好的方法是拥有一个投射光线的主游戏对象。当此射线与立方体相交时,您将激活该立方体脚本中的一个方法以显示激光。例如:
在主对象上,您将拥有:
if (Physics.Raycast(ray, out rh, Mathf.Infinity))
{
// add a tag to all objects with the laser script
if (rh.collider.gameObject.tag == "hasLaser") //verify object has laser script via tag
rh.collider.GetComponent<laser>().activateLaser(); // call public method in collider script
}
然后立方体将具有带有公共方法的激光脚本:
public void activateLaser()
{
lr.enabled = true;
}
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
