Hello Alex, how are you?
So, both Start and Update methods don’t return anything, it just runs the block of code inside it. For example, you can make a method that returns a int type like:
int subtract(int a, int b)
{
Return (a-b);
}
and then use it as an regular int just like:
if (subtract(myint, 5) >= 0)
{DoSomething();}
This is an example of a method that return an int, both Start() and Update() don’t return any type, they are just methods that the engine call in some event situations, that is why they are void.
Once the script is initialized in the runtime, it will run the Start() method one time, and for every following frame it will run the Update() method once, that is why the Update() isnt called in a fixed amount of time, it will vary depending on how long it took to calculate the frame. FixedUpdate() is a event method that is called a fixed amount of times each second (it doesn’t depend on the frames per second), you can change it under time in the project settings (default value is 1/50).
You don’t have to call any of those methods in your scripts, only if you need something running in those respective events.
FixedUpdate() is better for handling physic calculations (the engine runs things like velocity, animations etc in the FixedUpdate()), and everything else can be added to the regular Update() since this is updated every frame