{"id":2254,"date":"2021-05-17T22:13:58","date_gmt":"2021-05-17T14:13:58","guid":{"rendered":"http:\/\/www.u3d8.com\/?p=2254"},"modified":"2021-05-17T22:14:00","modified_gmt":"2021-05-17T14:14:00","slug":"unity%e4%b9%8bhybrid-ecs%e5%88%9d%e6%8e%a2","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=2254","title":{"rendered":"Unity\u4e4bHybrid ECS\u521d\u63a2"},"content":{"rendered":"\n<p>\u76ee\u524dECS\u5206\u4e3a\u4e24\u79cd\uff0c\u5373HybridECS\u548cPureECS<\/p>\n\n\n\n<p>HybridECS\u662f\u53ef\u4ee5\u548cMonoBehavior\u6df7\u5408\u5f00\u53d1\u7684\uff0c\u4e0a\u624b\u96be\u5ea6\u8981\u6bd4Pure\u5c0f\u597d\u591a<\/p>\n\n\n\n<p>PureECS\u5219\u662f\u7eafECS\u601d\u8def\u5f00\u53d1<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u4e3aHybridECS\u7684\u4ee3\u7801<\/p>\n\n\n\n<p>Component\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Unity.Entities;\r\n\r\nnamespace Hybrid_ECS\r\n{\r\n    public struct MovementComponent : IComponentData\r\n    {\r\n        public float moveSpeed;\r\n    }\r\n}<\/code><\/pre>\n\n\n\n<p>System\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\r\nusing Unity.Entities;\r\nusing Unity.Transforms;\r\n\r\nnamespace Hybrid_ECS\r\n{\r\n    public class MovementSystem : ComponentSystem\r\n    {\r\n        protected override void OnUpdate()\r\n        {\r\n            Entities.ForEach((ref Translation translation, ref MovementComponent moveComponentData) =>\r\n            {\r\n                translation.Value.y += moveComponentData.moveSpeed * Time.DeltaTime;\r\n            });\r\n\r\n        }\r\n\r\n    }\r\n}<\/code><\/pre>\n\n\n\n<p>Test\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing Unity.Entities;\r\nusing Unity.Mathematics;\r\nusing Unity.Transforms;\r\n\r\nnamespace Hybrid_ECS\r\n{\r\n    public class HyBridECSTest : MonoBehaviour\r\n    {\r\n        &#91;SerializeField] GameObject cubePrefab;\r\n        &#91;SerializeField] int rowNum = 10;\r\n        &#91;SerializeField] int columnNum = 10;\r\n        \/\/ Start is called before the first frame update\r\n\r\n        private List&lt;Entity> entities;\r\n        void Start()\r\n        {\r\n            EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;\r\n            Entity entityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(cubePrefab, GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, null));\r\n            entities = new List&lt;Entity>();\r\n            for (int i = 0; i &lt; rowNum; i++)\r\n            {\r\n                for (int j = 0; j &lt; columnNum; j++)\r\n                {\r\n                    Entity entityClone = entityManager.Instantiate(entityPrefab);\r\n                    Vector3 position = transform.TransformPoint(new float3(i - rowNum \/ 2, noise.cnoise(new float2(i, 2) * 0.3f), j - columnNum \/ 2));\r\n                    entityManager.AddComponentData(entityClone, new Translation() { Value = position });\r\n                    entityManager.AddComponentData(entityClone, new MovementComponent { moveSpeed = 1f });\r\n                    entities.Add(entityClone);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void Update()\r\n        {\r\n            if (Input.GetMouseButtonDown(0))\r\n            {\r\n                EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;\r\n                foreach (var entity in entities)\r\n                {\r\n                    entityManager.SetComponentData(entity, new MovementComponent{moveSpeed = 1f});\r\n                }\r\n            }\r\n            if (Input.GetMouseButtonDown(1))\r\n            {\r\n                EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;\r\n                foreach (var entity in entities)\r\n                {\r\n                    entityManager.SetComponentData(entity, new MovementComponent{moveSpeed = -1f});\r\n                }\r\n            }\r\n        }\r\n    }\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u524dECS\u5206\u4e3a\u4e24\u79cd\uff0c\u5373HybridECS\u548cPureECS HybridECS\u662f\u53ef &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=2254\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[411,410],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2254"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2254"}],"version-history":[{"count":1,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2254\/revisions"}],"predecessor-version":[{"id":2255,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2254\/revisions\/2255"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2254"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}