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);
            }
        }
예제 #2
0
        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);
            }
        }