#archived-dots
1 messages · Page 253 of 1
to be frank iam into pure ecs so i need to manually attach the physics body and shape components
but i get your point. i will try it.
yes it is. but sharedComponents are not like normal components. they can even use references. but how do I dispose stuff used in it? 🤔
You could put a managed list inside of one instead but that could be the source of your problems
Anyway that’s kind of the point there’s no built in safety mechanism to deal with disposing from entities that get destroyed, you could use it on a shared system state component to try to catch it and handle it
But tbh not sure of how internally how chunk management will affect it with regard to just continuing to use native stuff inside components
yeah I see. Its just doesnt seem to be the intended usage. So there is no mechanism to dispose internal state
You mentioned it keeps happening even with all systems disabled, what happens if you don’t spawn any entities that use that shared component?
it also happens in an empty scene. and also if I disable default world initialization
so maybe it is not connected to dots after all. but the only thing I can think of thats left is some kind of static hook (e.g. InitializeOnload) that still runs in the background
Maybe try copying all packages to a new project and see if it’s a unity bug
yeah thats a goog idea
Anyone had a problem with culling performance when using URP + Hybrid Renderer? I spawn literally one entity rendered with hybrid renderer and I lose 3ms of CPU time, looks like mostly on culling
Why doesnt private UnsafeList<UnsafeList<int>> test; compile ?
I have a small problem here...
public UnsafeList<BuildingRecipe> recipes; does not compile because UnsafeList somehow only likes primitive, non nested types... My struct BuildingRecipe contains two UnsafeLists aswell, so the approach basically looks like this public UnsafeList<UnsafeList<Ingredients>> recipes;
Is there anyway to bypass this issue ? I need to store a nested type in that damn unsafe list, i cant even solve it locally because i basically receive that by network.
as a workaround you could flatten it to just UnsafeList<Ingredients> and hold a separate list/array of indexes of start of each recipe on the flat list
Thanks, how would that look like ? ^^ I think i havent understood it yet
for example, you have a list of lists:
<list of lists>
<list 0>
<flour>
<butter>
</list0>
<list 1>
<eggs>
<cinammon>
<coco>
</list1>
<list of lists>
and you flatten it to this:
<flat list>
<flour>
<butter>
<eggs>
<cinammon>
<coco>
</flat list>
and have another list, or maybe a dictionary if you want to key the recipes by name or something, that stores for example int2 that specify the index at which the list starts in the flat list and how many elements it has, so for example for recipe 2 it would be int2(2,3) because it starts at index 2 in the flat list and has 3 elements
Ah i understand... thanks ! But i guess this isnt possible because its probably a bit more complicated :
/// <summary>
/// Represents an ingredient.
/// </summary>
public struct Ingredient {
public FixedString32 type; // The item type... 3:1 is wood for example
public byte icon; // Its icon
public uint amount;
public bool consume;
public Ingredient(FixedString32 type, byte icon, uint amount, bool consume) {
this.type = type;
this.icon = icon;
this.amount = amount;
this.consume = consume;
}
}
/// <summary>
/// The craftable result
/// </summary>
public struct Craftable {
public FixedString32 type; // The item type... 2:1 is gold for example
public byte icon;
public uint amount;
public Craftable(FixedString32 type, byte icon, uint amount) {
this.type = type;
this.icon = icon;
this.amount = amount;
}
}
/// <summary>
/// The recipe, containing ingredients and a craftable result.
/// </summary>
public struct Recipe {
public UnsafeList<Ingredient> ingredients;
public UnsafeList<Craftable> craftables;
public byte describtion;
public Recipe(UnsafeList<Ingredient> ingredients, UnsafeList<Craftable> craftables, byte describtion) {
this.ingredients = ingredients;
this.craftables = craftables;
this.describtion = describtion;
}
}
And well, each entity should have a "BuildRecipes" component which looks like this : struct BuildRecipes { public UnsafeList<Recipe> recipes; }
DynamicBuffer is a no go here, because it sucks with networking ( and i guess it cant store nested types either )... NativeArray is not allowed in a struct and UnsafeList cant handle nested types either :/
And normally i would save such shit locally somewhere, but in this case its fully networked and cant be saved locally... furthermore the server side ecs differs a bit from unitys ecs and this is why i need to put this shit into a component somehow
Any other ideas ?
is it completely impossible to do with dynamic buffers?
If im correct buffers dont allow nested types either ( or do they ) ? In that case it would be impossible...
If its possible however, we still need to find a clean network way to implement this... our current solution is well, simple and efficient :
We basically serialize a component and send it over the network with a certain fitting command like "Add, Set, Remove".
However i have no idea how a clean way for networking a buffer looks like... i mean the serverside entity representation is 'public struct BuildRecipe { List<...> recipes; }' and thats how we basically receive in the client xD damn unitys ecs is way to complicated for such topics
yeah, seems like some rather big changes would be needed - like just switching to dynamic buffers entirely, so you have dynamic buffers for the craftables, the ingredients and the recipes, so no unsafe lists anywhere, and then you can basically package it into a neat BuildRecipe class when sending it to the server by just getting all the buffers from the entity and "packaging" them
Damn this sucks, such damn unity doctrines always feel like a punch in the face.
The easiest way coming into my mind is to simply use a class for the "BuildRecipes" component, because classes allow normal lists and stuff... but our whole solution is struct oriented, so this doesnt make sense either :/
Does anyone know if a UnsafeList could be rewritten or modified to accept nested types which contains more UnsafeLists ? xD Thats probably a bit hacky but would solve a lot of problems
Check here if you want to see the different lists allowed in DOTS environment: https://coffeebraingames.wordpress.com/2020/12/20/the-different-lists-allowed-in-icomponentdata/
that's just an UnsafeList with a pointer to another UnsafeList 🤔
But does this work ? And doesnt this require a pin ?
could use UnsafeUtility.Malloc to allocate the pointer. You could also try pinning it with Marshal, but I prefer the former
I really only pin if I want a managed object to remain at the address its allocated so I can grab a pointer (works nicely with blittable arrays you want to implicitly convert for Jobs or interop with a C++ dll)
Im gonna look into this thanks ! That would probably solve my issue, even though the acess is kind ugly xD
Hello 😄 If someone has a minute, I could use some guidance:
Question1: Is it ok to do myNativeArray1.GetSubArray(startIndex, length).CopyTo(myNativeArray2.GetSubArray(startIndex, length)) ?
Question2: I do this (see question1) because I iterate over different ranges of Index each frame. All my data is split in different arrays (ie.: positionArray, rotationArray, healtArray, etc.) Would it be more efficient (performance wise) to do this another way? Like using structs? thing is all the modules in my system don't use every data so it seemed like a waste of resources fill custom structs per module each frame. Although using lists to iterate over would be awesome for managing processing priorities of entities. I'm trying to have 5000+ AI running on screen with animations and all so it has to be efficient.
Why do entity flicker at 0,0,0 position when I spawn it and setup other position using ECB?
are you setting up LocalToWorld?
or just setting Translation/Rotation
if you don't set localtoworld then it won't be updated by transform system until the next frame and therefore the render, in presentation which updates after your ECBS, will render at 000
Thanks!
how do you apply force to an entity without using its translation.value fucntion
How to approach tilemap in ECS? dynamic buffer with tiles?
Our tiles are entities themselves. It's very flexible because you can just add a bunch of components.
but is it feasible? small map 2k x 2k means almost 5kk of entities
4m entities is literally nothing for ecs
still it seems like bad design as I would need to search for a tile everytime I need something from it
I mean it in contrast to array-like structure i.e. DynamicBuffer
I don't like tiles as entities, it doesn't really provide any benefit - generally its pretty slow. The one exception would if you only had a small world grid, single screen kind of thing and individual cells were basically the game.
personally i like just writing your 'world' as a standalone data structure - not too dissimilar to the physics worlds
you can then attach this to a singleton entity via a pointer and use the safety system to ensure safety (I wrap any unsafe code so other devs do not need to use it)
Here we go again... when should something be an entity and when not ?
I would actually really implement tiles as entities and group them into some sort of chunk structure for blazing fast acess... like every huge world does ( Minecraft, Terraria... ) then its no problem
It's not faster to access entities/chunks than a native array
In fact if you profile low performance hardware, mobile devices and previous gen consoles, you'll find entity lookup from queries is one of your biggest bottlenecks.
And it gets significantly worse as your archetype / chunk count increases.
Something people always seem to forget when using voxels or tiles as entities is the memory overhead.
Let's take a minecraft style block game since you mentioned that, where you're loading a 1024x1024x256 = 268,435,456 voxels in world at any time
Cost of 1 tile in memory
Entity (2x int) - 8 bytes
Translation (3x float) - 12 bytes
Block type (ushort) - 2 bytes
Other Block Info (ushort) 2 bytes
= 24 bytes
World size of 1024 x 1024 x 256 = 268,435,456
Memory cost = 268,435,456 * 24 = 6,442,450,944 bytes or 6GB
Compared to storing in a NativeArray<int> (2x ushort for block type and other block info)
268,435,456 * 4 = 1,073,741,824 bytes or 1GB
Now you wouldn't store it in single array, you'd break it into chunks let's say 64x which leaves 16x16x4 chunks of position overhead, making the calculation 1,073,741,824 + 12, 288 (16x16x4 * 12)
You'd be much better to make each chunk a single entity with tile data stored in a buffer.
memory is literally nothing to worry about. in todays time you have at least 64gb ram
🧐
isn't memory access all that DOTS is about?
Only have 16GB RAM on both modern consoles, and 2-3GB is used by the OS. Same on your average gaming PC, where even more RAM is most likely used by background stuff
HI, I am using DOTS Physics with a racing game. I have damage-able barrels that explode when reaching 0, and I am having the issue that if they get lodged in front of the car, the car will spam damage it each frame and regardless of what high HP levels I add, it gets melted down in the blink of the eye.
I want to avoid having to implement a damage cooldown so I was wondering if there is a way to tell physics that if two objects are performing constant micro-collisions, to not spam them. Perhaps an impact power threshold of some kind? Looking for a global solution ideally ❤️ ❤️ ❤️ ❤️
By design unity physics is stateless, what you probably need is states though (OnEnter/OnExit). Conveniently Unity has already provided a sample of how to do something like this which you can either use directly or just as inspiration
https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/UnityPhysicsSamples/Assets/Demos/2. Setup/2d. Events/2d2. Collision Events/Scripts/DynamicBufferCollisionEventAuthoring.cs
No
Damn son. Get me a timeshare on that workstation as well plz.
dafuq, that's just a normal gaming pc. doesn't even have full 128gb ram yet
No?
yes
Ok
According to the last steam hardware survey only ~14 percent of users have more than 16 gigs of ram
that's on them
I see that I'm not in today's time lmao.
cries in 16Gb DDR3
Just want to share my latest DOTS article: https://coffeebraingames.wordpress.com/2022/03/12/dots-snippets-using-entitycommandbuffer-in-parallel/
I'm gonna be writing more of these. I have lots to share.
Goal: Having a way for an Entity, that, once destroyed, spawn some Entities in it's place, at the same **Translation **and Rotation.
Attempt: Creating a **IBufferElementData **which holds and entity, with the goal of having 0, 1 or more to be spawned on it's death.
Issue: I cannot find a way to have a collection of Entity inside a MonoBehavior/Authoring in order to loop over the entities and add them to the DynamicBuffer.
Help please 😄
You can add a Prefab gameobject that you will register in a component at conversion time, and to be later used as Prefab entity
Having a look at the official ECS samples will show you a few ways to achieve that with more or less authoring
The SpawnFromX folders here in the samples https://github.com/Unity-Technologies/EntityComponentSystemSamples/tree/master/ECSSamples/Assets/HelloCube
@karmic basin It's just 1 "public Entity prefab", I want a collection, as the death of one Entity can spawn several. My other option is to have prefab0, prefab1, prefab2, etc....
can have a List in monobehaviour land that you iterate upon during conversion and add to a DynamicBuffer in a dedicated entity, like you were describing yeah
To give you more ideas, Netcode does exactly this with a collection component of spawnables Prefab
If I reference a GameObject prefab as an Entity, is it the same thing as converting it in that Authoring ?
Can find you the link if you wanna study this path
@karmic basin I understand you approach, I am only afraid that the same GameObject prefab will be converted into an Entity, multiple times in multiple places
Thanks so much for the articles. I still go back a reference a few of them occasionally.
@tranquil jay I'll try to read again your messages, as I'm not sure I understand your concern anymore 😛
Welp I'm confused. If the collection of prefab does not suit your case, can you try to explain why/how ?
Regarding avoiding duplicates, it would just be a matter of ensuring you have singletons only. Singleton "manager" on the GO side holding a unique list, singleton Entity holding the DynamicBuffer on the ECS side
Or your own pattern like a Set to ensure uniqueness for example, whatever you see fit. Was that what the question was about ?
Damn now I fear I was off-topic and lost you 😓
IMO the solution you're looking for looks a lot like this https://github.com/needle-mirror/com.unity.netcode/blob/3a82fef96a05f60cb7df178a3373874d79c3fe4e/Runtime/Authoring/Hybrid/GhostCollectionAuthoringComponent.cs
If not, feel free to ask questions again
(you don't need their GhostAuthoringComponent you can just have a List<GameObject> to start with)
So I want that, when I destroy a Explosive Barrel, to spawn an Entity that is a PFX, multiple entities that shards of said Barrel, etc.
Right now I have a single "public Entity entity" for the PFX but I wanted several.
List<Entity> does not work, so I took your advice to use List<GameObject> and convert them inside of the authoring Execute.
Yes, you'll see in the code linked you then recursively add them to a DynamicBuffer like your gut was.
also you recursively add declare them as Prefab as per the Interface IDeclareReferencedPrefabs asks you
anyway yeah, looks to me that's what you need
Yup, playing with that now, thanks a bunch!
Great, have fun 👍
Exactly what i needed, it checks if the GameObject, converted to an entity, exists already (is cached). Much aprpeciated Mr. K
Im not sure if this qualifies as DOTS but im trying to learn ecs and Im wondering why nothing is appearing on my screen. I should have a little black square but I cant seem to figure out why its not working. Im new to unity so please forgive my lack of knowledge
for anything related to rendering something, you should convert a game object to an entity and not build the entity itself since the conversion workflow will add other components as well that are needed for rendering
Oh okay, I was avoiding that out of fear of the other components slowing the program. I was trying to go with the bare minimum for performance, but the extra components shouldnt slow it that much right?
I plan on having thousands of entities which is why im so concerned about performance
they are needed, and the components are not the thing that's gonna slow down your game. the actual rendering of the mesh will have massively more impact than the additional components
And converting them to entities is more efficient than just keeping them as gameobjects right? For rendering and everything else
absolutely. also you will only convert it once, then keep that as a blueprint around and then always just instantiate the entity
I gotcha. I found a good tutortial that explains how to do it. Thankyou for your help!
The online resources arent always the greatest so sometimes its good to just ask someone
they will be better. they will make actual quality samples once 1.0 releases
When using the SceneSystem I am finding that my scene will not load unless I perform a Reimport All.
I see the SceneReference and the RequestSceneLoaded components appear, but the scene never completes its load.
The scene consists of a single game object with GhostCollectionAuthoringComponent on it.
Is there something I am missing for loading a scene consistently?
The following code is ran after creating the new server world. I have tried delaying 10 seconds between creating the world and loading the scene, but there is no change - the scene still fails to load.
SceneSystem sceneSystem = p_serverWorld.GetExistingSystem<SceneSystem>();
Unity.Entities.Hash128 sceneGuid = sceneSystem.GetSceneGUID("Assets/Scenes/GameScenes/GameX.unity");
Entity sceneEntity = sceneSystem.LoadSceneAsync(sceneGuid);
if you want to avoid conversion workflow there is a method to add all needed components RenderMeshUtility.AddComponents();
of course needed for rendering
Why can't I just multiply two quaternions? As far as I understand it means to add their angles
should I use math.mul()?
yes.
Ill have to look into that, thanks for the suggestion
thanks!
I think thatll work perfect for me. Ty!
Is the Havok Physics thing available to try? And also, does Unity automatically do LOD stuff to render meshes or do I have to figure that out myself
yes. and you have to do it yourself
Hello! I have a hybrid project where most of my game logic is inside ECS, but some is inside MonoBehaviors.
My questions are:
- Whenever I access my MonoBehaviors through singleton, when does it happen? Parallel to MonoBehavior.Update?
- If I run code inside of MonoBehavior.LateUpdate do I guarantee that all the World systems have finished running?
- If I do Debug.Log inside of jobs and lambdas, does it force them in the main thread?
ad 1) it happens when you access it 😄 like when you do it you do it
as far as I know MB phases are just before it's ecs counterpart like ie: MB.Update()->ECS.OnUpdate()
ad 2) no, because at least part of presentation update group systems are after LateUpdate()
ad 3) I don't think you can use Debug.Log() with .Schedule()?
I'm checking it right now
whole presentation group is after LateUpdate of MonoBehaviours
Best way to know for sure in case it changes in the future is to debug.log and run, you'll see execution order for yourself
I meant put logs in every MB phase and each ECS system
system group *
dammit I'm tired I shouldn't write here byebye see you later xD
i'm testing it and you can do Debug.Log() with .ScheduleParallel()
and I see that job is still on the thread
but surly Debug.Log is called by callback on the main thread
you should avoid Debug.Logs in your jobs
I mean it's fine for developing/debugging purposes but afterwards I would remove them
Why?
Debug.Log is completely thread safe
yeah, you don't really have to remove them, but make absolutely sure to put them in #if UNITY_EDITOR pragmas
https://docs.unity3d.com/ScriptReference/Application-logMessageReceived.html
https://docs.unity3d.com/ScriptReference/Application-logMessageReceivedThreaded.html
Unity provides an optional callback for receiving logging on main thread
it always been?
Just not burst compatible @hot basin
It's been burst compatible for a couple of years now
it doesn't need to be because you put it inside #if UNITY_EDITOR anyway
or just don't care about wrapping it?
if you want to log from a job, just log from it
there's no harm in it
can not imagine how gross my code would be if i had to wrap all my logs
Debug log is burst compatible but doesnt get "bursted".
If debug.log is performance critical, there's something wrong with ya code
you'll always have to wrap all calls to log. else it lands in your release build which would be devestating
it's also why you should never use Debug.Log, etc by itself. Always follow standard and have a logger wrapper with dependency injection
then you can conditional that and wrap it once
Considering you can't inject your own logger in burst jobs (and therefore burst systems) in a burst heavy project imo you are much better off sticking with Unity's Debug.Log and replacing the default ILogger (Debug.unityLogger) with your own to handle the logs on the other side
As for the need to wrap your Debug.Log, if your console is being spammed so much this is required, especially if its logging every frame, stop! every dev on the team hates this. Basic logs on windows, can be extremely helpful tracking down user obscure issues. On platforms that don't allow logging, e.g. consoles, this logging is automatically removed by unity so you don't even have to worry about it.
As for standards, look at the most success unity game - hearthstone, it dumps a hell of a lot of logs for every every state and it's extremely helpful and many tools have been built from it.
logs should never be shipped. they are development purpose only. anything telemetrics should be sent to the server only. not logged
you can log specific things to a custom in-game console, but never ever abuse Debug.Log or similar for this purpose
How do I get the transform values from an entity bone during animation? For context, I've got a model that has a rig, I use the default entity conversion system to convert the entire prefab into entities - I then get the model to play an animation. I have a system that queries all the bone entities and output all their transform positions every frame, however, what I've found is that they all are the original values - they don't ever change, even though the rigged animation is moving around meaning the bone entities should have their transforms constantly changing. But this isn't what I'm seeing, anyone have any ideas?
Maybe it depends on the time you system runs? Does it run after the animation system?
the data is probably inside the blobasset
i run the system to output all the transform values every frame, so even if it's too early/too late for one frame, i would still expect all the bone positions to have changed to something else the next time the system runs
what do you mean by this? how do I get access to the blobasset to see?
should. but could be possible that its reset somewhere 🤔 I did not use the animation system yet but are you even sure it changes entities? Could just be creating transformation matrices for the gpu
I just assumed it would update the entities as well as I can visually see that their positions change in the scene - but I can understand if that is skipped and the transforms directly in the gpu as you said. I'm no where near even a novice in this area.
with that being said - what options do I have to pull out a bone's position?
you could take a look at any of the bones inspector values and see if they change there?
if it writes translation you should see the bones translation components values change in realtime
i'm not entirely sure. but what i know for certain is that dots uses linear blend skinning for animations. so it might very well just be purely on gpu
and / or compute deformations in never versions, which also would be completely on gpu
am I just out of luck in this case?
what do you need the values for?
I have a shader(built using shadergraph) that I use to cut off the top of a character's hair model - so that I can then put on different "hat" models without the hair model points showing through. It works by getting the position of the hair model and hiding any points above a given arbitrary number (i supply this).
It works well when the character is static, however if I play any character animations (the character is a humanoid and is rigged) which changes the root bone position - ie. character walking, it appears the pivot point of the hair model isn't the hair model, but the root bone position, this causes the hair model to not always cut in the same place.
I'm hoping, by finding the root bone position, I can then account for this offset in the shader, to it to cut always in the same position in the hair model. (this is a skinnedmeshrenderer if that matters)
ok? since you have to have a custom shader on the model for animations to work with dots anyway, why don't you just apply the linear blend skinning node in your shader and only use one shader then? then you can also get any values
I don't know where to start with that. How would I grab the value of the root bone from within the shader?
no you don't need the root bone
just modify your cut off with the vertex position
How? The issue is that the pivot point appears to change when animating. So if I say for example to cut off all points 5 units from the pivot, the initial frame will be right, but when it animates to the next frame, the pivot point is now lower at say -1, meaning the cut off of the hair model is now lower at 4, instead of 5.
eg. see screenshots attached on what I mean
this is my shader i'm using if that helps:
I guess you just need to use the skinned position instead of your position input
dang, that's a thing? I'll give it a try right now
Is there any way to figure out how many entities are handled per thread and why? It looks like one thread is doing all of the work here
you probably are only using .Schedule()
no. its shedule parallel. the small bars on the left are from the same system
it just happens to either distribute them poorly or some of them just take a lot longer than the others
I guess it tries to separate threads per chunk so maybe the chunks are filled to unevenly 🤔
Turn on synchronous compilation and test again
Yeah I just tried. But sync compilation does not seem to change much
But I figured the performance difference is the targeting entities that actually find stuff to target vs the ones that find none
how many entities are you actually doing work on?
its about 100 weapons targeting about 200-300 enemies
seems the performance problem is actually the collisionWorld.CalculateDistance call
if there are about 150 targets in range timing increases immensly
@whole inlet if you add a DefaultAnimationGraphWriteHandle or LateAnimationGraphWriteHandle to the unconverted hierarchy transform, it should write the actual bone position to the hierarchical entity bone. you could also get that via the AnimatedLocalToRoot/World buffer with some math
also @pulsar jay if you change the count for batches per chunk does it change the load? what kind of job is it?
how can I change this? It is a ForEach in a SystemBase
with ScheduleParallel
Managed to sneak into the profiler how many targets are actually found
oh not sure via foreach
id try changing the job to IJobEntityBatch and adjusting the batches per chunk param when scheduling
I'll keep that in mind and see if its necessary
ist there a way to use Profiler markers without managed string literals btw.?
Unity warns me about this. It seems to work regardless though
dont know, havent really had luck profiling inside of jobs
You can pass in a character pointer to profiler markers
could also pass in the profiler marker to the job if you're not already doing that
I tried creating a const string outside of foreach. That didnt work
How do I get a string pointer? You mean like this? new FixedString32("Test").GetUnsafePtr()
fixed (char* c = "Sample") {
}
mhh I see but it has du be unsafe. same as fixed string to unsafepointer I guess 🤔
oh just figured I was using Profiler.BeginSample which requires a string and that ProfilerMarker is a different API
yea ProfilerMarker is a different API so you can pass it as a copy into your job
yeah I see
sadly that wont help in this case where I misused the Profiler to output my hit count: Profiler.BeginSample($"Copy hits {targetCollector.NumHits}");
but it works in "normal" cases
I guess FixedString.Append might work for something like that
it's kind of like a stringbuilder
You don't need to pass it into jobs anymore, you can just create it directly inside now.
https://twitter.com/unitygames/status/1503464038675750916 new game sample teaser
Get ready for our newest sample game, debuting at GDC 2022 💥 https://t.co/xHif7Fnope
147
actually given some of the last big samples did make use of dots its not an unfair assumption that it will utilize it as a showcase
fps, megacity, nordeus all the big interactive showcase things for conference openers were dots
Hi! So I am trying to make it rain barrels. This is a Prefab which has PhysicsShape as well as MeshRenderer. I convert it the usual way, like you see below, but the instances that drop on the floor do not have colliders. What do i do?
[Obsolete("just for test")]
public class BarrelSpawnerDeleteme : MonoBehaviour
{
public GameObject Barrel;
public float spawnPerSec = 0.1f;
private float accumulated;
private World world;
private EntityManager entityManager;
private Entity prefab;
private Random rand;
private void Start()
{
world = World.DefaultGameObjectInjectionWorld;
entityManager = world.EntityManager;
GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld( world, null );
prefab = GameObjectConversionUtility.ConvertGameObjectHierarchy( Barrel, settings );
rand = new Random( 1234 );
}
private void LateUpdate()
{
if( prefab == Entity.Null )
{
return;
}
accumulated += Time.deltaTime;
while(accumulated >= spawnPerSec)
{
Spawn();
accumulated -= spawnPerSec;
}
}
private void Spawn()
{
var instance = entityManager.Instantiate( prefab );
entityManager.SetName( instance, $"$Barrel" );
//Pos;
float3 posMin = new float3( -100, 0, -4000 );
float3 posMax = new float3( 100, 0, -1000 );
float3 pos = rand.NextFloat3( posMin, posMax );
pos.y = 5;
entityManager.AddComponentData( instance, new Translation() { Value = pos } );
//Rotation;
float3 rotMax = new float3( 1, 1, 1 ) * 360;
float3 rotMin = -posMax;
quaternion rot = quaternion.Euler(rand.NextFloat3( rotMin, rotMax ));
entityManager.AddComponentData( instance, new Rotation() { Value = rot } );
}
}
nothing looks "wrong" there though ConvertGameObjectHierarchy might be deprecated. did you check the entity debugger to see if the resulting prefab barrel entity is setup correctly?
It is missing the Physics components. My prefab doesnt have RigidBody & the classical physics stuff, I added the new stuff from the get-go
GameObjectConversionSettings settings = GameObjectConversionSettings.FromWorld( world, null );
you're passing in a null blobassetstore but colliders are stored in blob asset memory
you need to setup and manually manage (dispose) your blob asset memory
SUCCESS!!!!!!!!
now you could transition that code to a system and burst job it 🙂
oh this is just an experiment to make sure my collision systems work properly, and they do!
My issue now is that the meshes do not batch. Do I need to do code-based sharedcomponent shenanigans when spawning them? @rotund token
are they in the same or different chunks if you look at entity debugger
Does this help?
Blog on some burst updates. Didn’t see it posted yet but can delete if it was: https://on.unity.com/3i5EQ1R … Mostly improved inspector and:
System.Span<T> and System.ReadOnlySpan<T> are now supported within Bursted code. These types are not allowed as entry point arguments.
Burst now uses LLVM Version 12.0.0 by default, bringing the latest optimization improvements from the LLVM project.
hmm they do appear to be in the same chunk
I disabled the spawning of those crystals so it's just cylinders and some pfxes
Pure cylinders, nothing else
Not very familiar with performance stuff, but shouldn't they all be batched together? Even their material has:
Not really my area of expertise but I believe with SRP batcher you aren't meant to use GPU instancing?
huh thought we were always supposed to use that with dots
Ah hybrid v1 required gpu instancing
i look forward to v1 + v2 being removed in 0.50 - causes so much confusion
did you see the gdc talk that mentioned how the dots editor package has some sort of logging of all component changes? looking forward to seeing that in action though I cant tell if its implied for 0.50 or 1.0
going to enjoy peoples poorly created architectures creating 1mill logs a minute
I wonder if .50 will drop at/after GDC
think that's what most of us are expecting
I dont want to get my hopes up but the training github has stopped creating new branches for employee training sessions last month so I think it's in its final stretch
i'll just be sitting here unable to use it until they add 2021.3 support in 2025
Honestly, I just piled up my NativeArrays into a single monobehavior and just used that as my ECS implementation. No need to fuck around with entity querying, iterations across chunks, and counter-performance mem-copies.
Surprisingly solved a lot of my issues. Now that I can guarantee indexing and array size so there's no wasted memory in chunk allocations.
I will need to open a new project using dots 0.50 just to see if they came up with something interesting, particularly the burst compiled systems.
I do need to test out whatever you did to burst compile job scheduling @rotund token someday.
i dont think the training samples even touched physics, i dont think they are a great indicator of the state of dots as a whole
my dynamic physics body with capsule physics shape is falling out of the static physics body and cube physics shape floor . why is this happening and what can stop it?
🤔 hmmmm nothing wrong with what you said at first glance
did you forget to convert them to entities by any chance ?
could you tell us more about your setup ?
@tribal juniper dynamic rigidbodies cant be parented
have i missed something it's not out already is it?
Okay i opened the thread.. that thread is like opening the oven door and sticking your head in. Definitely easier to just ask here 'is it out yet' hehe
its not
a bit under a week to go until "maybe disappointment, maybe changes" 😄
I don't suppose anyone has any idea how using SetComponent<Translation> can fail to work to set an objects position
I've tried several objects now and its setting the objects to majorly away from the actual position and its not an issue with parents and children and it even says the translation position is the correct position in the inspector but its not at all close in the game
nevermind it was a problem with the source object
I wish this programming crap wasn't so complicated 
it really isn't
it is for me 
I have a feeling on the road to 1.0 it's going to be all editor/workflow changes and maybe very little new stuff for existing projects 🤷♂️
I am curious what the deal with multiplayer will be... if the default DOTs model is now hybrid, which networking stack do we use 🙂
correct
I assume the dots one, but then I hope DOTs reaches feature parity
dots will be hybrid until after 1.0
Also HybridRenderer, not heard much talk about that
btw, it's DOTS, not DOTs
you can also write dots, but don't mix and match upper and lowercase
I prefer DooTs
:anarchy:
you are obviously correct, thanks for the English lesson 😛
just abbreviation rules
:anarchy:
lol
worst is that all the important packages, like dspgraph etc. likely won't be ready with 1.0
I am also curious if 0.5 is going to drop for 2022.1 and if pre-1.0 drops for 2022.2alpha, or if we have to wait longer for the beginnings of 1.0
clearly 1.0 stuff has been in works for awhile, so its possible we will see code sooner than later.
0.5 will first only drop for 2020. it will later drop for 2021
I saw that note, but I didn't see them say it wouldn't get merged into 2021?
just that 0.5 was targeting LTS
although I suppose it makes some sense if they restrict 0.5 to 2020, depending on when 1.0 is targeted for release.
it will be available for 2021 later on. not for 2022 though
well I hope 1.0 drops at sameish time then.. as I am developing against 2022.
1.0 will drop at the end of the year at the earliest
and 1.0 will also only support 2020 and 2021 at first
I don't see the wisdom in that..
who is going to start writing a new game, 6 months from now starting with 2021... when game release cycles are measured in years
1.0 will eventually be supported in 2022. but not at release
sure, and if you are depending on features from 2022 and you are writing a game now... what do you do? you cannot very well retool your project for dots after the fact
we will see what is announced in a couple weeks, because the wisdom in that line of thinking seems highly flawed.
it's the official statement. it's an experimental package. unity tells you not to use experimental packages in production games
my bad, I guess all real unity games avoids using non-LTS releases and experimental packages as part of their development cycle... and unity never promotes games that ignore this "official statement"
i wonder when Epic are going to buy unity engine along with everything else on the planet
didn't they just take over bandcamp
unreal just added 64bit floating point precision to their world transforms 😦
🤣
they'd never.
which is good
Also, if they did, it'd probably rather be tencent than epic
Hey they might, i wouldn't put it past them
Maxon are doing similar things right they bought Pixologic, or at least Zbrush, and some other stuff
Taking a leaf from the Autodesk playbook
buy the competition, then stop developing them 😛
Tencent already owns a good chunk of Epic. If Tencent bought Unity, then eh same difference
the Great Reset of productivity software
not that I really like Zbrush anyway, maybe Maxon will finally decide to make the UI usable
yeah it's a pile of ass until you've spent a thousand hours learning it, which i haven't hehe
yeah and customised it to completely different than the default
Blender are doing a lot of amazing stuff which is great
yep at least they arent likely to be bought out 
it's 0.50 not 0.5 😄
sidenote, 1.0 target is a window from 2022 - 25, that isnt even set in stone "The 2022 LTS cycle is our preferred target for this release, but we have yet to confirm it"
yes. that's my error
Hybrid renderer is chugging along smoothly. Check the sub-forum. They just shipped an extremely experimental bleeding edge instancing rendering API that hybrid renderer 1.0 will be using with 2022.1 Beta. Performance is amazing, as expected, but there is none of the "features". No viewport or occlusion culling for example.
The forums are leaking... As I said on the forums, let people call it 0.5 or 0.50. Unity will 100% be renaming it to something unique with only 0.50 as internal marker simply because of the confusion with newcomers to DOTS.
Seeing how the experimental hybrid rendering API is just been exposed for 2022.1, I highly doubt 1.0 DOTS for 2022.3 LTS. I'm projecting probably 2024.3 LTS at the earliest.
2025.3 Realistic. 2026.3 is what we'll be getting.
cant wait to see what unreal cooks up by then
But for now it's 0.50 not 0.5.
I'm basically just sticking around for Burst, Virtual Texturing, and sunk cost fallacy.
But letting people say 0.5 or 0.50 is basically self-filtering between those who kinda know what they're talking about in DOTS and those who dont. Makes it really easy to discard any opinions they make on the drama forum thread with just a single omission of a 0.
simple mistake of not knowing about versioning system used by unity tells you nothing about that person knowledge about DOTS thus it's better to fix
sunk cost fallacy & c# for me, so really Ill be here forever I think, always looking wistfully at greener ue5 pastures 😅
'greener ue5 pastures' you are right. they steel green paper notes left and right
gotta admit, gets you some good stuff, megascans for free, isnt capturing reality also epic now? I assume thats probably free for ue5 users
as much as I'd like to try out ue5, that install size just kills me 🙃
in contrast we got a video of the ziva girl, and a nice little blog post about speedtree and weta to just use our own imagination 🧠
im still on an old 500gb sata ssd, so its really a few unity installs and maybe try ue5 every now and then but gotta remember to delete it
Hello peeps! new day, new issue!
I have a OnDeathDoSpawn component that, when my entity is killed, a system detects it and spawns another entity in it's place. same **Translation **and Rotation.
If I am using a childless Entity as a prefab, instantiating it is no problemo.
If I am using a Entity that has nothing on it but has children entities, it will duplicate the parent but none of the children (or grandchildren).
Is my only solution to recursively go in those children and spawn them, or is there a smarter / cleaner way to do it?
EntityManager.Instantiate uses LinkedEntityGroup to instantiate the whole set of entities automatically.
I am using the commandBuffer, could it be that it doesn't use this?
works with both, you've verified that there is a linkedentitygroup on your entity?
How does one do this? Kinda hard to find what I want with thousands of Entity 123432 in the debugger
check the entity from doSpawnComponent[spawnIndex].prefab?
this is a Job so I dont have access to EntityManager to GetComponentData from it
first: its a buffer that sits on the prefab. you dont need to use GetComponentData assuming your prefab is setup correctly
so it's GetBuffer using EntityManager then, same hinderance being a Job
second: if you need to use GetComponentData inside a job you could use ComponentDataFromEntity
no, you dont get anything
that buffer sits there and you dont touch it when you instantiate or destroy the entity in question
ie: entityCommandBuffer/entityManager.Instantiate(myPrefabWithALinkedEntityGroup); now if you have a linked entity group on myPrefabWithALinkedEntityGroup, every entity is just instantiated or destroyed alongside that entity without you doing anything else. no need to get the buffer, no need to get component data, it just happens behind the scenes
so my guess is it comes down to how you got your prefab, because hierarchical transform entities should be automatically included during the conversion process. if you are doing some custom entity creation during conversion you can always just do the work manually, ie create and add a LinkedEntityGroup to your entity and add any other entities to it
I have a prefab called WoodenBox, which has OnDeathDoSpawn with an Entity prefab property.
It references a prefab (no components) that has children (splinters of a broken box)
I actually have no idea when / where the conversion happens.
do you use the monobehaviour interface IConvertGameObjectToEntity, a GameObjectConversionSystem? or something else?
nop
any custom behaviour on these prefabs at all?
I have other components
Entity spawn = entityCommandBuffer.Instantiate( entityInQueryIndex, prefab );
BufferFromEntity<LinkedEntityGroup> a = GetBufferFromEntity<LinkedEntityGroup>(true);
if( a.HasComponent( prefab ) )
{
DynamicBuffer<LinkedEntityGroup> b = a[ prefab ];
Debug.Log( $"Spawning DynamicBuffer<LinkedEntityGroup> {b.Length}" );
}```
This gives me 101, the children are 100 in number and I assume +1 for the root
I deleted all other entities which I played around for testing and I can clearly say that the entities do spawn, only I cannot see them
{
"x": -0.6469584,
"y": -5169.043,
"z": -0.7376097
}
One of the children is at this position (and falling), so I think what happened is that all the children were spawned at 0, 0,0 and now they are falling under the world.
sounds like two separate problems
Well, my question now is, why are the children spawned around 0,0,0 despite setting the parent quite far away from that
just gonna paste this as an example of the previous topic
/// <summary>
/// Any time this entity is instantiated/destoyed, the discord entity and any childed entity will be created/destroyed.
/// </summary>
public class PrefabConversionBehaviour: MonoBehaviour, IConvertGameObjectToEntity
{
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
conversionSystem.DeclareLinkedEntityGroup(gameObject);
var additionalEntity = conversionSystem.CreateAdditionalEntity(gameObject);
#if UNITY_EDITOR
dstManager.SetName(additionalEntity, "Discord Entity");
#endif
dstManager.AddComponentData(entity, new JustAnEntityReference{ Value = additionalEntity });
}
}
public struct JustAnEntityReference : IComponentData
{
public Entity Value;
}
so this new problem.. are they physics entities?
yup, splinters of a box
if they use Physics it could be weirdness
i did have a similar issue
i think you have to set the position or spawn after the physics group
just note you cant have hierarchical transforms with dynamic rigidbodies in dots, they get unparented
that's an easy test, I will remove physics stuff off them, they should spawn correctly
I assume its something to do with that
that sounds exactly what is happening, what a random rule
apparently its faster, but its definitely less convenient
That was it @devout prairie @safe lintel I removed the physics pair of components and all the children were spawned at the correct position (relative to the parent position and rotation)
i think in my case, i think one issue i had was when units died i was unparenting the weapon and removing PhysicsIgnore, which would teleport the weapon to 0/0/0
it's doing that to me! how did you solve it?
i think just added an additional step, which was setting the position once after the physics stuff
[UpdateAfter( typeof( EndFramePhysicsSystem ) )]
already doing this !?
commandBufferSystem = World.GetOrCreateSystem<EndSimulationEntityCommandBufferSystem>();
so maybe in your case what you'll need to do is, grab the position of all of your 'fragments' relative to their parent... and then when they're spawned, run some code after physics which sets their position this relative pos + whatever the parent spawn pos was
i think ideally you'd want to spawn before physics, then set position after physics
this gives physics a chance to initialize your new physics objects ( which sets to 0.0.0 ), and then you tell it where you want them to be
Quite a problem, as the spawning of the wooden splinters has the origin in a collision, which happens AFTER physics
So I'd have to delay the spawn till next frame I guess
Would be easier to add the two Physics by code after spawn
not necessarily delay the spawn, so long as your set-position happens after the next buildphysicsworld or whatever it's called
adding the physics components by code after spawn might have the same problem, not 100% sure
what i'd suggest is:
spawn your splinters whenever
add them all to a native collection, as well as their ideal/relative positions
then have a job that runs after physics, which iterates the collection of new entities and sets all positions, and then clears the collections
so basically the after-physics job is always there, but only actually does anything if the collection has stuff in it
actually have you disabled FixedRateManager ?
@devout prairie First time I hear about this, what that
ah basically it's i think the dots physics equivalent of FixedUpdate
so what you find is the physics world group is being run multiple times per frame in some cases
which would give you an opportunity to set your positions mid-frame
how do I disable it?
in my case i had it disabled ( FixedRateManager = null ), which meant i only had one single physics group update per frame
i'm not 100% sure if it's advised to disable it, but i freed up a chunk of fps and found it to be more manageable without it
I shall not disable it then but thanks for making me aware of it
The solution sounds pretty painful 😄 I think what I will do is use the PFX with physics to spawn the splinters. I try to go with the K.I.S.S. principle
I appreciate your help @devout prairie & @safe lintel !
unity really need to up their documentation game⏳
I am waiting for the promised 0.5 perhaps it fixes a lot of this QOL
Any news on that?
next week monday stuff should drop
gdc and all
if stuff doesnt happen sometime that week, i guess its never 😩
@safe lintel That sounds nice!
@devout prairie What if instead of instantiating the root+children, I spawn the children individually through DynamicBuffer<LinkedEntityGroup> and set the position and rotation then and there?
It's worth a shot, that may work fine
let us know if it does i'm curious tbh
i think it should, as normally spawning for example physics projectiles at specific positions isn't an issue
i think it's when parenting is involved it becomes an additional step
Yeah I have another gameplay prop which is an explosive barrel. It doesn't have any children
@devout prairie It works, but I think the math is bad. I add the prefab's child position and rotation to the destination's position and rotation.
I think what really needs to happen is math related to transform matrix blablabla. More stuff to google >.>
yeah stupid matrixy stuff
@devout prairie https://forum.unity.com/threads/properly-moving-teleporting-a-physics-entity-with-its-children.874315/#post-5759641 found code for rotation, math already has something for it, goodie
I'm doing some super basic stuff with DOTS, just spawning some entities with physics like this:```cs
private void Update()
{
if (!Input.GetKeyDown(KeyCode.F)) return;
var blobAssetStore = new BlobAssetStore();
var settings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, blobAssetStore);
var prefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(dicePrefab, settings);
entityManager.Instantiate(prefab);
}
```And I'm getting a A Native Collection has not been disposed, resulting in a memory leak.. Did I miss something obvious?
@wicked stone Move your "new blobassetstore" in awake or start
It's worth noting that I used https://forum.unity.com/threads/2021-2-8f1-broke-asdeferredjobarray-and-deferred-jobs.1225635/#post-7815393 this fix for the physics disposing error, in 2020.3.30f1
and do bloblAssetStore.Dispose inside OnDestroy
what is a BlobAssetStore anyway?
And it makes sense that I have to dispose it, but why does it give me an error during the game and not when I close the scene? Does it detect that I'm making too many of them?
putting it inside of Update with new BlobAssetStore will spawn a few thousands of those 😄
only if I press F, since I do a check at the start, and the error happens even if I only spawn like 5 of them
perhaps it's a different place generating the memory leak
well lemme try what you suggested first then
I have to go sleep, hope somebody else finds and can help ❤️
Seems to work fine, I don't get the error anymore. goodnight :)
What is BlobAssetStore used for?
blob assets are basically for storing data that you won't be updating or changing, but that you will read from or refer to a lot
Are there any advantages of going through all of this rather than simply adding a ConvertToEntity component on the prefab and instantiating it like any other game object?
The blob asset store you only really want one of those, not to create a new one each time like that..
Other thing i'd suggest is create entity prefabs from the objects you want to spawn, similar concept to normal unity prefabs but you normally create them within a SubScene during authoring
then it's just one line of code to instantiate the prefab - EntityManager.Instantiate(myECSPrefab);
or ecb.Instantiate()
@wicked stone no, that utility is unofficially deprecated
i think you need blobassetstore.dispose() after you use it
"that utility" referring to GameObjectConversionUtility.ConvertGameObjectHierarchy?
GameObjectConversionUtility
okay thank you
So it achieves the same thing as simply instantiating a regular gameobject prefab with ConvertToEntity
yeah, i think its less flexible in terms of advanced use
Yeah, I was trying to modify stuff using SetComponentData and it's much more complicated than just modifying the gameObject you instantiate
(for initialization and stuff)
It's interesting that you can GetComponent the instantiated gameObject even though it has ConvertToEntity, I guess it turns it into an entity after my code rather than right when you call Instantiate
I'm not on top of what's going on in ol' dots-world, are these 0.50.0-preview.24 patch notes the first we have access to or am I just slow to 0.50
https://github.com/needle-mirror/com.unity.entities/releases/tag/0.50.0-preview.24
It says 2021-09-17, is there a 0.50 that's that old?
yes - it's unlikely entities what was holding up 0.50. all the things that depended on it would need updating after it was finalized.
It's nice to see it's source generators
https://github.com/needle-mirror/com.unity.entities/blob/master/Documentation~/upgrade-guide.md is a good one to look through
Remove Animations package
The Animations package (com.unity.animations) isn't supported in 0.50. You should remove the package and any related scripts from your project.
that's the opposite of what i wanted to hear
a good animation solution was like the 1 thing i was hoping for
ah jeez
yeah not happy about that. i was really hoping to see a solid implementation (and audio) then i'd have been happy with dots as a whole
instead both just flat out removed
who needs to move or hear
on a more positive note, relationship window is nice
https://github.com/needle-mirror/com.unity.entities/blob/master/Documentation~/editor-workflows.md
can see a bunch of new debugging windows here - screenshots included
i thought with the move towards more integrated editor workflow etc, they'd be porting as much as possible right off the bat so for example animation
but i guess just having the foundational editor toolsets/integration is more the goal initially
how am i going to bloody keep all these windows in my editor though
yeah it does look as thoug live debugging will get a lot easier
before anyone tries, entities 0.50 won't compile on any current unity editor release
i guess Entities relies on platform 0.50 but I don't think I see it released :/
yeah 0.50 is not out
@rotund tokeneven 2020.3 ?
but even if platforms 0.50 was out
entities has references to stuff inside UnityEditor JobsUtility that just doesn't exist in 2020.3.30f1 (latest)
someone f*cked up tho since the package still has ```json
"name": "com.unity.entities",
"displayName": "Entities",
"version": "0.50.0-preview.24",
"unity": "2020.3",
"unityRelease": "0f1",
Who needs to make dependency resolution like... work
it's worse than that, it has a dependency on
"com.unity.serialization": "1.7.0-preview.1",
but when you run it, "com.unity.serialization": "1.7.0-preview.1" has a compile error due to FixedString changing
and needs to be updated
so any fresh project is going to compile error after installing entities
so.. expect new 0.50 soon
maybe deliberate to throw people off?
i updated to serialization 1.8.2 and it was fine
Release a broken version to get a read on reactions before you finish writing your GDC talk 😆
but yeah silly
actually no i've had so many stupid dependency issues with std packages i doubt its deliberate hehe
2d animation samples was a recent one
don't get how their basic testing before releasing a package is simply, load package into fresh project
does it compile?
me 'okay its all official now safe to install and try the samples'
unity 'error'
tbf it must be painful having to support multiple versions of multiple packages across multiple editor versions
Oh yeah, painful as hell. Still I'll happily shame 😄
haha ofcourse 😛
they should have a solid system for that really by now i'd think
but yeah the complexities would be, quite vast
i worked on a plugin for a couple of years that transferred scenes between different dcc apps
so like export from 3dsmax and import into c4d for example, and it used fbx as the underlying format
the problem is you have multiple versions of 3ds max, multiple versions of cinema4d, multiple versions of the fbx format
and different apps interpret fbx differently
so yeah, it teaches you something about being overkill with avoiding future technical debt
The actual docs site instead of the mirror has propagated https://docs.unity3d.com/Packages/com.unity.entities@0.50/manual/index.html (and presumably the other packages)
DOTS Physics: [0.10.0-preview.1] - 9999-12-31
Yea that's how it felt
The system relationship inspector is nice and felt much needed. Hope they'll push it further to some kind of graph representation (read-only is enough) or someone writes a nice editor extension for it 🙂
I'm on the other glad I didn't made my animation system for nothing 😄
good mindset 😄
Curious what this means: Support WithScheduleGranularity with Entities.ForEach to allow per-entity scheduling
Well, fortunately, the docs are up-to-date now, so check https://docs.unity3d.com/Packages/com.unity.entities@0.50/api/Unity.Entities.LambdaJobDescriptionConstructionMethods.WithScheduleGranularity.html
and https://docs.unity3d.com/Packages/com.unity.entities@0.50/api/Unity.Entities.ScheduleGranularity.html
ok makes sense 😄
before that you could use a IJobEntityBatch to set your own batch size with an int, but couldnt mess with that in foreach if I'm not mistaken
Woooot structural changes module for the profiler. Nice !
strange, I can't update because of dependency error. Did I missed something?
platforms 0.50 is not out yet
what do you mean by 'platform'?
is that an editor update?
its the package thats mainly responsible of building the game
which unity version is recommended - i use currently 2020.3.30f ? does it work with 2021?
It currently works with no versions as far as we've seen.
https://docs.unity3d.com/Packages/com.unity.entities@0.50/manual/install_setup.html#entities-050-packages
The following table lists the ECS-based packages that have been tested together with Unity 2020 LTS:
which package is that?
damn
com.unity.platforms
ahhhh
The editor workflow with new windows looks nice: https://docs.unity3d.com/Packages/com.unity.entities@0.50/manual/editor-workflows.html
yea the archetype one looks useful
sooooo there is nothing to do until platforms package gets to v0.50?
seems so
funny that 0.50 is already half a year behind, titled with 2021-09-17
new unity versions usually release on Wednesday, right?
i've to say, all those new tool windows look helpful AF
a lot
Wow you guys are already jumping right into it ? I think i'm gonna wait a few weeks, let people figure out the main issues
yeah we are the people 😄
It's not working for anyone right now.
🤣 unity version names
does it count as "releasing entities 0.50" they never said anything about other packages xD
Source generators generate readable source that gets compiled normally, vs the IL injection which modifies an already built assembly
they also provide lots of additional benefits
Does anyone know if windows x86 is supported for entities? The last time I tried using the build configuration there wasn't an option for it
Where can we find the upgrade guide?
why the fuck would you ever build for x86 these days?????
o_O toggle support? is that component disabling?
the same reason you'd build a linux version? 😉
? you still build a linux version for x64
anyway, as far as i can remember (vaguely) dots was never intended to run on non x64 hardware
Any difference to how Netcode was generating its code? It wrote out perfectly fine files. Is the process just more streamlined I guess? AFAIK dots wasn't using the same style of actually generated files, question is, why not.
The joke was that both are a small number of players 😛 But we do it because we want as many people to be able to play
I only know what's in the changelog
then get those people to upgrade hardware, not by catering to old hardware and forcing all new hardware to use compatibility emulation
x86 can not run natively on x64
source generators are a .net native thing as of .net 5 and are more lightweight, powerful and usable than the emitting solutions unity used before. they also run in realtime while writing any character in your script, like a roslyn analyzer. the generated source can also not be edited which is important and they allow for easy extendability. there's also many more aspects why they are beneficial
We build windows x86, windows x64, linux x64 and macos x64. But x86 runs on an x64 CPU fine so I'm not sure what you're getting at there
x86 is emulated on any x64 machine
At the CPU level it runs natively, so I'm not sure what you're saying is emulated
guys, guys.. let's not bicker and argue about who killed who..
it's 2022 for fricks sake
it was a monty python reference but can't post the gif
YAY, you can now install 0.50
they updated the platform package?
Like I said, we build x64 so noone is missing out, we just make it available to more players by providing an x86 (which has entities working fine btw)
working for me at least......
how are you putting that on steam with 2 version?
i don't quite get why 0.50 doesn't need a new unity version. I thought the whole point of not releasing a new dots was because they made engine changes.
separate repos, the same as other platforms
they could have added any needed changes to 2020.3 in a hotfix?
no i think they just didn't release any updates because there were no big changes. and they didn't release for 2021 anymore becuase of incompatibility
so that's the thing. if 2020.3 runs, why is a new unity version incompatible?
because unity changed between 2020 and 2021
would be interesting what exactly and why they don't bring the necessary changes at least to the 2022.1 beta
meh, got my hopes up 😄
there are things set internal in 2022 that entities tries to override
anyway, the whole dots going dark debacle for over one year is just strange at this point - especially when reading the new patch notes. it's like, same same but different. Hope the baseline performs better at least but usually they mentioned performance improvements in the notes. 0.50 just seems like a middle of the road update with the basic groundwork laid out.
and whatever the basic groundwork may be. for one, code generators, the rest, I don't know. Doesn't seem worth a year of development, although 0.50 is already half a year old.
it's not. it just released
it says so in the changelog: [0.50.0] - 2021-09-17
it sure is as changelog was posted half a year now
the second option is, they started it at that date
and updated until now
internal build for libraries or any application are always available waaay before released to the public. public release is what counts
the point is, internally they are half a year ahead then
yeah, and they're already way working on 1.0
and that seems right as I saw posts form UT members like "oh right you don't have current version"
it wouldn't be surprising if they had two branches and were working on them side by side
afaik, they are
neat looks like com.unity.platforms 0.50 is out
did someone upgrade it successfully?
yeah, quite some minutes ago
Does anyone know if they plan to release more frequent updates now, or are we waiting until 1.0 is released?
1.0 only
I'm getting compiler errors, also Mathematics 1.2.6 doesn't exist yet
what errors?
Library\PackageCache\com.unity.entities@0.50.0-preview.24\Unity.Entities.Editor\Unity.InternalAPIEditorBridge.002\ProfilerModules\StructuralChangesProfilerModuleBridge.cs(4,23): error CS0234: The type or namespace name 'Editor' does not exist in the namespace 'Unity.Profiling' (are you missing an assembly reference?)
Unity hung while updating Entities so I'm trying to clean up all the references
also I just realised I'm using 2020.3.27 so maybe it needs 2020.3.30?
I'm getting 13 different errors from com.unity.enities but i''m on 2021.2.12 so that's may be the issue
mathematics 1.2.5 works perfectly with 0.50 and i have 0 errors
I guess 2022.1b needs some work to make entities work haha
are you using 2020.3 LTS?
yes
which hotfix?
hotfix? just latest 2020.3.30f1
just wait a few more weeks / months
years*
nah. 0.50 will be released for 2021 soonish.
ok, using 2020.3.30 those compile errors go away (so I'd say it's required), but I get new ones
what errors?
stuff in serialization, but there's a newer package I'm trying
ok, that takes it down to just one:
Library\PackageCache\com.unity.entities@0.50.0-preview.24\Unity.Entities.Hybrid\GameObjectConversion\BlobAssetComputationContext.cs(138,24): error CS0618: 'Extensions.GetUniqueKeyArrayNBC<TKey, TValue>(NativeMultiHashMap<TKey, TValue>, AllocatorManager.AllocatorHandle)' is obsolete: 'Burst now supports tuple, please use GetUniqueKeyArraymethod fromUnity.Collections.NativeMultiHashMap` instead.'
`
are you using burst version above 1.6.4?
exactly 1.6.4
yeah, you can just use tuples there now
Good to know, that's why I asked if a new unity version is needed. I'm on 20f1 myself. Anyone had success with <30f1?
not tried
I was on 2020.3.27 and that wasn't working, though it's still not working so maybe it wasn't the issue 🤷♂️
did you replace the method?
no animation, do they really expect us to use mecanim until 1.0? some sort of sick joke 🤡
tells you here as well: https://docs.unity3d.com/Packages/com.unity.collections@1.2/changelog/CHANGELOG.html in the changed paragraph
seems like it. no audio either.
Ha, yeah. I think the expectation is to use HR for anything static and old MBs for anything with animation. Not perfect but manageable
not really managable
its kind of awful working in both tbh
if you port skining to GPU you can easly use HR for everything
definitely
which is what the animation package does
it also port mechanim to ECS I think
ok, time to unseal every of my systems classes
@haughty rampart can you post a screenshot of your dependencies for the entities package?
hmm so this bug still exists in 0.50 https://issuetracker.unity3d.com/issues/trying-to-serialize-slash-deserialize-an-entities-world-a-second-time-fails-if-there-are-blob-assets
How to reproduce: 1. Open attached project "Unity Bugs.zip" and scene "SampleScene" 2. Enter Play mode 3. In Game view, click on the...
what are you struggling on @calm edge?
oh, are you getting a warning about obsolete methods?
no
I think we have warnings as errors, that would explain it
i don't even have warnings
I guess you would only see it on first compile of the package
i did not have any errors even on first compile
i just upgraded my second ecs project and had no package related warnings or errors again
disabling warnings-as-errors in the csc response file fixed the issue
so it's just that they're using an obsolete method in 0.50
which isn't a problem unless you mess with the compiler response file
is there a reason you are using a csc file? since a relatively recent unity version you can just add compiler arguments in the project settings
because that's how was it was done originally and there has been no need to change
@calm edge you are ahead for some packages. Like Serialization one. Try to downgrade maybe ?
ow that hurts. right. 2020 does not have net standard 2.1 compatibility
yeah
i want .net 6 compatibility unity
it's like step forward with DOTS and 2 steps backwards with all other unity features 😄
WHOOOO being able to easily look at the generated code is so POG. .......although i don't necessarily agree with unity on how the generated code looks
some idea how to get vertex ID in shadergraph in 2020.3?
no idea
in 2021.1 there is already node for that
yeah i know
actually, maybe just copy the source code from the node from 2021 and paste it into a custom function node in 2020 XD
thank god though. hybrid renderer v1 is finally gone
I think I didn't even used it
Change any place that the input dependency was used or returned, to use the Dependency field on SystemBase. This might mean you need to change some logic of your system’s OnUpdate method.
Does this mean I take Dependency at the beginning of the function as the input, and then set it as the output?
something like that
Holy shit. They just dropped 0.50 literally out of nowhere
If you use .ForEach I belive it's automated for you
No announcements, no fanfare
well it's probably not officially released yet...
the fewer peoples know about it, the fewer people complain about it
@robust scaffold no audio, no animation either 😩
You'll be happy to know I deleted all the old compiler settings files and use the project options and asmdef files 😉
i mean csc is fine. just wanted to make sure that you know there's another way
it's not production ready so it will miss some crucial features
since it's a relatively recent addition
Trueeee
i'm definitely looking forward to csproj unity solutions. then no more csc or compiler arguments 😄 @calm edge
is there new sample repo or it's just not updated yet?
Just read through the 0.50 (and 0.19) changelog. Nothing stood out as revolutionary and worth reinstalling entities. The inability to asynchronously update worlds is just crippling for my simulation game.
there won't be a 'real' one till 1.0
but i think there's one new sample
don't forget to read 0.18 as well
Yea. Just read all the way to 0.17. The main thing I see is source generator full implementation of the lambdas... which I never use.
you could tune the generation now
The problem with lambda jobs in general is that you can not manually adjust the entity iteration code to maximize Burst vectorization and optimization. Specifically fast float and non-deterministic operations like MADD which require a specific pattern of coding to be recognized.
Oh well, just my griping. 0.50 is alive and wow, from Havok Physics changelog: [0.10.0-preview] - 9999-12-31. Unity spent all their time developing a time machine I see.
XDDDDDDDD they just moved the thread to a new one
whoooo
i don't like the archetypes icon though. doesn't look like archetypes to me
Update to 2021.3 dots? So soon? No way.
my performance characteristics have completely changed (in the editor), now I get a higher fps for a fraction of a second then a tiny freeze
"soon"
i am actually only seeing a speedup in my project. no freezes for now
All SystemBase-derived classes must be defined with the `partial` keyword, so that source generators can emit additional code into these classes. Please add the `partial` keyword to MoveAlongPathSystem, as well as all the classes it is nested within.
do I need to do it for every class? D:
every class that is a system
so pretty much all of them 😄
yeah. that's so awesome
can I do it automatically somehow?
it's supposed to update them if you selection the option from the DOTS menu
I hope most are silent changes. Entities was already good enough for me (mostly) so I hope it just performs faster.
if you have a few thousand classes just write a small macro for it i guess
apparently quite soon actually
3 months is not soon
ArchetypeChunk.GetComponentPtrRaw is a nice addition. only thing that stood out for me when I read this.
That's lightning speed for DOTS
Yeah! Also stood out to me. Not sure about the actual code though. So, I'd need to know the archetype size, right?
I think you can get that from the Archetype chunk as well.
right, well I need to test it when I find the time. GetNativeArray had some overhead with a big chunk, that's for sure
ComponentTypeHandle.Update() is a rather interesting addition. It was profiled by Tertle (iirc) that creation and obtaining the component type handle during job scheduling was quite costly. Now you can store a CTH and simply reuse every scheduling action.
I need to run some tests Burst compiling job scheduling in monobehavior. These changes in DOTS are promising but lack the flexibility provided by a pile of native arrays and lists.
New IJobEntity job interface, for implementing re-usable and burstable jobs that iterate over entities
Is this the return of IJobEntityForEach?
That interface dies and gets revived seemingly every other update.
it's actually just IJobEntityForEach renamed. it's in the changelog
and maybe has some new implementation stuff
Holy shit, they finally done it, they cleaned up the stickied posts on the top of the DOTS forum
this is the real 0.50 DOTS
No longer is half the front page of the DOTS forum taken up by ancient announcements and posts
Isnt IJEFE the one with the <CCBB> generics? I thought that was dead and decomposed, replaced with IJobEntityBatch. I dont see anything in the changelog that says its been revived which is why I was surprised.
oooooooooh, excited for that
Partial Struct
Wait, what the fuck?
well, not what i was after. i was aftert IAspect<>
ComponentDataRef<>
Oh, that's nice. Seems like they're abandoning the forced handholding by way of mem-copying structs and instead handing over direct references
what's strange about a partial struct?
I've never seen it with structs seeing how C# does not allow inheritance with structs. I also have 0 experience with source gens so hrm
? c# allows inheritance with structs. and partial has nothing to do with inheritance anyway
C# structs can implement interfaces but not inherit other structs. Anyways, just my own coding inexperience.
Personally, from this tiny sample, seems like Aspects is going back to OOC style. Which is strange.
yeah you can't inherit from other structs obv
you can read that it's to make hybrid workflow easy
Aspects though seems like source-gen'ed archetypes... which actually doesnt seem that bad.
If the power of source gen can bridge the communication gap between mainstream OOC to performance focused DOC, that's actually revolutionary.
I'm starting to see why this took a year to release
aspects are not released yet btw. that's for 1.0
Yea. But that's definitely what they're aiming for. Very excited to see how it plays out. Would make answering questions here on this channel a lot easier, kinda.
It seems like Unity is developing their own language inside C#.
Not counting HPC# of course
It should, as in editor you will be able to make complicated OOC things and then just generate classes/components from that for DOC
i'm not sure. i definitely read about it earlier, but cannot find it anymore. but i think it actually was not IJobEntityForEach but rather IJobForEach that got renamed
so authoring AI would be same as always but generated code faster
I dont remember what IJFE did. Was that the half baked IJEntityBatch with the entity batch signature for Execute() decomposed?
The issue I see is that it shifts the responsibility for coding in an efficient DOC style onto Unity... which I guess is the entire purpose of a game engine.
no idea actually.
Yea. Never used it. First time I'm hearing that it even worked.
not really. better code will always generate better results
True but Unity is definitely leaning, if not going full tilt, into their industry reputation as the beginner game engine.
There's also basic burst jobs, which is fully stable and released, for those who want to have near assembly level control over job performance.
1.0 'leaning into beginner game engine' - press F to foubt
Fine, "Beginner to ECS" game engine. And possibly The ECS game engine. F to bevy.
F bevy
If this pans out, people will look at bevy and ask, why should I bother learning an entirely new way to code when unity code gens for me.
i wouldn't even begin to think why you'd even use bevy over unity. even now
Rust elitists.
Isn't animation a shader / compute problem?
animation is 'planned'? the heck happened with the progress on the animation package?
Oh, F. It ded.
XD and project tiny is also dead for the time being
i mean.....that's not that big a deal for me
IJobEntity is the revived version of IJobForEachEntity<CCBB...>. My god, it's back.
OOOOOOOOOF. that's bad
Audio not even planned. Hahahaha
OOOOOFFF. also 'under consideration'
Is anyone going to try using 0.50 with 2021.2?
Well, ECS Terrain is dead.
doesn't work
Not supported. Wait for 0.51.
ty
To be fair, at least they have a roadmap. we've been asking for one for what, years now?
And on the upgrade guide:
Remove Audio Package
Remove Animations Package
@safe lintel
remove audio package 'com.unity.audio' is the best troll 🤣
Yep. You'll be able to store everything in on create eventually and do this update (cdfe)
Guess I'll go finish off my nav mesh library
Basically put it on hold because I wasn't sure of plans
Really just needs front end
If I were to instead use NativeArrays / Containers for everything, would job scheduling be an issue?
@robust scaffold ComponentDataRef replaces our CDFE GetPtr() ?
Seems it does more under the hood but this seems very nice
Anyway 0.51 when am I right?!
Nah, the image was for a planned version of IAspect<>. Like a source generated archetype in a style of an object from what I see.
animation and audio and navigation
i was like in the middle of gathering my(very annoyed) thoughts for a post requesting a real update to animation
Not sure what IAspect is about. Seems to me like another abstraction layer over archetypes
CDR seems to be akin to a read-write property on an object that is then converted to a ComponentType.ReadWrite<>() on an archetype.
Yep. It's bridging the communication gap between ObjectOriented and DataOriented. Revolutionary IMO.
IAspect seems interesting. Archetypes are nice but to have them decoupled even more makes some nice code abstractions. I'm just not sure how far they go. CDR<Strength> on the same archetype, okay, fine. Then the big question, how do they handle a CDR<Entity> Target.
they actually have some rough Aspect stuff in the animation(🥲 ) package, which could be the precursor to that
Probably a wrapper component. Like the current implementation.
There's now a VariableRateSimulationSystemGroup
So I'm guessing that simplifies running a system every x frames
Noice
what could possibly go wrong downgrading my project to 2020.3
I downloaded the DOTS sample project from github and tried to open it in Unity 2020.3.0f1, but I can't run it. I'm getting this in the console. Any suggestions?
i'm not sure the old example will even remotely work
i tried to just download the package into a blank project but got compile errors there too...
is there a workable quickstart guide somewhere that actually works?
yeah so they fucked up dependencies
is it an error on serialization? just update that package in the package manager
2020.3.30?
i just did an install into a blank project, get the obvious burst errors which require a unity restart
not 3.30 🙂
strange. i also set up a new blank project and had not even warnings
ugh... don't even know how i got the wrong version here. gonna upgrade.
🤷♂️ 🤣 Unity things
everything, I gave up when I figured out I'm missing ui toolkit XD
waiting for packages until the end 🎶 getting errors i can't comprehend 🎶 working with code that is ancient and bad 🎶 thinking new systems are real super rad 🎶 upgrading projects will break all the links..... 🎶 these are just unity thingssssss.... 🎶
yeah uitoolkit is the big issue
main issue for me that it broke my gpu animation instancing
ow come on. i thought hard about that. not even a comment?
XD
@haughty rampart how to check shadergraph node code?
right click the node, show generated code
why is code generators are so important? Can someone explain to me what we get with this?
debuggability, extensibility, compiling performance, .....
hah
How are ya'll serializing native containers? Just convert from NativeArray to an array or use something like BinarySerialization?
serialized to what
our saving system converts everything to 1 giant nativearray and then just writes that to disk (after compressing it)
so nativearray is our serialized format 😅
Right now I'm just copying my native arrays to arrays for my scriptableobject
how far du guys normally get into a fresh project before you start saying 'ffs unity hurry up'
not dots related sorry
Every time I compile stuff
i've been finding my library in 2021.2 compiled really fast
everytime someone on the project doesn't know what he is doing
and i.e. put everything under one folder
i have 3-8s compile times
without any asmdf files
i'm talking pretty straightforward project, everything super well organised, not a a heavy project either, few thousand lines of code so far maybe
how long are you talking?
I mean it's manageable, but definitely waiting on scripts compiling etc eats into dev time quite a bit
even our really large, terribly organized, project at work only takes me 15 seconds to compile
probably my projects never exceeds this range
This is 2021.2 which does feel a bit quicker than 2020.3 and older tbf
15 seconds is a long time if you're dipping in and out of VS, adding lines of code, testing, bugfixing
all those 15s add up
but yeah in this case, probs just a few seconds, not as much as 15
but just enough to be annoying
I agree with Krajca, asmdef help a lot. Also if you use a bunch of assets, put them in their own asmdef.
- disabling domain reloading if you don't use static references
Eventually letting burst compile asynchronously if you'd rather trade compile time for runtime "warming up" but I'm not sure yet how much of an improvement on that last one
and if you use, you can make your own domain reload for those scripts
still faster than unity's reload
@robust scaffold i've found it. IJobEntity replaces BOTH IJFE and IJFEWE
well drat, tried updating the animation package for 0.50. all compile time issues fixed but it spits out errors about generic jobs not being initialized during runtime
IJobEntity is the best thing in the update
i can't see myself using many entities.foreach except for tiny tiny jobs
Thank goodness for IJobEntity. I was really pushing for that in the forum post. Glad they did that. I don't like Lambdas.
why?
what's so good in IJobEntity?
have you read the documentation about it?
not yet
it provides the boilerplate free setup of Entities.ForEach but lets you organize methods and data much better
No, it is not being scrapped. In the past we have showed early work on an ECS-based animation system. That work is not part of the scope for our Entities 1.0 release as we focus first on delivering a fully supported ECS foundation. We intend to then build on that foundation with systems like ECS-based animation, and will share more concrete details as they get refined.
oh god animation isn't even part of 1.0
look at the roadmap
it's "planned"
bonus fun fact is audio landed into "under consideration" 😄
yeah the more I try dots the more I have come to accept it is Not production ready at all
it is, but not in "pure" mode
jobs+burst are released
and you can make nice things with it
yeah I should have been more specific
yeah i looked. i was hoping planned was 1.0 and underconsideration was after
but only thing that prevents usage of "pure" ecs is lack of out of the box features
while I am using a GameObject based system for my game, I do plan to use Entities for a few things (Like keeping track of and updating positions of unloaded NPCs)
Did 0.5 just come out? is there a blog post with the changelog?
out years ago mate 😉
it's 0.50 and yes
oh, yeah, last year. nuts
the saddest thing is I need 2021.1+ so I need to wait another ~3 months
Wait is there actually a time plan and road map? i almost thought they gave up on the whole thing
@rotund token does IJobEntity work with managed things?
It's similar to the old system in ECS around 0.4 where you could specify which components you wanted to bring into a job. I just never like the Lambda expressions. Not enough control with what I am doing. This also allows you to write reusable code so you can use the code in multiple places.
haven't tried
i'd be hopeful it would under the same rules as Entities.ForEach but yeah haven't tried
Probably without burst enabled. It's a different way to do Entities.ForEach. Closer to the code instead of magic lambda
ah fuck me just read that response regarding animation
ugh do they even read that productboard feedback? almost feels like throwing something into a blackhole
the new entity inspector is very nice to edit data 👀
@coarse turtle you can definitely edit data this time around?
tried upgrading to 0.50, and I dont even have anything made using Entities yet... thats not good...
uhh maybe not, you can interact with the inspector, but i guess it throws an error when you edit the data :|
oh, I see. will 20201 ever be supported? boy, all this is complicated
0.51 in Q2 will support 2021 - probably whenever 2021 LTS comes out
no wait i lied, I guess you can edit it in realtime @safe lintel some components of mine end up throwing an error, but not all 🤔
ok cool, because being able to use LOD with hybrid renderer would help me a lot
Oh it's out!?
ty ty
Documenting all issues with 0.50 i come across here: https://forum.unity.com/threads/issues-with-0-50.1253973/
i've spent 8 hours today updating my own libraries + still in progress of work and i've run into a lot of stuff
ugh want to update but I was just beginning to start a major transition from mecanim to animation after more or less figuring out how to do everything I think I need from it
all the profiling stuff looks really handy too
i was intentionally not touching animation because i was expecting big changes and improvements
i wasn't expecting them to just cut it though 😐
yeah i was planning on just gritting my teeth to need to redo stuff, not that it would be dropped
ugh cant they just go back to experimental releases? whole thing feels like its already hit 1.0 unofficially in the sense it feels like they are locking things down
1.0 wont feature any new packages or features barring this "adaptive game architecture" which kinda sounds like marketing buzzwords for investors rather than something tangibly useful
I also wish it were someone from the animation team who answered, im still not satisfied with that answer
or joachim
Wow, look at all that. When it comes to unity 2021 later, I'm gonna have to play with authoring more. I doubt I'll truly be able to entity-authoring-ize everything seamlessly, but it would help to potentially get a lot more critters on the screen without breaking the player's computer (Or re-architecting the entire game)
Also amped about Hybrid 2- I wanted to have distant objects use Entities since they were just a mesh that stayed put, but I didn't want to write my own LOD system (retopo is a bit above my pay grade), so I'm grateful that that issue may be out of the way soon.
positive news is the old runtime ui toolkit package in 2020.3.30 appears to place nicely with entities so you can have entities + runtime ui toolkit without 2021.2 to tide you over until entities 0.51 comes out
Oh nice.
have a bunch more, just haven't got around to writing them up yet
I'm still more or less at a loss on how to allow for mods in a dots project. (How do I inject custom systems?)
I'm pretty sure I read that before and it's like for burst only. How're you going to get entity queries etc into the code?
because you can do entity queries in burst!
but yeah you can probably load systems the old fashion way
something i'm going to be experimenting with in a few months anyway~
for now too many other things to work on
Another way might be using addressables maybe ? I know nothing about that yet and need to find a way to have more than 24h a day to explore that, but that's my best guess for now other than injected burst code
addressables can only load assets
not code
but you can make your assets change how code works though
i.e. you can expose configuration etc via addressables
so if you have a very data driven architecture then yeah, you could do a lot of things with addressables
Oh I see. Still a lot to learn. Anyway I'm off topic I guess but thanks for the hints ;)
Youhou 🎉 ! fully updated, last version of unity 2020.3.30, last package of everything. All works as before, sub-scene even works now that entities and UITK play nice together ! Still have the nested generic blob issue that I need to work out to avoid having a local copy of the entity package...
Now I can start breaking stuff 😈
i read that response to your question
i find it a bit annoying
just give us a "let us fuck it up option we know what we're doing and won't use pointers in our blobs"
i gave up with blob hash maps and have just been using a DynamicHashMap I wrote which is actually just a DynamicBuffer under the hood and manages its own memory.
been meaning to release this hash map actually
i think a lot of people would find it really useful
being able to attach a [multi]hashmap to an entity without having to manage memory
yeah
someone remind me tomorrow 😄
I would even like to be able to nest them but that's yet another level of issues...
maybe if I flatten my storage I would not need to have a nested generic type... I'll have to have a look at it tomorrow (took the day of for that ^^)
That animating thing is a head scratcher. Didn't the animation team announce forum hiatus a year ago to focus on animation stuff?
Half of the milestone post reads like an investor report :S
is this tommorow yet? 😄
cool so entities 0.5 is here 
I really hoped for a prefab solution similar to subscenes but for prefabs. This is really a missing piece when going full conversion workflow. Best case would be to have preconverted entity prefabs loadable via addressables. At least they didnt deprecate runtime prefab conversion as our current solution is a wrapper that can load and convert an addressable.
Inb4 "0.5's been here for years"
its fine I'm just going to wait for 1.0 before updating.... not
although looking at tertles post I may wait a bit before trying to update
just going by the roadmap, 1.0 may not be all that different?
stuff that does stand out to me:
save changes during runtime
new (easier?)api for handling stuff(managed?)
scene picking, more seamless dots editor
dots addressables
netcode(i dont use it so no idea if that stuff is new or not)
more/better documentation
but it leaves out core features that make an engine whole. so idk, seems to me that 1.0 wont be the game changing update that it collectively has been building up to be, or at least from my perspective
dots addressables is not on the roadmap is it?
it is, under the scene streaming and on demand asset streaming
On-demand asset streaming: the DOTS-based Addressables system provides APIs to package and deploy content that can be downloaded on-demand. This enables developers to regularly update their games with new content (character skins, weapons, etc.) without bloating the initial distribution size.
but if you look at the other windows, 50-90% of that stuff is things that are already in 0.50 already so 🤷♂️
Havent looked through 0.5, enable/disable components is not here yet?
no it's not available
I hope that "adaptive game architecture" is a huge workflow improvement and not a buzzword soup to bait investors with.
Because this looks way lackluster after so many years.
I expected much more from 1.0
tf? where you livin'?
