首页 > 解决方案 > 如何在销毁对象时使用 Initiate?

问题描述

我正在尝试编写允许我点击对象并销毁它的代码,当它消失时,爆炸效果会在被破坏对象的位置上播放一次,或者新对象会在前一个对象所在的位置产生。

我试图寻找一些关于如何编写“点击对象”功能并销毁它的教程。我能够做到这一点,但我无法产生任何东西。

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();
}
}

我希望这段代码允许我触摸和删除对象并导致爆炸或生成对象,但我没有成功。

标签: c#unity3d

解决方案


首先,摆脱您的自定义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);
    }
}

推荐阅读