180bpm

AssetBundle에 Shader가 포함된경우 Editor에서 분홍색으로 나오는 문제에 대한 자세한 설명 본문

Develop/Unity

AssetBundle에 Shader가 포함된경우 Editor에서 분홍색으로 나오는 문제에 대한 자세한 설명

powdersnow 2016. 3. 24. 17:54

http://baramlife.tistory.com/9


오!


그리고 우리는 이렇게 쓰고 있다.


개선한 코드, 하위 오브젝트도 붙은 경우가 있어서.

// 불러온 게임 오브젝트들의 쉐이더를 재지정해준다.
        public static void ReAssignShader(GameObject obj)
        {
            Debuger.Log("find object : " + obj);
 
            Renderer[] renderers = obj.transform.GetComponentsInChildren<Renderer>(true);
 
            foreach (Renderer item in renderers)
            {
                if (item.materials != null)
                {
                    foreach (Material mat in item.materials)
                    {
                        Shader sha = mat.shader;
                        sha = Shader.Find(sha.name);
                       // Debuger.Log(item.gameObject.name + " : " + mat.name, item.gameObject);
                    }
                }
            }
        }


// 불러온 게임 오브젝트들의 쉐이더를 재지정해준다.
        public static void ReAssignShader(GameObject obj)
        {
            for (int i = 0; i < obj.transform.childCount; i++)
            {
                if (obj.transform.GetChild(i).GetComponent<Renderer>() != null)
                {
                    obj.transform.GetChild(i).GetComponent<Renderer>().material.shader = Shader.Find(obj.transform.GetChild(i).GetComponent<Renderer>().material.shader.name);
                    for (int j = 0; j < obj.transform.GetChild(i).transform.childCount; j++)
                    {
                        if (obj.transform.GetChild(i).transform.GetChild(j).GetComponent<Renderer>() != null)
                        {
                            obj.transform.GetChild(i).transform.GetChild(j).GetComponent<Renderer>().material.shader = Shader.Find(obj.transform.GetChild(i).transform.GetChild(j).GetComponent<Renderer>().material.shader.name);
                        }
                    }
                }
            }
        }


Comments