Entity Component System unity

Общие вопросы о Unity3D

Entity Component System unity

Сообщение Legend2856 05 окт 2019, 13:11

Entity Component System как правильно его использовать? И стоит ли его вообще использовать в этом случае? Делаю что-то типа шутера и где будут много стрельбы(Спавн эффектов, декалей и тд).
С обычными объектами все понятно просто активировать при попадании передавая position и rotation, затем деактивировать через некоторое время, а как проделать это с Entity?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
using Unity.Collections;
using Unity.Rendering;
using Unity.Mathematics;

public class Testing : MonoBehaviour
{
    public Mesh mesh;
    public Material material;
    //public ParticleSystem particleSystem;

    private EntityManager entityManager;
    [HideInInspector] public NativeArray<Entity> entityArray;

    private void Start()
    {
        entityManager = World.Active.EntityManager;

        entityArray = new NativeArray<Entity>(5, Allocator.Temp);
        EntityArchetype entityArchetype = entityManager.CreateArchetype(
            typeof(RenderMesh),
            typeof(LocalToWorld),
            typeof(Translation),
            typeof(Rotation)
        );

        entityManager.CreateEntity(entityArchetype, entityArray);

        for (int i = 0; i < entityArray.Length; i++) //заполнение и деактивация
        {
            entityManager.SetSharedComponentData(entityArray[i], new RenderMesh { mesh = mesh, material = material, });
            entityManager.SetEnabled(entityArray[i], false);
        }

        //SpawnEntity(transform.position, transform.rotation);
    }
   
    public void SpawnEntity(Vector3 pos, Quaternion rot) //передача вращения и позиции из другого класса, но вылезает ошибка
    {
        entityManager.SetEnabled(entityArray[0], true);
        entityManager.SetComponentData(entityArray[0], new Translation { Value = pos });
        entityManager.SetComponentData(entityArray[0], new Rotation { Value = rot });
    }
}
 

Ошибка:
InvalidOperationException: The NativeArray has been deallocated, it is not allowed to access it Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle.CheckReadAndThrowNoEarlyOut (Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle handle) <0x2900aa76ec0 + 0x00052> in <e3232360d51c46c786dd547e2f0b3f8b>:0 Unity.Collections.NativeArray`1[T].CheckElementReadAccess (System.Int32 index) (at C:/buildslave/unity/build/Runtime/Export/NativeArray/NativeArray.cs:118)
Как это правильно сделать? Так же при спавне декалей нужно будет вызывать AddForce() в RigidBody. Это можно сделать с Entities?
Legend2856
UNITрон
 
Сообщения: 156
Зарегистрирован: 10 июл 2018, 21:32

Re: Entity Component System unity

Сообщение getAlex 07 окт 2019, 14:56

Тут обычный Пулл справится. Не понимаю почему лепят ECS во все щели где не нужно. Потому что это модно? Это что-то из серсии "линукс круче винды потому что линус это круто"?
getAlex
Адепт
 
Сообщения: 1775
Зарегистрирован: 10 авг 2013, 18:30

Re: Entity Component System unity

Сообщение Friend123 07 окт 2019, 15:19

getAlex писал(а):Не понимаю почему лепят ECS во все щели где не нужно. Потому что это модно?

Вероятно, что так. Я лично отказался от этого ECS после того, как попробовал что-то закодить с его помощью. Это лютейшей извращение и глубокое неуважение к кодеру.
Аватара пользователя
Friend123
Старожил
 
Сообщения: 701
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ

Re: Entity Component System unity

Сообщение 1max1 07 окт 2019, 15:40

Friend123 писал(а):
getAlex писал(а):Не понимаю почему лепят ECS во все щели где не нужно. Потому что это модно?

Это лютейшей извращение и глубокое неуважение к кодеру.


Изображение
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Entity Component System unity

Сообщение Shekn 07 окт 2019, 17:22

А мне наоборот очень понравился паттерн ECS, и теперь в Юнити всё что можно пишу на нём. В принципе сложность кода примерно такая же, как если использовать MonoBehaviour. Что касается проблемы ТС-а, то ты неправильно используешь ECS. Взаимодействие с сущностями надо делать в системах, а не в каких-то непонятных наследниках от MonoBehaviour.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: Entity Component System unity

Сообщение 1max1 07 окт 2019, 18:50

Shekn писал(а):А мне наоборот очень понравился паттерн ECS, и теперь в Юнити всё что можно пишу на нём. В принципе сложность кода примерно такая же, как если использовать MonoBehaviour. Что касается проблемы ТС-а, то ты неправильно используешь ECS. Взаимодействие с сущностями надо делать в системах, а не в каких-то непонятных наследниках от MonoBehaviour.

+++
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


cron