예제 #1
0
파일: MJImport.cs 프로젝트: WarrG3X/DobotVR
    // import materials
    private unsafe void ImportMaterials(int nmaterial)
    {
        // allocate array, find all existing
        materials = new Material[nmaterial];
        Object[] allmaterials = Resources.FindObjectsOfTypeAll(typeof(Material));

        // process materials
        for (int i = 0; i < nmaterial; i++)
        {
            // get material name
            StringBuilder name = new StringBuilder(100);
            MJP.GetElementName(MJP.TElement.MATERIAL, i, name, 100);
            string matname = fileName + "_" + name.ToString();

            // find existing material
            foreach (Object matt in allmaterials)
            {
                if (matt != null && matt.name == matname)
                {
                    materials[i] = (Material)matt;
                    break;
                }
            }

            // not found: create new material
            materials[i] = new Material(Shader.Find("Standard"));

            // get material descriptor and save
            MJP.TMaterial mat;
            MJP.GetMaterial(i, &mat);

            // set properties
            materials[i].name = matname;
            materials[i].EnableKeyword("_EMISSION");
            materials[i].SetColor("_Color", new Color(mat.color[0], mat.color[1], mat.color[2], mat.color[3]));
            materials[i].SetColor("_EmissionColor", new Color(mat.emission, mat.emission, mat.emission, 1));
            if (mat.color[3] < 1)
            {
                materials[i].SetFloat("_Mode", 3.0f);
            }

            // set texture if present
            if (mat.texture >= 0 && importTexture)
            {
                materials[i].mainTexture      = textures[mat.texture];
                materials[i].mainTextureScale = new Vector2(mat.texrepeat[0], mat.texrepeat[1]);
            }

            // create asset in database if not aleady there
            if (!AssetDatabase.Contains(materials[i]))
            {
                AssetDatabase.CreateAsset(materials[i], "Assets/Materials/" + matname + ".mat");
            }
        }

        AssetDatabase.Refresh();
    }