Unity中预制件的双重碰撞

问题描述 投票:0回答:1

我希望当两个球体(预制件)相遇时它们会消失并形成一个正方形,但形成了 2 个

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class circle : MonoBehaviour
{
    public GameObject square;
    Vector3 pos;
    void Start()
    {
        
    }

    void Update()
    {
        
    }
    void OnCollisionEnter2D(Collision2D collision) {
        if(collision.gameObject.name == this.gameObject.name)  {
            pos = transform.position;
            Destroy(gameObject);
            Instantiate(square, pos, Quaternion.identity);
        }
    }

}

我尝试使用 for 和 while 循环以及变量,但我无法让它工作

c# unity-game-engine 2d collision-detection 2d-games
1个回答
0
投票

生成 2 个方块的原因是因为两个对象都生成了该方块。
要解决此问题,请向类添加一个布尔值以指示合并是否已发生。
在合并之前,检查该布尔值以查看合并是否已被处理。
如果尚未合并,请将 merged 设置为 true 并销毁两个对象。

public class Circle : MonoBehaviour
{
    private bool isMerged;

    void OnCollisionEnter2D(Collision2D collision) 
    {
        if (collision.gameObject.TryGetComponent<Circle>(out var otherCircle) &&
            collision.gameObject.name == this.gameObject.name &&
            otherCircle.isMerged == false)
        {
            isMerged = true;
            Instantiate(square, transform.position, Quaternion.identity);
            Destroy(gameObject);
            Destroy(collision.gameObject);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.