This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-libzt/docs/unity3d_zt_sdk.md
Joseph Henry c1ce7dc87a updated
2016-06-14 16:01:19 -07:00

2.8 KiB

Unity3D + ZeroTier SDK

Welcome!

We want your Unity apps to talk directly over a flat, secure, no-config virtual network without sending everything into the "cloud". Thus, we introduce the ZeroTier-Unity3D integration!

Our implementation currently intends to be the bare minimum required to get your Unity application to talk over ZeroTier virtual networks. As a result, we've created an API that is very similar to the built-in Unity LLAPI. It's possible that higher-level functionality could be added in the future.


Adding ZeroTier to your Unity app

Step 1: Create virtual ZeroTier virtual network

Step 2: Add plugin

  • Create a folder called Plugins in Assets
  • Place ZeroTierUnity.bundle in that folder

Step 3: Add script to some GameObject

  • Drag our ZeroTier.cs native plugin wrapper onto any GameObject

Examples

Calling ZeroTier.Init() will start the network service in a separate thread. You can check if the service is running by checking ZeroTier.IsRunning(). Then, connecting and sending data to another endpoint would look something like the following:

public void zt_sample_network_test_thread()
{
	// Prepare sample data buffer
	byte[] buffer = new byte[1024];
	Stream stream = new MemoryStream(buffer);
	BinaryFormatter f = new BinaryFormatter();
	f.Serialize ( stream , "Welcome to the machine! (from Unity3D)" );

	// Connect and send
	int error;
	Connect (0, "192.168.0.6", 8887, out error);
	Send(connfd,buffer,0, out error);
}

Finally, when you're done running the service you can call ZeroTier.Terminate()


API

The API is designed to resemble the Unity LLAPI, so you'll see a few familiar functions but with a slight twist.

  • Join(nwid): Joins a ZeroTier virtual network
  • Leave(nwid): Leaves a ZeroTier virtual network
  • AddHost(port): Creates a socket, and binds to that socket on the address and port given
  • Connect(fd, ip_address, port, out error): Connects to an endpoint associated with the given fd
  • Send(fd, buf, pos, out error): Sends data to the endpoint associated with the given fd
  • Recv(fd, buf, out error): Receives data from an endpoint associated with the given fd
  • Disconnect(fd): Closes a connection with an endpoint

Design and structure of the ZeroTier Unity OSX Bundle

XCode: New XCode project Select Cocoa bundle as target Add C linkages to external functions Build as 64bit (not universal)

Unity: Select x86_64 build target in Build Settings In new C# script asset:

[DllImport ("ZeroTierUnity")]
private static extern int unity_start_service ();

Add asset to GameObject Start ZT service


Future Roadmap

With the ZeroTier sockets API in place, higher-level functionality such as lobbies, chat, and object synchronization could easily be built on top.