開発入門 > Unity > UnityのC#でまとめてGameobjectのShader変更・コライダー追加

UnityのC#でまとめてGameobjectのShader変更・コライダー追加

下位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;
        }
    }

呼び出しサンプル

  1. プロジェクト内のobjファイルを読み込む
  2. シェーダーをUnlitに変更する
  3. メッシュコライダーを追加する(ConvexオプションON)
  4. 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);

 

 

 

カテゴリー: Unity

HOME / Coporate Site/ Careers

© Copyright 2018 STYLY..