При соприкосновении двух одинаковых объектов удалить только один
Делаю игру по типу Jelly Run 2048, У меня есть скрипт куба, в котором реализован метод onTriggerEnter, и при соприкосновении кубов уничтожаются оба куба.
как сделать, чтобы уничтожался только один куб?
public class Cube : MonoBehaviour
{
public ECubePower Power;
public Material[] Materials;
private MeshRenderer _meshRenderer;
private void Start()
{
_meshRenderer = GetComponent<MeshRenderer>();
_meshRenderer.material = Materials[(int)Power];
}
private void OnTriggerEnter(Collider other)
{
if (other.TryGetComponent<Cube>(out Cube cube))
{
UpPower(cube.Power);
Destroy(cube.gameObject);
}
}
public void UpPower(ECubePower PowerLevel)
{
Power += (int)PowerLevel;
}
public void DownPower(ECubePower PowerLevel)
{
Power -= (int)PowerLevel;
}
}
public enum ECubePower
{
a,
b,
c,
d,
e,
}
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Добавьте в перечисление нулевой элемент, назовем его например Zero
public enum ECubePower
{
Zero,
a,
b,
c,
d,
e,
}
Тогда можно сделать так, что если Power куба равнялся Zero, то он самоуничтожался.
public void DownPower(ECubePower PowerLevel)
{
Power -= (int)PowerLevel;
if (Power == ECubePower.Zero)
Destroy(gameObject);
}
А триггер реализовать как-то так
private void OnTriggerEnter(Collider other)
{
if (Power != ECubePower.Zero && other.TryGetComponent<Cube>(out Cube cube))
{
var power = cube.Power;
UpPower(power);
cube.DownPower(power);
}
}
Автор решения: Qwer
→ Ссылка
У тебя кубы одинаковые, а должны быть технически разными. На тех кубах, что двигаются делай OnTriggerEnter, где будет вся логика обработки столкновения; а на неподвижных просто оставляй триггер, т. к. на них не должно быть никакой логики обработки столкновения.