@UnityNoob

Как уничтожить объект при соприкосновении с определенной поверхностью в UNITY?

Начал писать игру. Идея в том, что у нас в самом низу экрана есть пила (а точнее две, но это не так важно), которая крутится. Сверху на неё падает красный квадратик (необработанная руда), который со временем "перемалывается" в золотые треугольнички (золотая руда\обработанная). Скрипт разрушения необработанной руды и спавна на её месте золотой работает отлично. Но проблема в том, что нужно куда-то девать нашу золотую руду.
Для этого я создал плоскость под пилами, которую игрок не будет видеть. Идея в том, что как только золото касается плоскости, то оно должно уничтожаться (в т.ч. и из памяти, чтобы игра не тормозила, если золота станет слишком много). Как это реализовать? Что писать в последнем скрипте?

63541fda0daa8589291546.jpeg

63542024e96de587258193.jpeg

6354202f3d0ab526314032.jpeg

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

public class SawSettings : MonoBehaviour
{
    // Здесь мы заставляем наши пилы крутиться

    private float rotationZ;
    public int rotationSpeed;
    public bool clockWiseRot; // По часовой или против часовой

    void Update()
    {
        if (clockWiseRot)
            rotationZ += Time.deltaTime * rotationSpeed;
        
        else
            rotationZ -= Time.deltaTime * rotationSpeed;

        transform.rotation = Quaternion.Euler(0, 0, rotationZ);
    }

}


using Mono.Cecil.Cil;
using System.Collections;
using UnityEngine;

public class RoughOre : MonoBehaviour
{
    public GameObject goldOre;               // Обьект, который появляется после уничтожения красной руды
    public float OreDestructionCounter = 2f; // Время, спустя которое красная руда уничтожается
    private int AmountOfGoldOre = 3;         // Сколько золота мы заспавним на месте уничтоженной красной руды


    private void OnCollisionEnter2D(Collision2D collision)
    {
        Destroy(gameObject, OreDestructionCounter);     // Уничтожаем красную руду после соприкосновения с пилами
    }

    private void OnDestroy()
    {
        // Спавн золотой руды после разрушения красной

        for (int i = 0; i < AmountOfGoldOre; i++)
        {
            if (i < AmountOfGoldOre)
            {
                Instantiate(goldOre, transform.position, transform.rotation);
            }
            else
            {
                break;
            }
        }
    }
}


using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class GlobalDestroyer : MonoBehaviour
{
    // Просто метка плоскости, чтобы золотая руда понимала, что касается именно её
}


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

public class GoldOre : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.GetComponent<GlobalDestroyer>())
        {
            // ????????????????????????
        }
    }
}
  • Вопрос задан
  • 441 просмотр
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Destroy(gold.gemaObject);
В физике вообще нет никакой надобности, можно удалять как только он опуститься ниже некоторого значения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы