Description
Changelog
Reviews (0)

Feature:

  1. Without losing type information. Need not type detection and forced typce conversion in cross end transfer,just like local parameter transfer.
  2. Integer are variable length serialization.
  3. The serialized data size is smaller than JSON text to utf8 and the native serialization method var_to_bytes().GUS is especially suitable for the serialization of structured small data transfer in multiplayer games.
  4. GDExtension plugin, high performance. You can run the EditorScript which named GUS_benchmark.gd to view the contrast between GUS, Native, and JSON.

How to use:

  1. Pass variable which without Object, OID, Callable, Signal into GUS.var_to_bytes() and get the serialized data, than send to network peer.
  2. After the remote network peer obtains the serialized data, passe it into GUS.bytes_to_var() to get the same variable as before serialization.

Be careful:

  1. Array and Dictionary should not contain Object, RID, Callable and Signal.

How to compile:

  1. Follow offical tutorial to set up you develop enviroment.
  2. Clone this repository (with submodule).
  3. You must generate bindings and build library of godot-cpp at least once. - You can use generate and build manully by steps below: a. Navigate to godot-cpp folder. b. Run command:
    scons generate_bindings=yes build_library=yes
            
    c. Now you can add generate_bindings=no build_library=no at next stage to avoid generate bindings and build library every time when compiling GUS.
    - (Recommand) Generate bindings and build library every time when compiling `GUS`, to keep the compiling condition of `godot-cpp` same as `GUS`.
    Just skip this stage and add `generate_bindings=yes build_library=yes` or ignore these command arguments.
    Don't worry, generate bindings and build library of `godot-cpp` would not take many time if the compile conditions have not change.
    
  4. Here is a little different from godot-cpp to compile GUS (of course, you can use scons to compile, too). To do some post process, I use a tool script to compile GUS. Navigate to root folder, run command as below to compile GUS:
    python build.py
     
    You can add arguments like to build godot-cpp at this stage. To learn more arguments detail, run this command.
    python build.py -h
     
    Specially:
    • If you not specify the argument target, this tool will build both target=template_debug and target=template_release.
    • If you add argument dev_build, this tool will copy and rename the built shared libraries to dist folder with replacing .dev. to . (in order to avoid edit gus2.gdextension).
  5. Now, you can get the addon which be located at dist. Notice:
    • If your use scons instead of python build_tool, you can only get dynamic library at bin folder.
    • If build for macos, its binaries will generate at dist directly.

Others

If this plugin can help you, please consider to buy me a coffee.

Benchmark 2.2.0:

null - value:<null>
    [GUS]:      1 bytes         ser 4 usec      deser 1 usec
    [Native]:   4 bytes         ser 1 usec      deser 2 usec
    [JSON]:     4 bytes         ser 5 usec      deser 3 usec

bool - value:true
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     4 bytes         ser 3 usec      deser 2 usec

bool - value:false
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     5 bytes         ser 3 usec      deser 2 usec

int1 - value:122
    [GUS]:      3 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     3 bytes         ser 3 usec      deser 1 usec

int2 - value:23611
    [GUS]:      4 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     5 bytes         ser 4 usec      deser 1 usec

int3 - value:-8016784
    [GUS]:      5 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     8 bytes         ser 30 usec         deser 1 usec

int4 - value:1783875844
    [GUS]:      6 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 0 usec
    [JSON]:     10 bytes        ser 3 usec      deser 1 usec

int5 - value:-533449183297
    [GUS]:      7 bytes         ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 1 usec      deser 1 usec
    [JSON]:     13 bytes        ser 3 usec      deser 1 usec

int6 - value:99315901321300
    [GUS]:      8 bytes         ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 0 usec      deser 0 usec
    [JSON]:     14 bytes        ser 3 usec      deser 1 usec

int7 - value:17047537962766401
    [GUS]:      9 bytes         ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 1 usec      deser 1 usec
    [JSON]:     17 bytes        ser 6 usec      deser 1 usec

int8 - value:-8838969341549745360
    [GUS]:      11 bytes        ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 0 usec      deser 0 usec
    [JSON]:     20 bytes        ser 3 usec      deser 2 usec

float - value:-105.0532
    [GUS]:      9 bytes         ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 1 usec      deser 1 usec
    [JSON]:     9 bytes         ser 10 usec         deser 1 usec

String - value:test 测试
    [GUS]:      13 bytes        ser 4 usec      deser 2 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     13 bytes        ser 5 usec      deser 2 usec

StringName - value:TestStringName
    [GUS]:      16 bytes        ser 5 usec      deser 2 usec
    [Native]:   24 bytes        ser 1 usec      deser 2 usec
    [JSON]:     16 bytes        ser 20 usec         deser 2 usec

Vector2 - value:(-423, 46.8005)
    [GUS]:      9 bytes         ser 1 usec      deser 0 usec
    [Native]:   12 bytes        ser 1 usec      deser 1 usec
    [JSON]:     17 bytes        ser 9 usec      deser 2 usec

Vector2i - value:(-423, 23611)
    [GUS]:      9 bytes         ser 2 usec      deser 1 usec
    [Native]:   12 bytes        ser 1 usec      deser 1 usec
    [JSON]:     15 bytes        ser 7 usec      deser 2 usec

Vector3 - value:(52011, -541.3327, 77441)
    [GUS]:      13 bytes        ser 1 usec      deser 0 usec
    [Native]:   16 bytes        ser 1 usec      deser 1 usec
    [JSON]:     27 bytes        ser 11 usec         deser 3 usec

Vector3i - value:(-423, 23611, 52011)
    [GUS]:      13 bytes        ser 2 usec      deser 0 usec
    [Native]:   16 bytes        ser 0 usec      deser 1 usec
    [JSON]:     22 bytes        ser 7 usec      deser 2 usec

Vector4 - value:(5211, -541.327, 7441, 1.23)
    [GUS]:      17 bytes        ser 2 usec      deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     30 bytes        ser 12 usec         deser 2 usec

Vector4i - value:(-42, 49947, 5211, 445)
    [GUS]:      17 bytes        ser 2 usec      deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     25 bytes        ser 8 usec      deser 2 usec

Projection - value:
8740.2373046875, 0, 0, 0
0, 441.044006347656, 0, 0
0, 0, 1, 0
56.6220016479492, -77.8499984741211, 0, 1
    [GUS]:      65 bytes        ser 2 usec      deser 1 usec
    [Native]:   68 bytes        ser 1 usec      deser 1 usec
    [JSON]:     110 bytes       ser 40 usec         deser 28 usec

Rect2 - value:[P: (56.622, -77.85), S: (8740.237, 441.044)]
    [GUS]:      17 bytes        ser 2 usec      deser 0 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     47 bytes        ser 15 usec         deser 3 usec

Rect2i - value:[P: (-495747255, 323484462), S: (1855859115, 474812983)]
    [GUS]:      17 bytes        ser 1 usec      deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     58 bytes        ser 11 usec         deser 2 usec

Transform2D - value:[X: (1, 0), Y: (0, -1), O: (513, 88.5)]
    [GUS]:      25 bytes        ser 2 usec      deser 1 usec
    [Native]:   28 bytes        ser 1 usec      deser 1 usec
    [JSON]:     41 bytes        ser 13 usec         deser 3 usec

Plane - value:[N: (-0.022075, 0.354495, 0.934797), D: 0.301078]
    [GUS]:      17 bytes        ser 2 usec      deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     51 bytes        ser 30 usec         deser 3 usec

Quaternion - value:(-54.55, 876, 2310, 744)
    [GUS]:      17 bytes        ser 15 usec         deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     26 bytes        ser 13 usec         deser 3 usec

AABB - value:[P: (-77.85, 8740.237, 441.044), S: (105, 50, 68)]
    [GUS]:      25 bytes        ser 2 usec      deser 1 usec
    [Native]:   28 bytes        ser 1 usec      deser 1 usec
    [JSON]:     52 bytes        ser 14 usec         deser 3 usec

Basis - value:[X: (1, 0, 0), Y: (0, -1, 0), Z: (0, 0, 1)]
    [GUS]:      37 bytes        ser 2 usec      deser 1 usec
    [Native]:   40 bytes        ser 1 usec      deser 1 usec
    [JSON]:     45 bytes        ser 13 usec         deser 2 usec

Transform3D - value:[X: (1, 0, 0), Y: (0, -1, 0), Z: (0, 0, 1), O: (513, -88.5, 105)]
    [GUS]:      49 bytes        ser 2 usec      deser 1 usec
    [Native]:   52 bytes        ser 1 usec      deser 1 usec
    [JSON]:     67 bytes        ser 16 usec         deser 3 usec

Color - value:(1, 1, 1, 1)
    [GUS]:      33 bytes        ser 2 usec      deser 1 usec
    [Native]:   20 bytes        ser 1 usec      deser 1 usec
    [JSON]:     14 bytes        ser 25 usec         deser 1 usec

NodePath - value:/root/@EditorNode@16886/@Panel@13
    [GUS]:      35 bytes        ser 5 usec      deser 4 usec
    [Native]:   64 bytes        ser 3 usec      deser 3 usec
    [JSON]:     35 bytes        ser 7 usec      deser 3 usec

Array - value:[574, -21, (-423, 46.8005), (0, 1, 1, 1), "acxx"]
    [GUS]:      62 bytes        ser 8 usec      deser 6 usec
    [Native]:   68 bytes        ser 3 usec      deser 5 usec
    [JSON]:     49 bytes        ser 60 usec         deser 7 usec

Dictionary - value:{ "k_str": "value1", "k_color": (0.9412, 0.9725, 1, 1), "k_int": 123123, "k_float": 44.886, "k_vec3": (52011, -541.3327, 77441), 532: [574, -21, (-423, 46.8005), (0, 1, 1, 1), "acxx"] }
    [GUS]:      174 bytes       ser 17 usec         deser 7 usec
    [Native]:   236 bytes       ser 7 usec      deser 6 usec
    [JSON]:     178 bytes       ser 45 usec         deser 12 usec

Empty Array - value:[]
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 2 usec
    [JSON]:     2 bytes         ser 3 usec      deser 1 usec

Empty Dictionary - value:{  }
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     2 bytes         ser 5 usec      deser 1 usec

Empty PackedByteArray - Size:0
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     4 bytes         ser 5 usec      deser 1 usec

Empty PackedInt32Array - Size:0
    [GUS]:      1 bytes         ser 3 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     2 bytes         ser 4 usec      deser 1 usec

Empty PackedInt64Array - Size:0
    [GUS]:      1 bytes         ser 3 usec      deser 0 usec
    [Native]:   8 bytes         ser 0 usec      deser 2 usec
    [JSON]:     2 bytes         ser 3 usec      deser 1 usec

Empty PackedFloat32Array - Size:0
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 2 usec
    [JSON]:     2 bytes         ser 3 usec      deser 1 usec

Empty PackedFloat64Array - Size:0
    [GUS]:      1 bytes         ser 2 usec      deser 1 usec
    [Native]:   8 bytes         ser 1 usec      deser 2 usec
    [JSON]:     2 bytes         ser 3 usec      deser 1 usec

Empty PackedStringArray - Size:0
    [GUS]:      1 bytes         ser 2 usec      deser 0 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     2 bytes         ser 3 usec      deser 1 usec

Empty PackedVector2Array - Size:0
    [GUS]:      1 bytes         ser 2 usec      deser 0 usec
    [Native]:   8 bytes         ser 1 usec      deser 1 usec
    [JSON]:     4 bytes         ser 5 usec      deser 1 usec


...(Please go to [source repo](https://github.com/Daylily-Zeleen/GUS-Godot-Universal-Serializer-2.0) to see full result.)

Changelog for version v2.1.9

No changelog provided for this version.

Reviews

GUS-Godot-Universal-Serializer-2.0 has no reviews yet.

Login to write a review.