CodingChap
CodingChap

Reputation: 1118

How can I destroy a game object forever?

So, I have this potion. When the player in my game comes in contact with the potion, I want to destroy the potion. However, if the player dies, the scene will reload and the potion will still be in the level. If the player collides with the potion, I don't want them to obtain it. They should only be able to collect the potion once.

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


public class DestroyPotionForever : MonoBehaviour
{
    public bool potionCollide = false;

    // Start is called before the first frame update
    void Start()
    {
        
    }
    void OnTriggerEnter(){
        if(potionCollide == false){
            Destroy(gameObject);
            bool potionCollide = true;
        }
    }


    // Update is called once per frame
    void Update()
    {
        
    }
}

But...this code doesn't work. Any help is appreciated.

Upvotes: 2

Views: 1233

Answers (3)

Tài Lê
Tài Lê

Reputation: 121

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


public class DestroyPotionForever : MonoBehaviour
{
    public bool potionCollide = false;

    // Start is called before the first frame update
    void Start()
    {
        
    }
    void OnTriggerEnter(){
        if(potionCollide == false){
            Destroy(gameObject);
            potionCollide = true;
        }
    }


    // Update is called once per frame
    void Update()
    {
        
    }
}

Just using global var. potionCollide . You created local variable instead of using variable global.

Upvotes: 2

Nick McVroom
Nick McVroom

Reputation: 496

A simple way would be to store whether you had picked up the potion in PlayerPrefs.

Then you could do something like:

void OnTriggerEnter()
{
    if(PlayerPrefs.GetInt("GotPotion", 0) == 0)
    {
        // You didn't get the potion yet, so get it
        Destroy(gameObject);
        PlayerPrefs.SetInt("GotPotion", 1); // got the potion
    }
}

Then wherever you spawn your potion, you could have:

if(PlayerPrefs.GetInt("GotPotion", 0) == 1)
{
    // Got the potion already, so don't spawn the potion
}

Or, you if you put the potion in the scene directly, you could do:

void Start()
{
    if(PlayerPrefs.GetInt("GotPotion", 0) == 1)
    {
        // If the potion is already picked up, destroy it
        Destroy(gameObject);
    }
}

A much better way would be to write your own save system as Antnio Pedro Gonalves Ferreira suggested, but this will get you through the demo phase at least.

Upvotes: 4

Is your potion on the scene before you start the game? Whatever happens during runtime does not permanently change the scene, if you want the potion to disappear forever it cannot be on the hierarchy of the scene before the game runs. When you reload a scene it resets to the state it was before you ran the game.

Upvotes: 0

Related Questions