- Home /
Add mesh with materials to scene through code.
I'm writing a MenuItem that iterates through fbx files located in "Assets/Resources". I want it to add one instance of each mesh to the current scene.
From helpful posts I have learned how to generate a GameObject and add a MeshFilter and MeshRenderer etc. But what I really want is for the GameObject to be generated as if drag-and-dropping the mesh from the asset browser into the scene [which means materials are assigned correctly].
Is that possible?
If not - how can I query for what materials a mesh is referencing?
Current code [that works but not giving me the result I am after]:
using UnityEngine;
using UnityEditor;
using System.IO;
public class MenuItems
{
[MenuItem("Tools/Process Meshes")]
private static void NewMenuOption()
{
DirectoryInfo directoryInfo = new DirectoryInfo("[some unity project path]\\Assets\\Resources\\Meshes");
FileInfo[] fbxFileInfos = directoryInfo.GetFiles("*.fbx");
foreach (FileInfo fbxFileInfo in fbxFileInfos)
{
string meshResourcePath = string.Format("Meshes/{0}", fbxFileInfo.Name.Replace(".fbx", ""));
var mesh = Resources.Load(meshResourcePath, typeof(Mesh));
Mesh meshInstance = Object.Instantiate(mesh) as Mesh;
GameObject gameObject = new GameObject(fbxFileInfo.Name.Replace(".fbx", ""));
gameObject.AddComponent(typeof(MeshFilter));
gameObject.AddComponent(typeof(MeshRenderer));
MeshFilter meshFilter = gameObject.GetComponent("MeshFilter") as MeshFilter;
meshFilter.mesh = meshInstance;
}
}
}
Your answer
Follow this Question
Related Questions
Mesh slicing or shattering 1 Answer
importing from blender 1 Answer
Missing Materials and Textures Quick Fix? 0 Answers
Dynamic mesh positioning with Raycast intersection... 0 Answers
How can I save a gameobject's mesh? 1 Answer