Everyday Unity – Telegram
Everyday Unity
1.11K subscribers
157 photos
59 videos
42 files
2.36K links
A game developer and tech lead in a top grossing company posting Unity, programming, and gamedev related stuff that I find interesting
Website: https://gamedev.center

Most used tags are:
#performance
#shader
#interview

Author: @alexmtr
Download Telegram
The Weak Event pattern

Events in C# are a powerful mechanism for decoupling components and enabling a publisher/subscriber model. However, they have a significant drawback: the publisher holds a strong reference to the subscriber, and this can cause memory leaks. This article describes a pattern for implementing weak events in C#.

https://steven-giesel.com/blogPost/675b75fc-2c1b-43da-9ff8-42962ca8159b

#weakevent #observer
🔥3👍1
Godot is not the new Unity - The anatomy of a Godot API call

A very long, but very interesting read about calling unmanaged code in Unity and Godot.
Tbf Idk if the removal of Unity noscript language back in 2017 was a result of a similar issue Godot has now, but anyway Godot has a long road to achieve what the Unity team has done for noscripting performance and working with unmanaged code.

https://sampruden.github.io/posts/godot-is-not-the-new-unity/

#godot #performance
👍2
10 minutes to review the quality of any Unity project

A good read, and I've never seen a post regarding this topic before. It doesn't seem to come in handy for most developers in terms of real reviews of many projects, but it's definitely helpful to establish your own rules and guidelines for your projects.

https://medium.com/@wondrous_aqua_toad_341/10-minutes-to-review-the-quality-of-any-unity-project-6f7ce78f26fd

#review
👍6
Premature Optimization

The main point which I also always repeat in my own blog posts: profile first. Optimization might not even be needed in the first place. And without the baseline you can't even tell whether changes improved the performance or not.

https://youtu.be/tKbV6BpH-C8

#optimization
👍5
Everyday Unity
The Cost Of async/await On The Build Size Knowing how async/await works under the hood, I was interested in understanding the impact on the build size, as the compiler does its magic and for each async method generates the state machine consisting of hundreds…
In my blog post about the build size I used the build option Faster(smaller) builds to greatly reduce the size of code generation with IL2CPP.
In our company we had a chance to have a meeting with Unity engineers. At that time I asked what does this build option do under the hood and what drawbacks it has. But got no answer. Now the answer is in the docs:

When the “Faster (smaller) builds” setting is enabled only the single fully sharable version of generic code is compiled. This reduces the number of methods generated, reducing compile time and build size, but comes at the expense of runtime performance.

https://docs.unity3d.com/Manual/ScriptingRestrictions.html

#generic #genericsharing
👍8
Leveraging SerializeReference for Flexible Commands in Unity Game Development

There commands are bound via the inspector. In one of our previous projects, we employed a similar approach, but the commands were bound to events in the code within the composition root through a DI container.

https://medium.com/@gbrosgames/leveraging-serializereference-for-flexible-commands-in-unity-game-development-614e336b03b9

#command
👍2🔥2
Everyday Unity
Trying out new Unity API: BatchRendererGroup The goal of this post is to look at the new BatchRendererGroup API (BRG) and implement the minimal BRG example, so it is easier to understand how to work with it. Then gradually add more complex functionality.…
BatchRendererGroup sample: Achieve high frame rate even on budget devices

I wrote my own post about BRG and creating a sample year and a half ago when the documentation page was still empty. It took quite a while to figure out how to work with BRG by experimenting with code.
After some time, they filled up the documentation, but I still found it insufficient to get started with BRG without much effort. It's great to see a better sample and a very detailed blog post about it, even with such a significant delay after the initial announcement of BRG.

You can also check my blog post if you haven't yet, but the new one by Unity is more relevant now with more details and a bigger sample.

https://blog.unity.com/engine-platform/batchrenderergroup-sample-high-frame-rate-on-budget-devices

Repo: https://github.com/Unity-Technologies/brg-shooter

My sample: https://github.com/AlexMerzlikin/Unity-BatchRendererGroup-Boids/

My post: https://gamedev.center/trying-out-new-unity-api-batchrenderergroup/

#brg #instancing
👍4
Unity Rendering Paths: Forward vs. Deferred Rendering

This is a well-rounded comparison of rendering techniques, although Forward+ is missing from the equation which eliminates the light count restriction. So would be great to see a deeper comparison there.

https://researchandprogram.blogspot.com/2023/10/unity-rendering-paths-.html?m=1

#rendering
👍6
A simple example of using IEnableableComponent

It's a replacement for tag components. Since Unity ECS stores data in chunks based on their archetype, tag components are considered a lot less performant due to structural changes when they are removed or added.

https://coffeebraingames.wordpress.com/2023/08/21/a-simple-example-of-using-ienableablecomponent/

Read more about archetypes and how entities are located in memory: https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/concepts-archetypes.html

#dots #ecs
👍3💯2🔥1
DialogueGraph: Open-source node-based tool for developing branching conversation trees

https://github.com/TeodorVecerdi/DialogueGraph

#dialogue
👍8
OutlineFx: Simplified Outline for Unity Urp with 2D support

The outline effect is achieved in the following way: selected objects are first rendered into a texture.
Then, the edges of objects on this texture are drawn over the main texture.
Optionally, the outline can be drawn in a separate texture and then used through a shader.

https://github.com/NullTale/OutlineFx

#outline #outline2d
👍3
Porting Unity to CoreCLR | Unity Blog

I love this series where Unity engineers dive deep into details of the engine. The post slightly explains how memory allocation is managed by a garbage collector. Unity currently uses the Boehm GC, which is conservative and non-moving. In contrast, .NET CoreCLR employs a precise, moving garbage collector, which offers better performance. The Unity engine and editor code were initially developed based on the Boehm garbage collector's requirements. To use the CoreCLR GC, several modifications are required, including changes to custom marshaling tools used by Unity, such as the bindings generator and the proxy generator. Unity is gradually transitioning to the new representation of references to managed objects in the unmanaged code to ensure a GC-safety in the engine. This work will enable the use of the CoreCLR GC, which should improve performance and efficiency by minimizing the GC's involvement in native code. There are still no release dates tho

https://blog.unity.com/engine-platform/porting-unity-to-coreclr

#gc #coreclr
👍6🔥1
Introducing the new URP 3D Sample: The beta release of the new URP Sample Scene

I ran the first scene, and after it completely loaded I got a 2+ seconds freeze on my relatively powerful machine (i7 13th gen, 4070 Ti). But it's a beta, right?
Anyway looks pretty impressive for URP, and is definitely worth checking.

https://github.com/Unity-Technologies/URP3DSampleScenes

#urp #sample
👍2