-
Notifications
You must be signed in to change notification settings - Fork 0
EntitySystem
Namespace: Syadeu.Presentation
File: EntitySystem.cs
public sealed class EntitySystem : PresentationSystemEntity<EntitySystem>Entity<T> (EntityBase 를 상속받는) 와 EntityData<T> (EntityDataBase 를 상속받는), AttributeBase 의 모든 인스턴스들의 매니저 시스템입니다.
Inheritance: PresentationSystemEntity<T> -> EntitySystem
- UnityEngine.GameObject, 또는 UnityEngine.Object 들을 GameObjectProxySystem 을 통해 생성된 ProxyTransform 으로 효율적으로 관리할 수 있습니다.
- Json serialize 된 ObjectBase 의 인스턴스를 생성할 수 있습니다.
EntitySystem 에서 Entity 와 관련된 모든 작업을 수행합니다. Entity 의 구현부인 EntityDataProcessor, Attribute 의 구현부인 AttributeProcessor 및 ObjectBase 의 인스턴스 생성, EntityBase 와 ProxyTransform 과의 연결등 GameObjectProxySystem 의 상위 시스템이라 보아도 무방합니다.
EntitySystem 객체 지향 설계 (OOP) 방식을 따릅니다. 이는 사용자의 입장에서 더 쉽고 간편하게 시스템을 사용할 수 있게 위함인데, 사용자는 Presentation 시스템의 최종 딜리버리 형태인 EntityDataBase, EntityBase, AttributeBase, DataObjectBase, ActionBase 를 상속받아 추가적으로 시스템을 확장해 나갈 수 있습니다.
EntitySystem 은 ObjectBase 를 상속받는 모든 인스턴스 객체에 대해 관리합니다. ObjectBase 들은 기본적으로 전부 재사용을 염두하고 개발되어, Destroy call 요청되어도 실제로는 메모리상에서 유후 상태로 존재합니다. 이로 인해 각 객체들은 Reference type 을 포함할 시, 객체 레벨에서 파괴되었을 때 이를 초기화하여 다음 객체가 정상적으로 활용할 수 있도록 하여야 할 것 입니다. ObjectBase 를 상속받는 모든 객체들은 메모리 풀로 돌아갈 시 ObjectBase.OnReserve 를 수행하며, 실제 메모리에서 제거될 시에는 ObjectBase.OnDestroy 를 수행합니다.
EntityDataBase 를 상속받는 모든 ObjectBase 들에 대해, 만약 데이터 컴포넌트(IEntityComponent 를 참조하세요)를 가지고 있다면, 파괴하기전에 이를 수동으로 제거하거나 INotifyComponent<T> 를 통해 해당 Entity 가 컴포넌트를 가지고 있음을 선언하여야합니다. 모든 컴포넌트들이 제거되지 않고 Destroy call 요청을 할시에는 에러를 반환합니다.
EntitySystem 으로 Entity 를 생성하는 가장 쉬운 방법은 Hash 를 이용하는 것 입니다. EntityWindow 에서 생성된 모든 Entity 들은 각자의 고유 Hash 를 발급받으며, 이 Hash 값을 통해 Raw 데이터 값을 Code-level 에서 접근하여 수정하거나 생성할 수 있습니다.
// 아래는 3971879049288062714 Hash 값을 가진 DataObjectBase 를
// 생성하는 방법에 대해 설명합니다.
public void CreateDataObject()
{
// 기존에 그룹을 지정하지 않고 시스템을 호출하는 방법은
// 퇴역되었습니다. 이제는 각 시스템이 위치한 그룹도 지정하여
// 시스템을 받아올 수 있도록 하여야합니다.
EntitySystem system = PresentationSystem<DefaultPresentationGroup, EntitySystem>.System;
// 생성할 레퍼런스를 먼저 생성합니다.
Reference temp = new Reference(3971879049288062714);
// 생성한 레퍼런스를 통해 인스턴스를 생성요청합니다.
Instance ins = system.CreateInstance(temp);
}각 Entity 들에 맞는 메소드를 호출하여 불필요한 연산 작업을 줄이도록 설계하였습니다. 예를 들어, DataObjectBase 를 상속받는 Entity 는 Attribute 가 없는 Entity 이므로 생성 가능 여부 체크도 필요 없을 것 입니다. EntityDataBase 는 ProxyTransform 이 필요없는 Entity 이므로 해당 생성 체크도 필요 없을 것 입니다.
이러한 불필요한 Overhead 를 줄이기 위해 각 Entity 들은 각자의 고유 메소드를 통해 생성되어야 합니다. DataObjectBase 를 상속받는 Entity 는 CreateInstance, EntityDataBase 를 상속받고 ProxyTransform 이 필요없는 Entity는 CreateObject, 마지막으로 ProxyTransform 과 AttributeBase 를 상속받는 EntityBase 는 CreateEntity 를 통해 생성될 수 있습니다. Editor-level 에서는 CreateInstance 가 각 생성 가능 체크를 통해 각자의 고유 메소드로 연결해주나, 이는 Build 에서 포함되지 않는 기능이므로 알맞게 배치하여야 할 것 입니다.
AttributeBase 를 상속받는 모든 어트리뷰트는 인스턴스를 사용자가 임의로 생성할 수 없습니다. EntityDataBase 를 상속받는 Entity 가 AttributeBase 들을 참조한다면 자동으로 생성되어 할당됩니다.
| Name | Description |
|---|---|
| CreateEntity(in string, in float3) | 해당 이름을 가진 EntityBase (이름은 ObjectBase.Name 입니다) 의 인스턴트를 해당 월드 좌표에 생성합니다. |
| CreateEntity(in Hash, in float3) | 해당 Hash 값의 EntityBase 의 인스턴트를 해당 월드 좌표에 생성합니다. Hash 는 Reference 값으로 대체할 수 있습니다. |
| CreateEntity(in string, in float3, in quaternion, in float3) | 해당 이름을 가진 EntityBase (이름은 ObjectBase.Name 입니다) 의 인스턴트를 해당 월드 좌표에 생성합니다. |
| CreateEntity(in Hash, in float3, in quaternion, in float3) | 해당 Hash 값의 EntityBase 를 해당 월드 좌표에 생성합니다. Hash 는 Reference 값으로 대체할 수 있습니다. |
| CreateObject(Hash) | 해당 Hash 값의 EntityDataBase 의 인스턴트를 생성합니다. Hash 는 Reference 값으로 대체할 수 있습니다. |
| CreateObject(string) | 해당 이름을 가진 EntityDataBase (이름은 ObjectBase.Name 입니다) 의 인스턴트를 생성합니다. Hash 는 Reference 값으로 대체할 수 있습니다. |
| CreateInstance<T>(Reference<T>) | |
| CreateInstance<T>(IFixedReference<T>) | |
| CreateInstance(Reference) | |
| CreateInstance(IFixedReference) | |
| CreateInstance<T>(IObject) | |
| CreateInstance(IObject) | |
| Convert(UnityEngine.GameObject) | 이미 생성된 UnityEngine.GameObject 를 EntitySystem 으로 편입시켜 ConvertedEntity 로 변환하여 반환합니다. |
| DestroyEntity(Entity<IEntity>) | 해당 Entity 를 즉시 파괴합니다. |
| DestroyEntity(EntityData<IEntityData>) | 해당 Entity 를 즉시 파괴합니다. |
- Interfaces
- Enums
- SystemFlag
- CoreSystemExceptionFlag
- UserTagFlag
- CustomTagFlag
- ObValueDetection
- ConsoleFlag
- CommandSetting
- Attributes
- Abstract Classes
- Classes
- CoreSystem
- CoreSystemSettings
- PrefabManager
- PrefabList
- RenderManager
- RenderController
-
ConsoleWindow
- CommandDefinition
- CommandField
- CommandRequires
- FMODSystem
- UserTagNameModule
- CustomTagNameModule
- Timer
- BackgroundJob
- ForegroundJob
- WaitForBackgroundJob
- WaitForBackgroundJobWorker
- WaitForForegroundJob
- WaitForTimer
- BackgroundJobWorker
- ObArray
- ObClass
- ObDictionary
- ObList
- ObQueue
- ObValue
- ExtensionMethods
- ThreadSafe
- Structs
- CoreRoutine
- SQLiteDatabase
- SQLiteTable
- SQLiteColumn
- SQLiteVersionInfoTableData
- Bound
- Pole
- Vector2
- Vector3
- Exceptions
- Syadeu.Presentation
- PresentationManager
- SceneList
- EntityDataList
- CustomLoadingScene
- DefaultPresentationGroup
- PresentationGroupEntity
- IPresentationSystemGroup
- PresentationSystemGroup<T>
- PresentationSystem<T>
- PresentationSystem<TGroup, TSystem>
- PresentationSystemEntity<T>
- PresentationSystemModule<TSystem>
- PresentationSystemID
- INotifySystemModule<TModule>
- IExecutable<T>
- PresentationLoop
- PresentationResult
- IReference
- Reference
- SubSystemAttribute
- LoadingSceneSetupEntity
- SceneReference
- SceneSystem
- EntitySystem
- EntityBoundSystem
- EntityRaycastSystem
- EntityExtensionMethods
- AttributeAcceptOnlyAttribute
- EntityAcceptOnlyAttribute
- CoroutineSystem
- CoroutineJob
- ICoroutineJob
- UpdateLoop
- RaycastInfo
- ObjectBase
- ProcessorBase
- WaitForPresentationSystem<T>
- WaitForProxy<T>
- Syadeu.Collections
- AABB
- Plane
- PropertyBlockBase
- PropertyBlock<T>
- ActionWrapper
- BinaryGrid
- CLRContainer
- CLRSingleTone
- CLSTypedDictionary<TValue>
- CLSTypedDictionary<TKey, TValue>
- Direction
- EntityID
- EntityShortID
- IEntityDataID
- IInstance
- IInstance<T>
- Instance
- Instance<T>
- InstanceID
- FixedInstanceList16<T>
- FixedInstanceList64<T>
- IFixedReference
- IFixedReference<T>
- FixedReference
- FixedReference<T>
- FixedReferenceList16<T>
- FixedReferenceList64<T>
- IFixedReferenceList<T>
- FixedListExtensionMethods
- IEntity
- IEntityData
- IAttribute
- IObject
- IEntityComponent
- IPrefabReference
- IPrefabResource
- IEmpty
- IValidation
- FNV1a32
- FNV1a64
- Hash
- Syadeu.Collections.Converters
- Syadeu.Collections.Proxy
- Syadeu.Presentation.Proxy
- Syadeu.Presentation.Internal
- Syadeu.Presentation.Entities
- Syadeu.Presentation.Attributes
- Syadeu.Presentation.Components
- Syadeu.Presentation.Actions
- Syadeu.Presentation.Render
- CameraData
- CameraFrustum
- IntersectionType
- RenderSystem
- WorldCanvasSystem
- Syadeu.Presentation.Data
- DataContainerSystem
- DataObjectBase
- EntityAnimationClipEventData