protected void GenerateShadowData(Texture2D spritesheet) { var renderer = target as AnimatedLitRenderer; var spriteMeshSheet = renderer.GetComponent <SpriteAndMeshSheet>(); if (spriteMeshSheet != null) { spriteMeshSheet.Clear(); } else { spriteMeshSheet = renderer.gameObject.AddComponent <SpriteAndMeshSheet>(); } var spriteSheetPath = AssetDatabase.GetAssetPath(spritesheet); var sprites = AssetDatabase.LoadAllAssetsAtPath(spriteSheetPath); for (int i = 0; i < sprites.Length; ++i) { var sprite = sprites[i] as Sprite; if (sprite == null) { continue; } renderer.renderer.sprite = sprite; var polygonCollider = renderer.gameObject.AddComponent <PolygonCollider2D>(); var shadowMesh = ShadowVolumeUtil.CreateMeshWithoutProjection(polygonCollider); spriteMeshSheet.Add(sprite, shadowMesh); EditorApplication.delayCall += () => DestroyImmediate(polygonCollider); } }
public override void OnInspectorGUI() { DrawDefaultInspector(); var renderer = (target as LitRenderer); EditorGUILayout.LabelField(renderer.shadowMesh ? "Shadow mesh generated" : "Shadow mesh missing!"); if (GUILayout.Button("Generate Shadow Mesh")) { var polygonCollider = renderer.gameObject.AddComponent <PolygonCollider2D>(); renderer.shadowMesh = ShadowVolumeUtil.CreateMeshWithoutProjection(polygonCollider); EditorApplication.delayCall += () => DestroyImmediate(polygonCollider); } }