public void Convert(Entity entity, EntityManager eManager, GameObjectConversionSystem conversionSystem) { instance = this; archetype = eManager.CreateArchetype( typeof(Position2D), typeof(Rotation2D), typeof(Scale), //required params typeof(SpriteIndex), typeof(SpriteSheetAnimation), typeof(SpriteSheetMaterial), typeof(SpriteSheetColor), typeof(SpriteMatrix), typeof(BufferHook) ); NativeArray <Entity> entities = new NativeArray <Entity>(spriteCount, Allocator.Temp); eManager.CreateEntity(archetype, entities); //only needed for first tiem material baking KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(sprites, "emoji"); SpriteSheetMaterial material = new SpriteSheetMaterial { material = atlasData.Key }; DynamicBufferManager.manager = eManager; DynamicBufferManager.GenerateBuffers(material, entities.Length); DynamicBufferManager.BakeUvBuffer(material, atlasData); Rect area = GetSpawnArea(); Random rand = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue)); int cellCount = atlasData.Value.Length; for (int i = 0; i < entities.Length; i++) { Entity e = entities[i]; eManager.SetComponentData(e, new SpriteIndex { Value = rand.NextInt(0, cellCount) }); eManager.SetComponentData(e, new Scale { Value = 10 }); eManager.SetComponentData(e, new Position2D { Value = rand.NextFloat2(area.min, area.max) }); eManager.SetComponentData(e, new SpriteSheetAnimation { maxSprites = cellCount, play = true, repetition = SpriteSheetAnimation.RepetitionType.Loop, samples = 10 }); var color = UnityEngine.Random.ColorHSV(.15f, .75f); SpriteSheetColor col = new SpriteSheetColor { color = new float4(color.r, color.g, color.b, color.a) }; eManager.SetComponentData(e, col); eManager.SetComponentData(e, new BufferHook { bufferID = i, bufferEnityID = DynamicBufferManager.GetEntityBufferID(material) }); eManager.SetSharedComponentData(e, material); } }
protected DynamicBufferManager sendBufferManager; //发送数据的缓存,统一写到内存中,调用一次发送 public ClientBaseSocket() { m_tcpClient = new TcpClient(); m_tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式 ReceiveBufferManager = new DynamicBufferManager(1024 * 4); sendBufferManager = new DynamicBufferManager(1024 * 4); }
public static Entity Instantiate(EntityArchetype archetype, SpriteSheetAnimator animator) { Entity e = EntityManager.CreateEntity(archetype); animator.currentAnimationIndex = animator.defaultAnimationIndex; SpriteSheetAnimationData startAnim = animator.animations[animator.defaultAnimationIndex]; int maxSprites = startAnim.sprites.Length; Material material = SpriteSheetCache.GetMaterial(animator.animations[animator.defaultAnimationIndex].animationName); int bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material); var spriteSheetMaterial = new SpriteSheetMaterial { material = material }; BufferHook bh = new BufferHook { bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial) }; EntityManager.SetComponentData(e, bh); EntityManager.SetComponentData(e, new SpriteSheetAnimation { maxSprites = maxSprites, play = startAnim.playOnStart, samples = startAnim.samples, repetition = startAnim.repetition }); EntityManager.SetComponentData(e, new SpriteIndex { Value = startAnim.startIndex }); EntityManager.SetSharedComponentData(e, spriteSheetMaterial); animator.managedEntity = e; SpriteSheetCache.entityAnimator.Add(e, animator); return(e); }
public static void SetAnimation(EntityCommandBuffer commandBuffer, Entity e, SpriteSheetAnimationData animation, BufferHook hook) { Material oldMaterial = DynamicBufferManager.GetMaterial(hook.bufferEnityID); string oldAnimation = SpriteSheetCache.GetMaterialName(oldMaterial); if (animation.animationName != oldAnimation) { Material material = SpriteSheetCache.GetMaterial(animation.animationName); var spriteSheetMaterial = new SpriteSheetMaterial { material = material }; //clean old buffer DynamicBufferManager.RemoveBuffer(oldMaterial, hook.bufferID); //use new buffer int bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material); BufferHook bh = new BufferHook { bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial) }; commandBuffer.SetSharedComponent(e, spriteSheetMaterial); commandBuffer.SetComponent(e, bh); } commandBuffer.SetComponent(e, new SpriteSheetAnimation { maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0 }); commandBuffer.SetComponent(e, new SpriteIndex { Value = animation.startIndex }); }
public static void SetAnimation(Entity e, SpriteSheetAnimationData animation) { int bufferEnityID = EntityManager.GetComponentData <BufferHook>(e).bufferEnityID; int bufferID = EntityManager.GetComponentData <BufferHook>(e).bufferID; Material oldMaterial = DynamicBufferManager.GetMaterial(bufferEnityID); string oldAnimation = SpriteSheetCache.GetMaterialName(oldMaterial); if (animation.animationName != oldAnimation) { Material material = SpriteSheetCache.GetMaterial(animation.animationName); var spriteSheetMaterial = new SpriteSheetMaterial { material = material }; DynamicBufferManager.RemoveBuffer(oldMaterial, bufferID); //use new buffer bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material); BufferHook bh = new BufferHook { bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial) }; EntityManager.SetSharedComponentData(e, spriteSheetMaterial); EntityManager.SetComponentData(e, bh); } EntityManager.SetComponentData(e, new SpriteSheetAnimation { maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0 }); EntityManager.SetComponentData(e, new SpriteIndex { Value = animation.startIndex }); MarkDirty <SpriteSheetColor>(e); MarkDirty <SpriteIndex>(e); MarkDirty <SpriteMatrix>(e); }
public AsyncSendBufferManager(int bufferSize) { m_dynamicBufferManager = new DynamicBufferManager(bufferSize); m_sendBufferList = new List <SendBufferPacket>(); m_sendBufferPacket.Offset = 0; m_sendBufferPacket.Count = 0; }
public static void DestroyEntity(EntityCommandBuffer commandBuffer, Entity e, BufferHook hook) { commandBuffer.DestroyEntity(e); Material material = DynamicBufferManager.GetMaterial(hook.bufferEnityID); DynamicBufferManager.RemoveBuffer(material, hook.bufferID); }
private SendBufferPacket m_sendBufferPacket; //当前的发送包 #endregion Fields #region Constructors public AsyncSendBufferManager(int bufferSize) { m_dynamicBufferManager = new DynamicBufferManager(bufferSize);//初始化m_dynamicBufferManager //设置缓冲区buffer的大小 m_sendBufferList = new List<SendBufferPacket>();//初始化发送包列表 m_sendBufferPacket.Offset = 0;//当前发送包的偏移量 m_sendBufferPacket.Count = 0;//当前发送包的长度 }
public static void DestroyEntity(EntityCommandBuffer eManager, Entity e, string materialName) { eManager.DestroyEntity(e); Material material = SpriteSheetCache.materialNameMaterial[materialName]; int bufferID = DynamicBufferManager.manager.GetComponentData <BufferHook>(e).bufferID; DynamicBufferManager.RemoveBuffer(material, bufferID); }
public static void DestroyEntity(Entity e, string materialName) { Material material = SpriteSheetCache.GetMaterial(materialName); int bufferID = EntityManager.GetComponentData <BufferHook>(e).bufferID; DynamicBufferManager.RemoveBuffer(material, bufferID); EntityManager.DestroyEntity(e); }
private int Timeout = 8000; //线程等待时间 #endregion Fields #region Constructors public SyncSocketInvokeElement() { m_tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_protocolFlag = ProtocolFlag.None; m_outgoingDataAssembler = new OutgoingDataAssembler(); m_recvBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); m_incomingDataParser = new IncomingDataParser(); m_sendBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); }
public void Convert(Entity entity, EntityManager eManager, GameObjectConversionSystem conversionSystem) { EntityArchetype archetype = eManager.CreateArchetype( typeof(Position2D), typeof(Rotation2D), typeof(Scale), //required params typeof(SpriteIndex), typeof(SpriteSheetAnimation), typeof(SpriteSheetMaterial), typeof(SpriteSheetColor), typeof(SpriteMatrix), typeof(BufferHook) ); NativeArray <Entity> entities = new NativeArray <Entity>(spriteCount, Allocator.Temp); eManager.CreateEntity(archetype, entities); //only needed for the first time to bake the material and create the uv map SpriteSheetManager.RecordSpriteSheet(sprites, spriteSheetName, entities.Length); Rect area = GetSpawnArea(); Random rand = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue)); int cellCount = SpriteSheetCache.GetLength(spriteSheetName); SpriteSheetMaterial material = new SpriteSheetMaterial { material = SpriteSheetCache.GetMaterial(spriteSheetName) }; for (int i = 0; i < entities.Length; i++) { Entity e = entities[i]; eManager.SetComponentData(e, new SpriteIndex { Value = rand.NextInt(0, cellCount) }); eManager.SetComponentData(e, new Scale { Value = 10 }); eManager.SetComponentData(e, new Position2D { Value = rand.NextFloat2(area.min, area.max) }); eManager.SetComponentData(e, new SpriteSheetAnimation { frameCount = cellCount, playMode = PlayMode.Loop, framesPerSecond = 10 }); var color = UnityEngine.Random.ColorHSV(.15f, .75f); SpriteSheetColor col = new SpriteSheetColor { color = new float4(color.r, color.g, color.b, color.a) }; eManager.SetComponentData(e, col); eManager.SetComponentData(e, new BufferHook { bufferID = i, bufferEntityID = DynamicBufferManager.GetEntityBufferID(material) }); eManager.SetSharedComponentData(e, material); } }
public virtual bool processReceive(byte[] buffer, int offset, int length) { DynamicBufferManager bufferManager = userToken.DynamicBufferManager; bufferManager.writeBuffer(buffer, offset, length); bool result = processPacket(bufferManager.Buffer, offset, length); bufferManager.clearBuffer(length); return(result); }
public AsyncSocketServer() { tcpClient = new TcpClient(); tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式 protocolFlag = ProtocolFlag.None; SocketTimeOutMS = ProtocolConst.SocketTimeOutMS; outgoingDataAssembler = new OutgoingDataAssembler(); recvBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); incomingDataParser = new IncomingDataParser(); sendBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); }
public static void RecordSpriteSheet(Sprite[] sprites, string spriteSheetName, int spriteCount = 0) { KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(sprites, spriteSheetName); SpriteSheetMaterial material = new SpriteSheetMaterial { material = atlasData.Key }; DynamicBufferManager.GenerateBuffers(material, spriteCount); DynamicBufferManager.BakeUvBuffer(material, atlasData); renderInformation.Add(new RenderInformation(material.material, DynamicBufferManager.GetEntityBuffer(material.material))); }
protected DynamicBufferManager m_sendBuffer; //发送数据的缓存,统一写到内存中,调用一次发送 public SyncSocketInvokeElement() { m_tcpClient = new TcpClient(); m_tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式 m_protocolFlag = ProtocolFlag.None; SocketTimeOutMS = ProtocolConst.SocketTimeOutMS; m_outgoingDataAssembler = new OutgoingDataAssembler(); m_recvBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); m_incomingDataParser = new IncomingDataParser(); m_sendBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize); }
protected override void OnUpdate() { DynamicBufferManager.CopyBufferEntities(m_bufferEntities); var bufferEntities = m_bufferEntities.AsArray(); var entityManager = EntityManager; Entities.ForEach((Entity e, in BufferHook hook, in LocalToWorld localToWorld) => { var buffer = GetBuffer <MatrixBuffer>(bufferEntities[hook.bufferEnityID]); buffer[hook.bufferID] = localToWorld.Value; })
protected override void OnUpdate() { DynamicBufferManager.CopyBufferEntities(m_bufferEntities); var bufferEntities = m_bufferEntities.AsArray(); var entityManager = EntityManager; Entities.ForEach((in BufferHook hook, in SpriteSheetColor data) => { var buffer = GetBuffer <SpriteColorBuffer>(bufferEntities[hook.bufferEnityID]); buffer[hook.bufferID] = data.color; })
public bool ClearFirstPacket() { if (m_SendBufferList.Count <= 0) { return(false); } int count = m_SendBufferList[0].Count; DynamicBufferManager.Clear(count); m_SendBufferList.RemoveAt(0); return(true); }
public AsyncSocketUserToken(int asyncReceviceBufferSize) { asyncReceviceBuffer = new byte[asyncReceviceBufferSize]; RecevicveEventArgs = new SocketAsyncEventArgs(); RecevicveEventArgs.UserToken = this; RecevicveEventArgs.SetBuffer(asyncReceviceBuffer, 0, asyncReceviceBuffer.Length); SendEventArgs = new SocketAsyncEventArgs(); SendEventArgs.UserToken = this; ReceiveBuffer = new DynamicBufferManager(ProtocolConst.InitBufferSize); SendBuffer = new AsyncSendBufferManager(ProtocolConst.InitBufferSize); }
public static void RecordAnimator(SpriteSheetAnimator animator) { foreach (SpriteSheetAnimationData animation in animator.animations) { KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(animation.sprites, animation.animationName); SpriteSheetMaterial material = new SpriteSheetMaterial { material = atlasData.Key }; DynamicBufferManager.GenerateBuffers(material); DynamicBufferManager.BakeUvBuffer(material, atlasData); renderInformation.Add(new RenderInformation(material.material, DynamicBufferManager.GetEntityBuffer(material.material))); } }
/// <summary> /// 接收到的数据进行处理:该传感器没有帧头帧尾,一帧一处理。 /// </summary> /// <param name="buffer"></param> /// <param name="offset"></param> /// <param name="count"></param> /// <returns></returns> public override bool ProcessReceive(byte[] buffer, int offset, int count) { m_activeDT = DateTime.UtcNow; DynamicBufferManager receiveBuffer = m_asyncSocketUserToken.ReceiveBuffer; //写进缓冲区 receiveBuffer.WriteBuffer(buffer, offset, count); bool result = true; int preCount = 0; // int packetLength = 0; //2字结或者 if (NetByteOrder) { packetLength = System.Net.IPAddress.NetworkToHostOrder(packetLength); //把网络字节顺序转为本地字节顺序 } while (receiveBuffer.DataCount > 0) //0 { //心跳或者其他包 packetLength = receiveBuffer.DataCount;//全部取出 if (packetLength == 1) { receiveBuffer.Buffer[0] = 0xFE;// ///心跳包, Console.WriteLine("心跳包"); } if (packetLength == 38) { byte[] forCheck = new byte[36]; byte[] bCheckResult = new byte[2]; Array.Copy(receiveBuffer.Buffer, 0, forCheck, 0, 36); bCheckResult = CheckSumCRC(forCheck); //校验OK: if ((bCheckResult[0] == receiveBuffer.Buffer[37]) && (bCheckResult[1] == receiveBuffer.Buffer[36])) { bool paseResult = ProcessPacket(receiveBuffer.Buffer, 0, packetLength); } else { Program.Logger.Debug("数据帧尾有问题,抛弃一帧"); Console.WriteLine(System.DateTime.Now + "数据帧尾有问题,抛弃一帧"); } } //一帧数据全部清除 receiveBuffer.Clear(packetLength); } return(true); }
protected SocketAsyncEventArgs m_sendEventArgs; //异步发送事件 #endregion Fields #region Constructors public AsyncSocketUserToken(int asyncReceiveBufferSize) { m_connectSocket = null;//清空connectSocket m_asyncSocketInvokeElement = null;//清空数据传输协议 m_receiveEventArgs = new SocketAsyncEventArgs();//新建接收SocketAsyncEventArgs事件 m_receiveEventArgs.UserToken = this;//指定UserToken m_asyncReceiveBuffer = new byte[asyncReceiveBufferSize];//设置接收缓冲区大小 m_receiveEventArgs.SetBuffer(m_asyncReceiveBuffer, 0, m_asyncReceiveBuffer.Length);//设置异步套接字方法的数据缓冲区 m_sendEventArgs = new SocketAsyncEventArgs();//新建发送SocketAsyncEventArgs事件 m_sendEventArgs.UserToken = this;//指定UserToken m_receiveBuffer = new DynamicBufferManager(ProtocolConst.InitBufferSize);//动态buffer管理对象(接收) m_sendBuffer = new AsyncSendBufferManager(ProtocolConst.InitBufferSize);//动态buffer管理对象(发送) }
public void InitClient(string ip, int port, SZHReceiveCallBack clientReceiveCallBack) { clientBuffer = new DynamicBufferManager(reciveSize, OnClientReceive); this.clientReceiveCallBack = clientReceiveCallBack; clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint clientEP = new IPEndPoint(IPAddress.Parse(ip), port); clientSocket.Connect(clientEP); clientSocket.BeginReceive(tempClientBuffer, 0, reciveSize, SocketFlags.None, new System.AsyncCallback(clientReceive), this.clientSocket); }
public void CheckPackage() { IPAddress ip = IPAddress.Parse(CameraIP); recDynBuffer = new DynamicBufferManager(0xa00000); this.startCode = new byte[] { 0xff, 0xd8, 0xff }; this.endCode = new byte[] { 0xff, 0xd9 }; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ip, 20000); threadClient = new Thread(new ParameterizedThreadStart(ReceiveData)); threadClient.IsBackground = true; threadClient.Start(socket); }
private void btn_Connet_Click(object sender, EventArgs e) { IPAddress ip = IPAddress.Parse(textBox4.Text); recDynBuffer = new DynamicBufferManager(0xa00000); this.startCode = new byte[] { 0xff, 0xd8, 0xff }; this.endCode = new byte[] { 0xff, 0xd9 }; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(ip, 20000); threadClient = new Thread(new ParameterizedThreadStart(this.ReceiveData)); threadClient.IsBackground = true; threadClient.Start(this.socket); }
public BaseClient(int asyncBufferSize) { bufferSize = asyncBufferSize; Handler = new DynamicBufferManager(asyncBufferSize); receiveEventArgs = new SocketAsyncEventArgs(); receiveEventArgs.Completed += IO_Completed; receiveEventArgs.UserToken = this; receiveEventArgs.SetBuffer(new byte[bufferSize], 0, bufferSize); sendEventArgs = new SocketAsyncEventArgs(); sendEventArgs.Completed += IO_Completed; sendEventArgs.UserToken = this; }
protected override JobHandle OnUpdate(JobHandle inputDeps) { var buffers = DynamicBufferManager.GetIndexBuffers(); NativeArray <JobHandle> jobs = new NativeArray <JobHandle>(buffers.Length, Allocator.TempJob); for (int i = 0; i < buffers.Length; i++) { DynamicBuffer <SpriteIndexBuffer> indexBuffer = buffers[i]; jobs[i] = Entities .WithNativeDisableParallelForRestriction(indexBuffer) .WithChangeFilter <SpriteIndex>() .ForEach((in SpriteIndex data, in BufferHook hook) => { if (i == hook.bufferEnityID) { indexBuffer[hook.bufferID] = data.Value; } }).Schedule(inputDeps);
public static Entity Instantiate(EntityArchetype archetype, string spriteSheetName) { Entity e = EntityManager.CreateEntity(archetype); Material material = SpriteSheetCache.GetMaterial(spriteSheetName); int bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material); var spriteSheetMaterial = new SpriteSheetMaterial { material = material }; BufferHook bh = new BufferHook { bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial) }; EntityManager.SetComponentData(e, bh); EntityManager.SetSharedComponentData(e, spriteSheetMaterial); return(e); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { var buffers = DynamicBufferManager.GetMatrixBuffers(); NativeArray <JobHandle> jobs = new NativeArray <JobHandle>(buffers.Length, Allocator.TempJob); for (int i = 0; i < buffers.Length; i++) { inputDeps = new UpdateJob() { indexBuffer = buffers[i], bufferEnityID = i }.Schedule(this, inputDeps); jobs[i] = inputDeps; } JobHandle.CompleteAll(jobs); jobs.Dispose(); return(inputDeps); }
//初始化服务器 public void InitServer(/*SZHReceiveCallBack serverCallBack*/) { serverBuffer = new DynamicBufferManager(reciveSize, OnServerReceive); //this.serverCallBack = serverCallBack; serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 6065); serverSocket.Bind(serverEP); serverSocket.Listen(10); serverSocket.BeginAccept(new AsyncCallback(ServerAccept), serverSocket); //Debug.Log("Server Has Init"); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { var buffers = DynamicBufferManager.GetIndexBuffers(); var jobs = new NativeArray <JobHandle>(buffers.Length, Allocator.Persistent); // Debug.Log(buffers[0].Length +"-"+buffers[1].Length +"-"+buffers[2].Length +"-"+buffers[3].Length); for (var i = 0; i < buffers.Length; i++) { Debug.Log(i); inputDeps = new UpdateJob() { indexBuffer = buffers[i], bufferEntityId = i }.Schedule(this, inputDeps); jobs[i] = inputDeps; } JobHandle.CompleteAll(jobs); jobs.Dispose(); return(inputDeps); }
public static Entity SpawnEntity(EntityCommandBuffer eManager, string materialName) { var e = eManager.CreateEntity(instance.archetype); //only needed for first tiem material baking Material material = SpriteSheetCache.materialNameMaterial[materialName]; int bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material); Entity uvBuffer = DynamicBufferManager.GetEntityBuffer(material); int maxSprites = DynamicBufferManager.manager.GetBuffer <UvBuffer>(uvBuffer).Length; Rect area = instance.GetSpawnArea(); Random rand = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue)); eManager.SetComponent(e, new SpriteIndex { Value = 0 }); eManager.SetComponent(e, new Scale { Value = 20 }); eManager.SetComponent(e, new Position2D { Value = rand.NextFloat2(area.min, area.max) }); eManager.SetComponent(e, new SpriteSheetAnimation { maxSprites = maxSprites, play = true, repetition = SpriteSheetAnimation.RepetitionType.Loop, samples = 10 }); var color = UnityEngine.Random.ColorHSV(.15f, .75f); SpriteSheetColor col = new SpriteSheetColor { color = new float4(color.r, color.g, color.b, color.a) }; eManager.SetComponent(e, col); var spriteSheetMaterial = new SpriteSheetMaterial { material = material }; eManager.SetComponent(e, new BufferHook { bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial) }); eManager.SetSharedComponent(e, spriteSheetMaterial); return(e); }