【发布时间】:2017-05-23 06:49:21
【问题描述】:
在我的游戏中,用户可以通过鼠标点击生成 2 个预制件的实例化版本:瓷砖和球。球可以在瓷砖上生成。
用户还可以擦除已生成的对象。这是通过将以下代码放在更新方法的if(Input.GetMouseButtonDown(0))) 块中来实现的:
if (Input.GetMouseButtonDown(0))
{
Vector3 mousePos = Input.mousePosition;
mousePos.z = canvas.transform.position.z;
Vector3 mousePosTrans = Camera.main.ScreenToWorldPoint(mousePos);
RaycastHit2D rayHit = Physics2D.Raycast(mousePosTrans, Vector2.zero);
if (eraserSelected)
{
Destroy(rayHit.collider.gameObject);
}
}
打算删除的对象正在被删除,但问题是其他不相关和遥远的对象有时也会同时被删除。例如,如果我生成 2 个方格和每个方格上的一个球,然后删除第一个球,当我去删除第一个方格时,同时删除第二个球。有时当一个对象被删除时,另一个对象同时被“取消删除”!
使用以下代码生成对象:
TileOrBall obj = (TileOrBall) Instantiate(tileOrBall, pos, Quaternion.identity);
obj.transform.SetParent(canvas.transform);
其中TileOrBall 是正在生成的对象的类,tileOrBall 是对该类的两个预制件之一的引用。
那么我在生成或销毁对象时采用的方法有什么问题吗?在尝试销毁这些对象的实例时,如何解决同时删除(有时是复活)不同对象的问题?
编辑:
添加项目 zip 文件的链接:
https://drive.google.com/open?id=0B28_MgFRWv97OWxfNE96LXcxZHc
要重现该问题,请单击边栏中的正方形并在网格中的任意位置“绘制”正方形,然后单击边栏中的球并在已放置的正方形上“绘制”。最后,单击橡皮擦图标并通过单击它们开始删除对象。你会看到你没有点击的对象被删除了,当你尝试删除对象时你甚至可能看到对象被复活了。
谢谢!
【问题讨论】:
标签: c# unity3d mouseover instantiation destroy