Skip to main content

Don't Destroy On Load..

So if you want to keep an object or script that keeps up variables (or for any other reason) when you go from scene to scene, you need to attach a don't destroy on load static function, which goes something like this:

function Awake () {
    DontDestroyOnLoad (transform.gameObject);
}

The Awake function is call only once, when all the objects in the scene have been created. Read more about it here.

DontDestroyOnLoad has what ever is in the ( ) to not be destroyed when creating a new scene.

(transform.gameObject) is what will not be destroyed when the new scene is loaded, in this case, it will be the game object and all it's children the script is attached to.



Now that the object is not destroyed, when ever you load the scene that has the object again, that same object will be created. This usually isn't what people want. If you are one of those people, your going to need to create a script to check if the object has been created, and if it hasn't create the object. One way is:


static var stats = null;
var objectToBeCreated:Transform;

public class GameStatus {
function GameStatus() {
}
}

function Awake () {
    if(stats == null){
Debug.Log("stats == null");
stats = new GameStatus();
Instantiate(objectToBeCreated);
}
}



So just attach that to some game Object in your level. =D

Comments

  1. The problem "Now that the object is not destroyed, when ever you load the scene that has the object again, that same object will be created. This usually isn't what people want." is exactly what I want to fixed. Your solution does not inherit from monobehaviour and without that you cannot use Awake () (it will not be called automatically). If you inherit from monobehaviour, you cannot do "stats = new GameStatus()"

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Fixed it though,

    I created an Empty GameObject that holds a reference to a prefab of the object I want to create and live over scenes and when the scene it was created from is loaded again, I check if the object exists first before deciding to instantiate another copy or not.

    -------------------------
    public GameObject my_Prefab_Instance;


    void Awake(){

    if (!GameObject.Find ("Prefab(Clone)")){

    Instantiate(my_Prefab_Instance);
    }
    }

    ReplyDelete
  4. can u help me, explain to me by mail more detail about using this ?? I'm newbie who want to try this code on loadscene, thanks

    ReplyDelete

Post a Comment

Popular posts from this blog

How To Make a Hellish Looking Sky Box

I came across this problem while constructing my scene of Hell in a little project I've been working on, and could not find a reasonable sky box on the web for what I want. Maybe I was not looking hard enough, but I ended up making nice substitute. If you think the sky box looks familiar, then your right. The Sky box I'm using is already packaged with Unity3D! To import the sky boxes Unity has made for you,  simply go to Assets>Import Package>Skyboxes.  The sky boxes will appear in your projects tab under a folder named "Standard Assets". To make this sky box, first you must find the folder containing all the sky box materials and open it up. In it will be a list of sky boxes for your disposal. To get this skybox, I decided to tweak the "StarryNight Skybox" (But the "MoonShine Skybox" looks pretty cool also!).  Select the sky box and view it under the inspector tab. Underneath the properties there will be a tint color variable allowin

Making A Laser Pointer

Want a frieking lazer pointer? BOOM. Attach a Line Renderer component to the object you have the script below attached to. (Component> Miscellaneous>Line Renderer) Code: function Update () { var lineRenderer : LineRenderer = GetComponent(LineRenderer); lineRenderer.useWorldSpace = false; lineRenderer.SetVertexCount(2); var hit : RaycastHit; Physics.Raycast(transform.position,transform.forward,hit); if(hit.collider){ lineRenderer.SetPosition(1,Vector3(0,0,hit.distance)); } else{ lineRenderer.SetPosition(1,Vector3(0,0,5000)); } } @script RequireComponent(LineRenderer) Thank  3dDude for the script. Original Source here .

How To Make A Gun Shot Sound (SFX On Unity 3D)

When it comes to audio in Unity, there are four components: Audio Clip , Audio Source , Audio Listener , and Audio Re-verb Zone . Audio Clips are the actual audio file imported into your game. Unity supports file formats: .aif, .wav, .mp3, and .ogg. When imported, you can compress them greatly, with the price of loosing some quality. You can do this by first selecting the audio clip, view it in the inspector. Under the Audio Importer component, you can switch the audio format from Native to the audio clip, to a compressed format applied by Unity. You can change how compressed the file is by dragging the bar at the bottom, then hitting apply. You can get plenty of free good SFX from a site called  freesound.org . All you have to do is create an account for free , and download all the sounds you want. I found a nice gun shot sound here . Simply download and load into your Project. Audio Source actually plays the audio clip in your scene. They are an component, so it mu