Уничтожить клона по клику - PullRequest
0 голосов
/ 08 июля 2019

В настоящее время я пытаюсь в течение 2 дней уничтожить созданный заранее готовый клон одним щелчком мыши.

Приведенный ниже код выполняет 2 действия, автоматически уничтожая их через заданный интервал, что прекрасно работает. Функция щелчка уничтожает все клоны, даже если я нажимаю на префаб или нет, что я не хочу делать.

Обновление: Этот проект в 2d

Я искал здесь и спрашивал других на разных скриптовых платформах, и их советы, похоже, не помогают.

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

 public class DestroyOnClick : MonoBehaviour
 {
     public float lifeTime = 10f;


     void Update()
     {
         if (Input.GetMouseButton(0))
         {
             Destruction();
         }

         if (lifeTime > 0)
         {
             lifeTime -= Time.deltaTime;
             if(lifeTime <= 0)
             {
                 Destruction();
             }
         }


     }


     void Destruction()
     {
         Destroy(this.gameObject);
     }
 }

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Пусть ваш Monobehaviour реализует обработчик событий PointerClick или PointerDown, и убедитесь, что у вас есть EventSystem в вашей сцене и raycaster на активной камере.

//something along these lines:
using UnityEngine;
public class DestroyOnClick : Monobehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerClickEventData data)
    {
        Destroy(this.gameObject);
    }
}
0 голосов
/ 08 июля 2019

Быстрое решение состоит в том, чтобы поместить коллайдер в клон, которого вы пытаетесь уничтожить, и добавить новый скрипт в свой клон (или изменить скрипт, который у вас уже есть в вашем клоне).

Скрипт должен содержать этот метод:

private void OnMouseDown()
{
    Destroy(gameObject);
}

или

private void OnMouseUp()
{
    Destroy(gameObject);
}

Оба метода уничтожат выбранный GameObject, но они будут выполнены на разных этапах щелчка. OnMouseDown () вызывается, когда вы нажимаете кнопку мыши, и OnMouseUp вызывается, когда вы

0 голосов
/ 08 июля 2019

, поскольку обновление будет запускать весь игровой объект, не используйте Input.GetMouseButton(0) в обновлении

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

 public class DestroyOnClick : MonoBehaviour
 {
     public float lifeTime = 10f;


     void Update()
     {
         if (lifeTime > 0)
         {
             lifeTime -= Time.deltaTime;
             if(lifeTime <= 0)
             {
                 Destruction();
             }
         }


     }
     //write here , it only work in this gameobject
     void OnMouseDown() { Destruction(); }

     void Destruction()
     {
         Destroy(this.gameObject);
     }
 }
...