@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>())
        {
            // ????????????????????????
        }
    }
}
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Destroy(gold.gemaObject);
В физике вообще нет никакой надобности, можно удалять как только он опуститься ниже некоторого значения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы