Skip to content

Repository files navigation

Unity3d-ProtoBuf

Protobuf Interigation in unity3d + Editor window to generate C# source code from protobuf files

How To Use

  • Place proto-buf folder at root level in asset folder
  • Open ProtoBuf Editor Window Tools->ProtoBuf
  • Set field in Editor window and you are good to go, click Generate C# source code from Proto code button

set field in Editor Window image

Drag proto files in green area image

image

Example

ProtoBuf code

Model.proto

messagePlayer{requiredstringid=1;requiredint32health=2;repeatedItem items =4;}messageItem{requiredstringitem_id=1;requiredstringname=3;requiredstringdescription=4;optionalstring catalog_name =5;optionalstring catalog_image_url =6;optionalstring item_image_url =7;requireddoubleprice=9;}

client_messages.proto

import "models.proto";messageClientMessage{requiredClientMessageTypetype=22;optionalLoginUserRequest login_user_request =3;optionalAttackRequest attack_request =4;}enumClientMessageType{LOGIN_USER_REQUEST=1;ATTACK_REQUEST=2;}messageLoginUserRequest{requiredstringuser_name=1;requiredstringhashed_password=2;}messageAttackRequest{requiredint32damage=1;requiredstringtarget_id=2;}

server_messages.proto

import "models.proto";messageServerMessage{optionalServerMessageType type =24;//responsesoptionalLoginUserResponse login_user_response =1;optionalAttackResponse attack_response =2;}enumServerMessageType{LOGIN_USER_RESPONSE=1;ATTACK_RESPONSE=2;}messageLoginUserResponse{requiredint32metadata_version=1;requiredint32game_version=2;}messageAttackResponse{requiredstringplayer_id=1;requiredstringtarget_id=2;requiredfloattarget_hp_after_attack=3;}

Unity3d Source Code

Serialize & De-serialize login Request message

privatevoidLoginRequest(){// client side codevarmsg=ClientMessage.CreateBuilder().LoginUserRequest.ToBuilder().SetUserName("test user").SetHashedPassword("123456789").Build();ClientMessagebuilder=ClientMessage.CreateBuilder().SetLoginUserRequest(msg).SetType(ClientMessageType.LOGIN_USER_REQUEST).Build();// now login msg is ready to send over network to server (seralize)varloginBytes=builder.ToByteArray();// deseralizevarloginObject=ClientMessage.ParseFrom(loginBytes);Debug.Log(loginObject.Type);Debug.Log(loginObject.LoginUserRequest.UserName);}

Serialize & De-serialize login response message

privatevoidLoginResponse(){varmsg=ServerMessage.CreateBuilder().LoginUserResponse.ToBuilder().SetMetadataVersion(1).SetGameVersion(1).Build();ServerMessageloginResponseBuilder=ServerMessage.CreateBuilder().SetLoginUserResponse(msg).SetType(ServerMessageType.LOGIN_USER_RESPONSE).Build();// seralizevarloginRes=loginResponseBuilder.ToByteArray();// de-seralizevarserverMsgReceived=ServerMessage.ParseFrom(loginRes);Debug.Log(serverMsgReceived.Type);Debug.Log(serverMsgReceived.LoginUserResponse.GameVersion);}

About

Protobuf Interigation in unity3d + Editor window to generate C# source code from protobuf files

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages