Before updating to Windows 10 you may need to return your Pro license. More information here

Instantiate a prefab through code in C#.

Is there a way to instantiate a prefab, in code through C#, but without actually having to create a public variable of Type GameObject and dragging and dropping a prefab from the project assets into the inspector?

I need to get a reference to an asset, and then instantiate it through code, but I don't know how to do that exactly. I have a game-manager class, which controls the way object are spawned and destroyed, with a total so far of over 20 types of prefabs. It would be far less messy If I could get a reference to them through code than having 20+ public variables in the inspector.

more ▼

asked Feb 23, 2010 at 12:49 PM

avatar image

Dumitru Catalin
241 5 5 9

hey guys i'm trying to do something similar. basically I want my artists to be able to export the many different character models along with their body parts. Then I want to be able to build the character in-game. Question is, does enemy need to be a manually created prefab? For me that would mean a lot of manual work. I just want to be able to create the character directly from the fbx files. Possible?

Jun 05, 2012 at 08:03 PM altra4u
(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

you can use resource folders. create a folder called resources and put all assets that you want to get reference to them by their names, in that folder. use the Load method to load resources. example let's say you have a prefab inside a resource folder called enemy and you want to instantiate it.

var instance : GameObject = Instantiate(Resources.Load("enemy"));

you can create asset bundles of your prefabs and put them inside your game folder too. then call www("file:/path") and get a reference to them and instantiate them. there is another way too. you can create a class that keeps a list of all prefabs in a dictionary. the name of those prefabs in the dictionary could be your key and the real GameObject reference could be the value.

more ▼

answered Feb 23, 2010 at 01:04 PM

avatar image

10.5k 78 127 171

Minor note: Asset Bundles are Pro-only.

Mar 12, 2010 at 04:24 PM Cyclops

You've just saved me A LOT of time with this method, Ashkan :D

Apr 24, 2010 at 08:13 PM joeltebbett

your welcome man!

Apr 25, 2010 at 05:45 AM Ashkan_gc

Thanks a bunch! I really only like using the editor for testing AI, controls that sort of thing. I find building a level kind of a pain, and would rather load and place everything from code. This is great!

Apr 24, 2012 at 06:27 PM sp00ks

Just keep in mind the following:

"In Unity you usually don't use path names to access assets, instead you expose a reference to an asset by declaring a member-variable, and then assign it in the inspector. When using this technique Unity can automatically calculate which assets are used when building a player. This radically minimizes the size of your players to the assets that you actually use in the built game. When you place assets in "Resources" folders this can not be done, thus all assets in the "Resources" folders will be included in a build."


Nov 08, 2013 at 10:23 PM brimock
(comments are locked)
10|3000 characters needed characters left

Slight update to Ashkan's totally correct answer (this time in C#)

Create a folder called "Resources"

GameObject monster = (GameObject)Instantiate(Resources.Load("enemy"));

more ▼

answered Sep 11, 2010 at 09:28 PM

avatar image

user-3794 (google)
201 4 19 6

You dont need to instantiate immidiately. Rather store it in a variable for future spawns...

Mar 28, 2014 at 12:27 AM BerggreenDK
(comments are locked)
10|3000 characters needed characters left

Remember to keep the resources folders organized. You can created a Resources folder anywhere in assets folder, (doesnt have to be a base folder in assets). So you can still have folders to organize your prefabs and then put a Resources folder in the unique folder and put your prefab in that.

more ▼

answered May 20, 2012 at 07:08 AM

avatar image

835 170 143 157

@1337GameDev - nice, didnt know that one. Thanks for sharing.

Mar 28, 2014 at 01:52 PM BerggreenDK

Fairly irrelevant to OP's question.

Mar 31 at 04:21 AM b1nary_atr0phy
(comments are locked)
10|3000 characters needed characters left
 Object prefab = AssetDatabase.LoadAssetAtPath("Assets/something.prefab", typeof(GameObject));
 GameObject clone = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
 clone.transform.position = Vector3.one;

Source: http://forum.unity3d.com/threads/editor-script-create-game-object-from-a-prefab.47845/#post-304595

more ▼

answered Mar 25 at 03:24 PM

avatar image

36 1 3

Don't do this. (Unless you're developing assets for the Asset Store or something.) AssetDatabase is a UnityEditor class. I.e. it won't work anywhere outside of the editor.

Mar 31 at 04:22 AM b1nary_atr0phy

@b1nary_atr0phy, yes, you are right. I forgot that used UnityEditor. Find mistake only then try build Android version.

Mar 31 at 06:46 AM el_santo
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments



asked: Feb 23, 2010 at 12:49 PM

Seen: 82589 times

Last Updated: Mar 31 at 06:46 AM