如何在单击游戏对象的同一位置实例化“粒子系统”?

时间:2018-10-19 06:53:57

标签: unity3d unityscript

我想在游戏中单击硬币时实例化粒子系统,但粒子系统未出现在硬币所在的相同位置。

我使用了这段代码,但我不知道在我单击的位置(鼠标位置)或硬币所在的位置指定粒子系统的位置。我将预制硬币用于硬币并标记了它们。并且当我单击硬币时也会创建pickupeffect克隆,所以我需要在几秒钟后销毁它们

8

2 个答案:

答案 0 :(得分:1)

销毁硬币后,您可以获得hit.collider.gameObject的位置,并在同一位置实例化系统。请记住,如果硬币继承的位置与x=0, y=0不同,则可能需要实例化该对象并设置相同的父对象。该代码应如下所示:

if (hit.collider.tag == "coin") {
    ReplaceCoinWithSys(hit.collider.gameObject, Resources.Load ("Pickupeffect"))
}

,方法应该是这样的:

private void ReplaceCoinWithSys(GameObject coin, GameObject system){   
    Instantiate(system,new Vector2 (coin.transform.position.x, coin.transform.position.y), Quaternion.identity);
    Destroy (coin);
}

我希望这会有所帮助,在您完成游戏后打我,我想尝试一下:)

答案 1 :(得分:0)

希望它可以帮助您

    private Gameobject ObjectThatYouNeedToDestroy;// gameobject initialization

   void Update () {
    if (Input.GetMouseButtonDown (0)) {
        RaycastHit2D hit = Physics2D.Raycast (Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
    }
    if (hit.collider != null) 

因此,当单击的对象是硬币时,则:

    if (hit.collider.tag == "coin") {

使用默认的预制旋转(hit.transform.position)在光标(Quaternion.identity)击中的对象位置实例化该对象。

        Instantiate (Resources.Load ("Pickupeffect"), hit.transform.position, Quaternion.identity);//instantiate particle prefab in coin position with original prefab rotation
        float DelayTime = 5f;// change delay with any value

如果无法在另一个函数中评估值ObjectThatYouNeedToDestroy,则将命中对象分配给变量hit.transform.gameobject

        ObjectThatYouNeedToDestroy= hit.transform.gameobject;// assign coin that clicked as ObjectThatYouNeedToDestroy

最后一步是在延迟时间到期后执行DelayedDestroy函数。

        Invoke ("DelayedDestroy", DelayTime);//execute function with delay
    }
}

这是销毁名为ObjectThatYouNeedToDestroy(硬币)的游戏对象的功能

void DelayedDestroy(){
    Destroy (ObjectThatYouNeedToDestroy);
}