Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.12 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3.  
  4. using Unity.Entities;
  5. using Unity.Mathematics;
  6. using Unity.Transforms;
  7. using Unity.Rendering;
  8.  
  9. public static class SpriteManager
  10. {
  11.     public static Entity[] spritePrefabs;
  12. }
  13.  
  14. [RequiresEntityConversion]
  15. public class SpriteAuthor : MonoBehaviour
  16. {
  17.     public Sprite sprite;
  18.     public List<Sprite> sprites;
  19.  
  20.     private void Awake()
  21.     {
  22.         Convert();
  23.     }
  24.  
  25.     public void Convert()
  26.     {
  27.         EntityManager em = World.DefaultGameObjectInjectionWorld.EntityManager;
  28.  
  29.         EntityArchetype spriteArchetype = em.CreateArchetype(typeof(Prefab), typeof(RenderMesh), typeof(LocalToWorld), typeof(Translation), typeof(Rotation), typeof(Scale));
  30.  
  31.         SpriteManager.spritePrefabs = new Entity[sprites.Count];
  32.  
  33.         for (int i = 0; i < sprites.Count; i++)
  34.         {
  35.             Sprite s = sprites[i];
  36.  
  37.             Vector3[] verts = new Vector3[s.vertices.Length];
  38.             int[] tris = new int[s.triangles.Length];
  39.  
  40.             for (int v = 0; v < verts.Length; v++)
  41.             {
  42.                 verts[v] = new Vector3(s.vertices[v].x, 0f, s.vertices[v].y);
  43.             }
  44.  
  45.             for (int t = 0; t < tris.Length; t++)
  46.             {
  47.                 tris[t] = s.triangles[t];
  48.             }
  49.  
  50.             Mesh mesh = new Mesh
  51.             {
  52.                 vertices = verts,
  53.                 triangles = tris,
  54.                 uv = s.uv
  55.             };
  56.  
  57.             Material material = new Material(Shader.Find("Sprites/Default"));
  58.             material.mainTexture = s.texture;
  59.  
  60.             var renderMesh = new RenderMesh
  61.             {
  62.                 castShadows = UnityEngine.Rendering.ShadowCastingMode.On,
  63.                 layer = 0,
  64.                 mesh = mesh,
  65.                 material = material,
  66.                 receiveShadows = true,
  67.                 subMesh = -1
  68.             };
  69.  
  70.             Entity spritePrefabEntity = em.CreateEntity();
  71.  
  72.             em.AddComponent<RenderMesh>(spritePrefabEntity);
  73.             em.AddComponent<LocalToWorld>(spritePrefabEntity);
  74.             em.AddComponent<Translation>(spritePrefabEntity);
  75.             em.AddComponent<Prefab>(spritePrefabEntity);
  76.  
  77.             em.SetSharedComponentData(spritePrefabEntity, renderMesh);
  78.  
  79.             SpriteManager.spritePrefabs[i] = spritePrefabEntity;
  80.         }
  81.     }
  82. }
  83.  
  84. public class TestSystem : ComponentSystem
  85. {
  86.     bool init;
  87.     EntityManager em;
  88.  
  89.     protected override void OnCreate()
  90.     {
  91.         init = false;
  92.         em = this.World.EntityManager;
  93.     }
  94.  
  95.     protected override void OnUpdate()
  96.     {
  97.         if (!init)
  98.         {
  99.             float3 pos = float3.zero;
  100.             float3 scale = new float3(1f, 1f, 1f);
  101.             foreach (Entity e in SpriteManager.spritePrefabs)
  102.             {
  103.                 Entity sprite = em.Instantiate(e);
  104.                
  105.                 em.SetComponentData<Translation>(sprite, new Translation { Value = pos });
  106.                 em.RemoveComponent<Prefab>(sprite);
  107.  
  108.                 pos += new float3 { x = 2, y = 0, z = 0 };
  109.             }
  110.  
  111.             init = true;
  112.         }
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement