Both sides previous revision
Previous revision
Next revision
|
Previous revision
Last revision
Both sides next revision
|
global:netcode [2019/01/27 20:45] Mistermind [Map Recorder] |
global:netcode [2024/01/07 06:13] Mistermind |
| |
**UFE Netcode** is the second iteration of the network system for UFE. It allows the game to run online matches in a smooth lag-free environment thanks to its native //rollback mechanics// and //deterministic physics//. The netcode also uses raw //manual tracking// to its own core variables, optimizing CPU usage (even mobiles).\\ | **UFE Netcode** is the second iteration of the network system for UFE. It allows the game to run online matches in a smooth lag-free environment thanks to its native //rollback mechanics// and //deterministic physics//. The netcode also uses raw //manual tracking// to its own core variables, optimizing CPU usage (even mobiles).\\ |
The new network options also comes with its own client/server structure (using Photon Network, UNet, Steam among others) allowing direct player connection without the use of IP. | The new network options also comes with its own client/server structure (powered by Photon Network) allowing direct player connection without the use of IP. |
| |
[[http://www.ufe3d.com/demo/ufe2/pc/UFE2.zip|PC]] | [[http://www.ufe3d.com/demo/ufe2/webgl/|WebGL]] | [[http://www.ufe3d.com/demo/ufe2/android/UFE2.apk|Android]] | |
| |
* Hit Online to search for a match (US Server) | |
* All builds are **cross-platform** | |
| |
| |
| |
{{ :global:netcode_upgrade.jpg?direct&100|}} | {{ :global:netcode_upgrade.jpg?direct&100|}} |
One of the key changes made to the code is the use of ''Fixed Point'' (Fix64), a format that replaces all uses of //float// throughout the code. This update copies all serialized Floats and Vectors to a new similar declaration.\\ | One of the key changes made to the code is the use of ''Fixed Point'' (Fix64), a format that replaces all uses of //float// throughout the code. If you are running UFE 1.x and wish to update your files without having to redo them, use this system to update all serialized Floats and Vectors to a new declaration.\\ |
To run the auto update, right click on one of your UFE files ([[global:introduction|Global]] , [[character:introduction|Character]] or [[move:introduction|Move]]) from the project tab and select "UFE 2.0 -> Update All Definitions". This will automatically assign all the new variables (including nested files).\\ | To run the auto update, right click on one of your UFE files ([[global:introduction|Global]] , [[character:introduction|Character]] or [[move:introduction|Move]]) from the project tab and select "UFE 2.0 -> Update All Definitions". This will automatically assign all the new variables (including nested files).\\ |
\\ | \\ |
[RecordVar] public bool isBroken; | [RecordVar] public bool isBroken; |
| |
void UFEFixedUpdate() { | public override void UFEFixedUpdate() { |
if (position.y > .1f) BreakMe(); | if (position.y > .1f) BreakMe(); |
} | } |
</code> | </code> |
| |
Notice we only use the //[RecordVar]// attribute to track the variables that can change during gameplay. Weight doesn't need to be tracked because it's assumed that value is persistent.\\ | Notice we only use the //[RecordVar]// attribute to track the variables that can change during gameplay. Weight doesn't need to be tracked because it's assumed that value is persistent. //[RecordVar]// variables must be public.\\ |
Also, notice we are using //UFEFixedUpdate// instead of //FixedUpdate// and //UFEBehaviour// instead of //MonoBehaviour//. This is so we can have those events deterministic.\\ | Also, notice we are using //UFEFixedUpdate// instead of //FixedUpdate// and //UFEBehaviour// instead of //MonoBehaviour//. This is so we can have those events deterministic.\\ |
An example of the auto-tracking system can be found under the projectile script: ''UFE\Scripts\ProjectileScripts.cs'' | An example of the auto-tracking system can be found under the projectile script: ''UFE\Scripts\ProjectileScripts.cs'' |
---- | ---- |
===== Network 2.0 Options ===== | ===== Network 2.0 Options ===== |
| For a detailed explanation on each option [[global:network|click here]]. |
| |
{{ :global:global_netcode.png?nolink |}} | {{ :global:global_networkoptions.png |}} |
| |
For a detailed explanation on each option [[global:network|click here]]. | ---- |
| ====== Video Tutorials ====== |
| {{youtube>OSovR17apP0?large}} |
| {{youtube>-dmVAf_cyN8?large}} |
| {{youtube>j3B-lhd8JBw?large}} |
| |
| |