UnityHTTPServer is a simple C# http server implementation works under Unity3D.
- Simple file serve via Http
- Simple route WebAPI in Unity3D
- Invoke a C# method in Unity3D via Http request
- Currently, only support
GETHttp method
- iOS (test pass)
- OSX Editor
- OSX Player
- Windows Editor
- Windows Player
- others is waiting for test
Simply add a GameObject in your scene and add UnityHTTPServer component.
Port: the port you wish to serve the http.
Save Folder: the wwwroot for your files wish to serve via http.
Use StreamingAssetsPath: Toggle this bool will use StreamingAssetsPath to replace the Save Folder.
Buffer Size: The buffer for your content to serve via http.
Controller: The MonoBehaviour instance to run your WebAPI method.
// Create the Http server instance.// Server will automatically start once it created.// replace {} part with your parametersmyServer=newSimpleHTTPServer({your path},{your port},{your controller},{your bufferSize});// Stop the server, remember to call the Stop() method while the application is close.myServer.Stop();Just simply make sure your files is under the Save Folder. Then enter PlayMode in Editor.
Example: (Use StreamingAssetsPath is on)
Result:
When use UnityHTTPServer Component, create a MonoBehaviour and make sure the MonoBehaviour has an instance in scene, it is recommend to attach the MonoBehaviour on same GameObject with UnityHTTPServer.
Then make the MonoBehaviour to the reference on UnityHTTPServer's Controller field.
On the screenshot we use TestController.cs as an example.

Usually a web api will return a json string as the result, you need to implement the Json Serialize function yourself.
The simplest way is using Unity's JsonUtility (with some limitation). Here is the example:
// Create a http server instance.myServer=newSimpleHTTPServer(GetSaveFolderPath,port,controller,bufferSize);// Regist the OnJsonSerialized delegate to your json implemention.// Here, we use the Unity's JsonUtility.myServer.OnJsonSerialized+=(result)=>{returnJsonUtility.ToJson(result);};You can invoke a void method in target MonoBehaviour via add your method name on url.
Example: (In TestController.cs)
// Url: http://127.0.0.1:{port}/SimpleMethod// change {port} to the port set on your UnityHttpController componentpublicvoidSimpleMethod(){Debug.Log("Cool, fire via http connect");}Result:
In theory, you can return any object which supported by json serialize. Example: (In TestController.cs)
// Url: http://127.0.0.1:{port}/CustomObjectReturnMethod// change {port} to the port set on your UnityHttpController componentpublicReturnResultCustomObjectReturnMethod(){ReturnResultresult=newReturnResult{code=1,msg="testing"};returnresult;}//Mark as Serializable to make Unity's JsonUtility works.[System.Serializable]publicclassReturnResult{publicstringmsg;publicintcode;}Result:
You can also add query parmeter in your Url
Example: (In TestController.cs)
// Url: http://127.0.0.1:{port}/CustomObjectReturnMethodWithQuery?code=1111&msg=wow_it_is_so_cool// change {port} to the port set on your UnityHttpController componentpublicReturnResultCustomObjectReturnMethodWithQuery(intcode,stringmsg){ReturnResultresult=newReturnResult{code=code,msg=msg};returnresult;}//Mark as Serializable to make Unity's JsonUtility works.[System.Serializable]publicclassReturnResult{publicstringmsg;publicintcode;}Result:
You can invoke a method which return an array result.
Note: The supportion of array is based on your Json Library, in case I use the LitJson library, the array return supportion will break while using Unity's JsonUtility
// A example while using LitJson as the Json LibrarymyServer.OnJsonSerialized+=(result)=>{returnLitJson.JsonMapper.ToJson(result);};Example: (In TestController.cs)
// Url: http://127.0.0.1:{port}/SimpleStringMethod// change {port} to the port set on your UnityHttpController componentpublicstring[]SimpleStringMethod(){returnnewstring[]{"result","result2"};}// Url: http://127.0.0.1:{port}/SimpleIntMethod// change {port} to the port set on your UnityHttpController componentpublicint[]SimpleIntMethod(){returnnewint[]{1,2};}Result:
SimpleStringMethod
SimpleIntMethod
- Multi controller support
- Correct error handle (eg. return 500 http code)
- Other Http method support? (eg. POST, HEAD)
- Https?







