public OnionSkinObject(GameObject go) { dummyObject = new DummyObject(); dummyObject.Initialize(go); #region ChangeMaterials createdMaterials = new List <Material>(); { foreach (var pair in dummyObject.rendererDictionary) { bool changeShader = pair.Key is SkinnedMeshRenderer; if (!changeShader && pair.Key is MeshRenderer) { changeShader = true; foreach (var comp in pair.Key.GetComponents <Component>()) { if (comp.GetType().Name.StartsWith("TextMesh")) { changeShader = false; break; } } } if (changeShader) { Shader shader; #if UNITY_2018_1_OR_NEWER if (GraphicsSettings.renderPipelineAsset != null) { shader = Shader.Find("Very Animation/OnionSkin-1pass"); } else #endif { shader = Shader.Find("Very Animation/OnionSkin-2pass"); } var materials = new Material[pair.Key.sharedMaterials.Length]; for (int i = 0; i < materials.Length; i++) { var keyMat = pair.Key.sharedMaterials[i]; if (keyMat == null) { continue; } Material mat; { mat = new Material(shader); mat.hideFlags |= HideFlags.HideAndDontSave; #region SetTexture { Action <string> SetTexture = (name) => { if (mat.mainTexture == null && keyMat.HasProperty(name)) { mat.mainTexture = keyMat.GetTexture(name); } }; SetTexture("_MainTex"); SetTexture("_BaseColorMap"); //HDRP SetTexture("_BaseMap"); //LWRP #if UNITY_2018_2_OR_NEWER if (mat.mainTexture == null) { foreach (var name in keyMat.GetTexturePropertyNames()) { SetTexture(name); } } #endif } #endregion createdMaterials.Add(mat); } materials[i] = mat; } pair.Key.sharedMaterials = materials; } else { var materials = new Material[pair.Key.sharedMaterials.Length]; for (int i = 0; i < materials.Length; i++) { var keyMat = pair.Key.sharedMaterials[i]; if (keyMat == null) { continue; } Material mat; { mat = Material.Instantiate <Material>(keyMat); mat.hideFlags |= HideFlags.HideAndDontSave; createdMaterials.Add(mat); } materials[i] = mat; } pair.Key.sharedMaterials = materials; } } } #endregion dummyObject.gameObject.SetActive(false); }