Как использовать Инициировать при уничтожении объекта? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь написать код, который позволяет мне постучать по объекту и уничтожить его, и когда он исчезает, эффект взрыва воспроизводится один раз на позиции разрушенного объекта или новый объект появляется там, где был предыдущий объект.

Я попытался найти несколько уроков о том, как кодировать функцию «щелкнуть объект» и уничтожить ее. Я мог сделать это, но я не мог ничего породить.

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

public class IceTile : MonoBehaviour
{
internal Vector3 m_MyTravelPoint;
private void Start()
{
    m_MyTravelPoint = transform.position + new Vector3(0, 0.61f, 0);
}
private void OnDrawGizmosSelected()
{
    Gizmos.DrawWireSphere(m_MyTravelPoint, 0.5f);
}
void Update()
{

}
void OnMouseDown()
{
    // this object was clicked - do something

    object Eff_Heal_2_oneShot = null;
    Instatiate(Eff_Heal_2_oneShot, transform.position, 
Quaternion.identity, out hit);
    Destroy(this.gameObject);

}

private void Instatiate(object eff_Heal_2_oneShot, object position, 
Quaternion identity)
{
    throw new NotImplementedException();
}
}

Я хотел, чтобы этот код позволял мне касаться и удалять объект и вызывать взрыв или порождение объекта, но мне это не удалось.

1 Ответ

0 голосов
/ 23 мая 2019

Во-первых, избавьтесь от своего пользовательского Instantiate метода. Уже есть правильно работающий метод Instantiate на объекте; вам не нужно делать еще один.

Затем добавьте поле public GameObject explosionEffect в класс. Он будет содержать префаб взрыва, который вы хотите создать. В инспекторе сцены перетащите на него сборный домик.

Кроме того, для обнаружения щелчков мыши с помощью OnMouseDown вам необходимо прикрепить некоторый компонент Collider к игровому объекту IceTile. Возможно, вы уже сделали это. Это можно сделать в редакторе сцены.

В OnMouseDown перед вызовом Destroy, позвоните Instantiate, чтобы вызвать эффект взрыва:

Instantiate (explosionEffect, transform.position);

В целом это может выглядеть так:

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

public class IceTile : MonoBehaviour
{

    internal Vector3 m_MyTravelPoint;
    public GameObject explosionEffect;

    private void Start()
    {
        m_MyTravelPoint = transform.position + new Vector3(0, 0.61f, 0);
    }
    private void OnDrawGizmosSelected()
    {
        Gizmos.DrawWireSphere(m_MyTravelPoint, 0.5f);
    }
    void Update()
    {

    }
    void OnMouseDown()
    {
        // this object was clicked - do something
        Instantiate(explosionEffect, transform.position);
        Destroy(this.gameObject);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...