我正在使用
void Update()
{`for (var i = 0; i < Input.touchCount; ++i)
{
if (Input.GetTouch(i).phase == TouchPhase.Began)
{
// Construct a ray from the current touch coordinates
Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);
if (Physics.Raycast(ray))
Destroy();
}
}
}
我在我的手机(Windows phone)上测试了一下,看看我是否可以触摸我的物体进行破坏。这个脚本也附在对象上,所以当被触摸时,它应该会被销毁。相反,如果我触摸屏幕上的任何地方,所有的对象,即一个对象的多个副本,都会被销毁,而不是我触摸的特定对象。当我使用OnMouseDown时不会发生这种情况。有什么我可以做的类似于MouseDown的触摸控制吗?
尝试使用
Destroy(gameObject);
或
Destroy(this.gameObject);
Physics.Raycast
返回一个布尔值,指示您是否命中了任何内容,这很有用,但在这种情况下,您还需要知道您命中了什么。
幸运的是,Raycast函数的重写确实填充了这些数据,使用out
参数来填充RaycastHit
。如果您以前没有在C#中见过out
关键字,那么它与其他语言中的pass-by-reference类似。
如果光线投射返回true,那么命中数据已经填充,你可以了解更多关于用户刚刚点击的内容。例如,它是哪个GameObject?
快速示例:
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
Destroy(hit.collider.gameObject);
}
有关更多信息,包括控制光线投射的可选参数或可以从命中数据中提取的其他详细信息,请参阅我在上面链接的手册页面。