엔터프라이즈 구성 요소 시스템 배포

6549 단어 EntiUnity
이 글은 Unity의 실체 구성 요소 시스템을 소개한다.
이것은 AWS 전자 컨트롤러 서비스의 내용이 아닙니다.
Unity 버전은 2018.4.11에서 시도되었습니다.

ECS란 무엇입니까?


ECS는 실체, 구성 요소, 시스템 세 가지 요소로 구성된 소프트웨어 구조 모델이다.
전체 게임 프로그램을 크게 세 가지 요소로 분해하여 각자의 책임과 관계를 규정함으로써 게임을 관리한다.
웹 출신 엔지니어에게 MVC 같은 걸 상상하면 이해가 잘 될 것 같아요.

Entity


게임의 세계를 나타내는 것.
실체 자체에 기능이 없고 (있을 수 없음) 시스템은 그것을 조작할 것이다.

Component


어셈블리는 엔티티의 추가 정보입니다.오해하기 쉬운 것은 대상으로서 독립적이지 않고 단순한 데이터일 뿐이다.
위치 정보, HP 등의 상태는 각각 구성 요소로 실체와 관련이 있다.
나는 개인적으로 Component를 이해하기 어렵다.VVM에서 V와 VM의 관계는 솔리드와 구성 요소의 관계에 가깝다고 생각합니다.
※ 다른 경우 지적해 주시면 감사하겠습니다...

System


이것은 웹 응용 프로그램에서 말하는 논리, 게임에서 말하는 규격을 실현하기 위한 것이다.
예전에는 Start와 Update 학과가 여기에 있었다.
이상은 개념적인 설명입니다.
설명은 생략했지만 C#에서 유니티로 옮긴 사람들이 가장 놀란 것은 반이 아니라 구조체를 사용해 퍼포먼스를 높이는 방법이었다.
"C#로 게임을 만드는 건 퍼포먼스에 문제가 없나요? 좀 더 기업적인 언어 아닌가요?"
나는 이것이 이 의문을 해결하기 위한 기술이라고 매우 기대한다.
그럼 ECS를 실제로 만나봅시다.

사전 준비


설치 엔티티


Unity의 Package Maneger에서 Enties를 설치하십시오.
※ 현재 미리보기이기 때문에 검색해도 나오지 않을 경우 미리보기가 허용됩니다.

PlayerSettings 설정


다음 그림과 같이 PlayerSetting-Other Settings를 사용합니다.

※ Scripting Define Symbols에는 "UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTTRAP"가 추가되어 있으며, 불필요한 것을 자동으로 생성하지 않도록 설정할 것을 권장하는 기사도 있지만, 정말 처음 터치한 것이라면 추가 기록이 필요하지 않습니다.

.네트워크 설정


Unity 2018.4.11에서 Script를 생성할 때 대상 프레임워크가 4.7.1로 열려 있지 않다는 경고가 나타납니다.
이 버전이든 위의 경고를 피하기 위해 검색에서 Visual Studio의 도구 → 도구 및 기능을 가져옵니다.

GameObject에 엔티티를 추가합니다.


추가된 GameObject를 솔리드로 보려면 Game Object 솔리드를 추가해야 합니다.

아래 코드의 예시에 큐브가 추가되었기 때문에 큐브를 추가하면 쉽게 이해할 수 있습니다.

뜨면 편해요.


Unity는 Entity Debuger와 같은 Entity 상태를 모니터링하는 기능을 제공합니다.
무슨 문제가 생겼을 때 이것이 없으면 원인을 알기 어려우니 반드시 추가해야 한다.

이런 느낌으로 실체 일람을 볼 수 있다.

코드 비교


회전 큐브의 스크립트를 ECS 및 비 ECS로 작성해 보십시오.

ECS가 아닌 경우


notECS.cs
using UnityEngine;

public class NotECS : MonoBehaviour
{
    public float speed;

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(0f, speed * Time.deltaTime, 0f);
    }
}
특별한 설명이 필요 없는 모든 once per 프레임에 대한 업데이트 방법 내에서 y 방향의 각도를 변경합니다.
그러면 이 아무런 변화가 없는 코드를 ECS 버전으로 바꾸세요.
UseECS.cs
using UnityEngine;
using Unity.Entities;

public class UseECS : MonoBehaviour
{
    public float speed;
}

class UseECS_System : ComponentSystem
{
    struct Components
    {
        public UseECS useECS;
        public Transform transform;
    }

    protected override void OnUpdate()
    {
        foreach(var e in GetEntities<Components>())
        {
            e.transform.Rotate(0f, e.useECS.speed * Time.deltaTime,0f);
        }
    }
}

간단한 코드를 예로 들더라도 큰 변경이 있을 것이다.
이전에 같은 클래스에서 속성과 방법을 썼다
실체 (용기) 와 구성 요소 시스템 (행위) 을 예쁘게 분리해야 합니다.
저는 개인적으로 읽기 쉬워서 수속형에서 대상을 대상으로 옮길 때와 같은 두뇌 사용 방법으로 옮길 수 있다고 생각합니다.
※ ECS는 성능 향상이라는 매우 이해하기 쉬운 장점이 있기 때문에 하기만 하면 수지가 맞는다고 생각합니다.
여기까지 가져옵니다.접하지 못한 내용이 많으니 다음에 자세한 내용을 쓰도록 하겠습니다.
읽어주셔서 감사합니다!!

좋은 웹페이지 즐겨찾기