下位Gameobjectも含めてシェーダーを変更
/// <summary> /// rootObj以下のすべてのShaderを変更する /// </summary> /// <param name="rootObj"></param> /// <param name="shaderName"></param> public static void setShaderToGameobject(GameObject rootObj, string shaderName) { Debug.Log("setShaderToGameobject started: " + rootObj.name + " / " + shaderName); var shader = Shader.Find(shaderName); foreach (Transform t in rootObj.GetComponentsInChildren<Transform>()) { foreach (var renderer in t.GetComponentsInChildren<Renderer>()) { foreach (var material in renderer.sharedMaterials) { material.shader = shader; } } } }
下位Gameobjectも含めてMeshがあればMesh Collidarを追加
/// <summary> /// rootObj以下のMeshがある場合、MeshコライダーをConvexオプションありで設定する /// </summary> /// <param name="rootObj"></param> public static void setConvexMeshCollidarToGameobject(GameObject rootObj) { Debug.Log("setConvexMeshCollidarToGameobject started: " + rootObj.name); foreach (MeshRenderer m in rootObj.GetComponentsInChildren<MeshRenderer>()) { MeshCollider meshc = m.gameObject.AddComponent(typeof(MeshCollider)) as MeshCollider; meshc.convex = true; } }
呼び出しサンプル
- プロジェクト内のobjファイルを読み込む
- シェーダーをUnlitに変更する
- メッシュコライダーを追加する(ConvexオプションON)
- Prefabに保存する
string targetFilePath = "Assets/obj/mesh.obj"; string targetPrefabPath = "Assets/mesh.prefab"; GameObject targetObj = AssetDatabase.LoadAssetAtPath(targetFilePath, typeof(GameObject)) as GameObject; var targetObjInstance = PrefabUtility.InstantiatePrefab(targetObj) as GameObject; AssetDatabase.SaveAssets(); setShaderToGameobject(targetObj, "Unlit/Texture"); setConvexMeshCollidarToGameobject(targetObjInstance); PrefabUtility.CreatePrefab(targetPrefabPath, targetObjInstance);