可拖动对象中的碰撞不起作用
Collision in dragable objects not working
我的游戏能够点击和生成对象并用鼠标移动它们。但是,当块与墙壁碰撞时,我希望它们被摧毁。我以与其他对象相同的方式设置了碰撞,但它似乎没有注册。下面是移动和碰撞的代码。
void OnMouseDrag()
{
if (prepPhase == true)
{
Vector2 mousePosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 objectPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objectPosition;
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}
每次生成新块时,它都会创建前一个对象的克隆。每个克隆都附带此脚本。我还测试了将碰撞脚本附加到墙上而不是块上,碰撞检测到 'Block' 标签。但它仍然没有破坏对象。
您的 Destroy
没有引用碰撞中的确切游戏对象。相反,尝试:
Destroy(col.gameObject)
阅读文档:https://docs.unity3d.com/ScriptReference/Collision2D.html
问题是您实际上是通过设置位置来传送您的对象。这是为了防止触发 onCollisionEnter2D 事件。
您可以通过在 if
之前放置一个日志语句来确认这一点
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2d Fired");
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}
更改为 OnCollisionStay2D 应该可以解决问题。
void OnCollisionStay2D(Collision2D col)
{
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}
我的游戏能够点击和生成对象并用鼠标移动它们。但是,当块与墙壁碰撞时,我希望它们被摧毁。我以与其他对象相同的方式设置了碰撞,但它似乎没有注册。下面是移动和碰撞的代码。
void OnMouseDrag()
{
if (prepPhase == true)
{
Vector2 mousePosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 objectPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objectPosition;
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}
每次生成新块时,它都会创建前一个对象的克隆。每个克隆都附带此脚本。我还测试了将碰撞脚本附加到墙上而不是块上,碰撞检测到 'Block' 标签。但它仍然没有破坏对象。
您的 Destroy
没有引用碰撞中的确切游戏对象。相反,尝试:
Destroy(col.gameObject)
阅读文档:https://docs.unity3d.com/ScriptReference/Collision2D.html
问题是您实际上是通过设置位置来传送您的对象。这是为了防止触发 onCollisionEnter2D 事件。
您可以通过在 if
之前放置一个日志语句来确认这一点void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2d Fired");
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}
更改为 OnCollisionStay2D 应该可以解决问题。
void OnCollisionStay2D(Collision2D col)
{
if (col.gameObject.CompareTag("Wall"))
{
Destroy(col.gameObject);
Debug.Log("Collision");
}
}