C# has built-in events and they work fine in Unity projects. End of story, right? Not so fast! Have you ever wondered why the Unity API doesn’t have any C# events in it? Or why Unity made their own UnityEvent
class for UGUI? Maybe there are some valid reasons to avoid C#’s events. Today’s article discusses an alternative with some serious upsides. Read on to learn more!
Posts Tagged delegate
There’s no question that the for
loop is a good idea, but events are much more complex. They’re enshrined into C# by the event
keyword, but not everything about them is good. Today’s article shows some considerations you should take into account when deciding whether or not to use an event. Bonus: it includes some little extension methods to make using events and delegates easier!
By request, today’s article follows up on my Unity Function Performance article from a year and a half ago using Unity 5.0. It adds on GameObject.SendMessage
and virtual
functions to get a more complete picture of how various function calls in Unity perform. Of course it runs these tests using Unity 5.4 to see if there have been any changes in the engine. Read on for the results!
Iterator functions and their ability to yield return
values then continue on really come in handy for a variety of situations. Unfortunately, they come with some pretty serious performance and garbage creation drawbacks. So today’s article explores alternatives in various forms of callbacks: delegates, interfaces, and classes. Can they perform better than iterator functions? Can they avoid garbage creation? Read on to find out!
Callbacks are a mainstay of the real-time games and apps we build in Unity. We’re constantly writing asynchronous code for every operation from walking a character to a destination to making a web call. It’s really convenient for these functions to “call back” and report their status so we know how the operation is going. Unfortunately there are also a lot of dangers that come along with this. Today we’ll look into the surprisingly large number of ways you can “call back” in C# and some of the ways you can get burned doing so.
Today’s article takes a break from the iterator series to investigate an interesting anomaly with the List.ForEach
function: it’s surprisingly fast! So fast that it’s actually competitive with regular old for
, foreach
, and while
functions. How can it be so fast when it has to call a delegate that you pass it for every single loop iteration? Read on for to find out!
In reading others’ C# code I consistently see some programmers call delegates like a function—del()
—and others use the Invoke
method of the Delegate
class: del.Invoke()
. Is there any difference between the two? Is one better than the other? Today’s article finds out!
Unity’s garbage collector can be disastrous to our games’ framrates when it runs so we’d best not incur its wrath. We’ve seen that foreach
loops usually create garbage, so the natural followup question is “what other language features create garbage?” Events and delegates are extremely handy features of C#. They serve as the function pointers and Function
objects of the language. They replace signals and slots and allow for flexible callbacks. But a lot of what they do is behind the scenes. Are they creating garbage back there? Today’s article puts them to the test to see if creating and calling delegates and events creates any garbage. Read on to find out!
C# delegates can be used like function pointers. Assign it once and you don’t have to use an if
over and over. But is the overhead of the delegate worth it? Today’s article puts it to the test to see if this a valid performance boost versus just using an if
over and over. Read on to see if a delegate is worth your time.
C#’s support for closures includes lambdas ((a, b) => a+b
) and delegates (delegate(int a, int b){return a+b;}
). They’re extremely handy tools that many developers use on a daily basis. For example, it’s really convenient when using List.Find
to pass in a lambda like item => item.Id == IdToFind
. They also make great callbacks for asynchronous operations. However you’re using them, understanding how they work behind the scenes will help you understand how they behave and give you insight when optimizing your code. Today’s article delves into the topic to gain just this understanding, so read on to learn some more about closures!