Overview
Description
You can create multiplayer webGL Apps with PlayCanvas and Photon (and this plugin)
You just insert this plugin for your playcanvas project, you can be ready using photon.
The plugin is supporting both photon cloud and photon server.
Demo (photon cloud 20ccu @Tokyo.Japan Region)
move…WASD shot…enter (mobile,gamepad)
demo-6window *only pc
Project overview This project is all public.
Requirement
Only PlayCanvas
Usage
- download this plugin
- upload plugin files for your game project
- app.js to become playcanvas script object app.js must be playcanvas object. INSPECTOR > SCRIPT > SCRIPTS click "PARSE"
- "SCRIPT LOADING ORDER"change You should call Photon-Javascript_SDK.js and demoloadbalancing.js before app.js </br>
- attached app.js to any object
- after parse, fill your information. If you filled "server address" of PHOTON SERVER,must be using photon server.The colum should be blank when you want to use photon cloud.
- Congratulations! You can ready to use photon
coding
if you attached app.js to ROOT object…
sendmessage
var photonobject; somescript.prototype.initialize = function(){ photonobject = this.app.root.children[0];//get root object }; somescript.prototype.update = function(dt){ photonobject.photon.raiseEvent(1, this.entity.getLocalPosition()); // send position data on Eventcode 1 photonobject.photon.raiseEvent(2, this.entity.getLocalEulerAngles()); // send angle data on Eventcode 2 };
recivemessage
var photonobject; somescript.prototype.initialize = function(){ photonobject = this.app.root.children[0];//get root object }; somescript.prototype.update = function(dt){ photonobject.photon.onEvent = function(code, content, actorNr){//callback if you recive message switch(code){ case 1: console.log(content.data[0]); // Position.x console.log(content.data[1]); // Position.y console.log(content.data[2]); // Position.z break; case 2: console.log(content.data[0]); // angle.x console.log(content.data[1]); // angle.y console.log(content.data[2]); // angle.z break; } }; };
joinroom
//in update method... photonobject.photon.onActorJoin = function(actor){//callback if Actor joined room if(actor.actorNr == this.myActor().actorNr) { //player join room } else { //other player join room } }; //if other player joined room before you join photonobject.photon.onJoinRoom = function(){ for(var i = 1;i < this.myActor().actorNr;i++){ if(this.myRoomActors()[i]){ if(!this.myRoomActors()[i].isLocal){ //loop num of players in the room } } } };
leaveroom
//in update method... PhotonController.photon.onActorLeave = function(actor,cleanup){//callback if Actor leave room if(actor.actorNr == this.myActor().actorNr) { //if player leave room } else { //other player leave room } };
Hint
///////////////Simple object sync/////////////// // 1.Generate other player object photonobject.photon.onActorJoin = function(actor){//callback if Actor joined room if(actor.actorNr != this.myActor().actorNr){ //other player join room otherobject.generate(); // Generate otherobject } }; //if other player joined room before you join photonobject.photon.onJoinRoom = function(){ for(var i = 1;i < this.myActor().actorNr;i++){ if(this.myRoomActors()[i]){ if(!this.myRoomActors()[i].isLocal){ //loop num of players in the room otherobject.generate(); // Generate otherobject } } } }; // 2. Player Script: send transform playercontrol.prototype.send = function(){ photonobject.photon.raiseEvent(1, this.entity.getLocalPosition()); // send position data on Eventcode 1 photonobject.photon.raiseEvent(2, this.entity.getLocalEulerAngles()); // send angle data on Eventcode 2 }; // 3. Other player Manager Script : recive transforms otherplayercontrol.prototype.recive = function(){ photonobject.photon.onEvent = function(code, content, actorNr){//callback if you recive message switch(code){ case 1: otherobject.setLocalPotisions(content.data[0],content.data[1],content.data[2]); break; case 2: otherobject.setLocalEularAngles(content.data[0],content.data[1],content.data[2]); break; } }; }; // 4. leave : Destroy object PhotonController.photon.onActorLeave = function(actor,cleanup){//callback if Actor leave room if(actor.actorNr != this.myActor().actorNr) { //other player leave room otherobject.destroy(); } }; ///////////////Serialize, Deserialize/////////////// somescript.prototype.send = function(){ var message = ""; message += this.entity.getLocalPosition().x + ","; message += this.entity.getLocalPosition().y + ","; . . . message += this.entity.getLocalEulerAngles().z; var oldmessage = ""; if(message != oldmessage){ PhotonController.photon.raiseEvent(1,message); oldmessage = message; } }; somescript.prototype.recive = function(){ photonobject.photon.onEvent = function(code, content, actorNr){//callback if you recive message switch(code){ case 1: var recivemes; recivemes = content.data.split(","); otherobject.setLocalPotisions(recivemes[0],recivemes[1],recivemes[2]); otherobject.setLocalEularAngles(recivemes[3],recivemes[4],recivemes[5]); break; } }; };
documentation
Photon-Javascript_SDK Client API Documentation
License
MIT License
Copyright (c) 2016 Ryotaro Tsuda
Author
ryotaro portal blog playcanvas
last update 2017-02-02 14:55:07