Features and Restrictions in the v1.0 Release
Features and Restrictions in the v1.0 Release
- Use the uLink release included in the LODgame. It includes a critical bugfix for uStream,
not published in other uLink releases (yet). If you want to use uStream for another game
make sure to copy the included uLink.dll.
- You have to start uStream at the same time as the game server. The game server
will try to connect during 15 seconds (default uLink value that can be configured). But
most important: uStream can not cope with a game server restart. If the game server is
stopped, uStream will be stopped too.
- Multicast RPC = sending RPCs to a list of players can be used. This feature is part of
uLink 1.2 and works with and without uStream. uStream will handle this kind of network
traffic from the game server to the players (clients).
- AOI-calculations for state synch only, not AOI- RPCs (name includes a plus sign). AOI
calculations for RPC will probably be included in the next uStream release. It has top priority.
- Broadcast is done by sending RPCs to RPCMode.Others.
- The operator can configure the AOI-radius for all payers = one value.
The feature called “track radius” (different AOI for each player) is not included in uLink
1.2 or this version of uStream.
- You have to use state synch for at least one network instantiated object, otherwise
nothing will be sent to clients, not even RPCs. This is usually not a problem as long as
the game server does send state synch to the player’s character since this objects is
always inside the AOI for the player...
- Does not handle separate owner state synch. Avoid this feature in uLink.
- Tracks radius only, no bandwidth per player check or limits has been implemented (yet).
If all players enters the same small area in the game, the server will have to work very
hard when broadcasting all objects’ states to all players.
- The client needs to deactivate (or at lest not render) objects outside the tracking radius.
And the visible radius for the client need to be smaller than the area-of-interest radius
because otherwise objects would be able to disappear or appear inside the line-of-sight.
It is important that the client will be aware of objects and get state synch and RPC for
these objects a little while before they enter the the line-of-sight.
- The AOI calculations in uStream runs with a frequency. If a game has fast moving
network instantiated objects, this frequency has to be high. But if fast moving objects are
not network instantiated, like the snowballs in the Snowbox demo game, the frequency
can be a bit lower. Set the frequency value based on the fastest moving network
instantiated object.
A too high frequency will increase the CPU on the hosting server, A too low frequency
will make fast moving game objects moving towards a player appear “inside” the line of
sight for that player. Please test the game with the two fastest game objects available
moving towards each other, this is the best way to ensure that the frequency is high
enough.
- The RPC buffer is sent by uStream to new players without any AOI calculations. Every
client will be informed of all “available” objects in this way. This makes it important for
the client to keep objects outside the area of interest deactivated (at least not rendered)
until the first state synch is received. Otherwise the client would show objects outside the
area of interest standing at the wrong (initial) position.
- Buffered application RPCs will not work (yet). Only the standard internal uLink
Instantiate RPCs can be stored in the buffer and handled correctly by uStream.
Trying to remove RPCs from the buffer will not work. The buffer is handled by uStream
and can only work with uLink internal Instantiate RPCs.
- NetworkView.SetViewID() will not work. Use ulink.Network.Instantiate() or manual
viewIDs instead.
- Sending RPC from the game server to uLink.RPCMode.server will not work. Maybe it
will work after a round-trip to uStream, but this has not been tested (yet). Please avoid it
for now.
- Area of interest calculations can not be turned off completely. But the calculations will be
very fast if you set the radius to 0.
- Handovers of players is not working in this release. This means you can not transfer
a player’s server side (character) state between game servers. But P2P connections
between game servers using uLink is working and redirecting from another uLink game
server to uStream is working (without transferring any server side state).
- Player UDP ports starts at 22000. This is not configurable at the moment. The firewall
of the server needs to be open for UDP port range 22000 to (22000 + max number of
players).
- The default value for maximum number of players is 1000. uStream will send a uLink error
code with connection denied to player nr 1001 when he tries to connect. This max value
is configurable in the config file for uStream. The true maximum number of players is the
number of available ports on the server, since every player gets a unique port number
on the server. On a “clean” dedicated server there are around 65000 free ports, but this
extreme number of players has not been tested...
- uLink_OnConnectedToUStream() does not exist in uLink 1.2. It will be included a future
uLink version. For now, uStream game server developers will have to cope with using
uLink_OnConnectedToPikkoServer(). uStream is not PikkoServer, so this will of course change in future versions on uLink.
Planned Future Features
We are planning to remove all the restrictions listed above and in addition we have a few
planned features listed here.
- Layers. Will make it possible to separate teams, invisible characters and fast moving
objects. Another use case for layers is the radar image or a mini-map.
Every player is “listening” to one or more layers. Every layer can have a unique value for
update interval and a different aoi_calculation_interval_ms and area_of_interest_radius.
- Two or maybe three different AOI-radius. One for close objects that will be updated with
a high frequency, an second for nearby objects with a lower update frequency and a
third with a very low update frequency.
- Linux release. Probably after the Unity game server and uLink will be officially released
on Linux.
- Script the start of uStream from within the game server. Then it will be possible to write a
Start() method in a script in the cell server that start uStream). This will make it easier to
start the game server that needs uStream from a boot script in Windows or from uZone.
- Widows installer and exe-file for starting. Remove start.bat.