Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections.Generic;
- using Unity.Entities;
- using Unity.Mathematics;
- using Unity.Transforms;
- using Unity.Rendering;
- public static class SpriteManager
- {
- public static Entity[] spritePrefabs;
- }
- [RequiresEntityConversion]
- public class SpriteAuthor : MonoBehaviour
- {
- public Sprite sprite;
- public List<Sprite> sprites;
- private void Awake()
- {
- Convert();
- }
- public void Convert()
- {
- EntityManager em = World.DefaultGameObjectInjectionWorld.EntityManager;
- EntityArchetype spriteArchetype = em.CreateArchetype(typeof(Prefab), typeof(RenderMesh), typeof(LocalToWorld), typeof(Translation), typeof(Rotation), typeof(Scale));
- SpriteManager.spritePrefabs = new Entity[sprites.Count];
- for (int i = 0; i < sprites.Count; i++)
- {
- Sprite s = sprites[i];
- Vector3[] verts = new Vector3[s.vertices.Length];
- int[] tris = new int[s.triangles.Length];
- for (int v = 0; v < verts.Length; v++)
- {
- verts[v] = new Vector3(s.vertices[v].x, 0f, s.vertices[v].y);
- }
- for (int t = 0; t < tris.Length; t++)
- {
- tris[t] = s.triangles[t];
- }
- Mesh mesh = new Mesh
- {
- vertices = verts,
- triangles = tris,
- uv = s.uv
- };
- Material material = new Material(Shader.Find("Sprites/Default"));
- material.mainTexture = s.texture;
- var renderMesh = new RenderMesh
- {
- castShadows = UnityEngine.Rendering.ShadowCastingMode.On,
- layer = 0,
- mesh = mesh,
- material = material,
- receiveShadows = true,
- subMesh = -1
- };
- Entity spritePrefabEntity = em.CreateEntity();
- em.AddComponent<RenderMesh>(spritePrefabEntity);
- em.AddComponent<LocalToWorld>(spritePrefabEntity);
- em.AddComponent<Translation>(spritePrefabEntity);
- em.AddComponent<Prefab>(spritePrefabEntity);
- em.SetSharedComponentData(spritePrefabEntity, renderMesh);
- SpriteManager.spritePrefabs[i] = spritePrefabEntity;
- }
- }
- }
- public class TestSystem : ComponentSystem
- {
- bool init;
- EntityManager em;
- protected override void OnCreate()
- {
- init = false;
- em = this.World.EntityManager;
- }
- protected override void OnUpdate()
- {
- if (!init)
- {
- float3 pos = float3.zero;
- float3 scale = new float3(1f, 1f, 1f);
- foreach (Entity e in SpriteManager.spritePrefabs)
- {
- Entity sprite = em.Instantiate(e);
- em.SetComponentData<Translation>(sprite, new Translation { Value = pos });
- em.RemoveComponent<Prefab>(sprite);
- pos += new float3 { x = 2, y = 0, z = 0 };
- }
- init = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement