Questions about PlayCanvas

I’m looking at PlayCanvas for a possible 3D engine. I love Javascript as a language, which is why I want to try PlayCanvas over something like Unity.

  1. I’ve heard that using a web app for an engine is unreliable due to connection issues and data loss. Realistically, how dangerous are these concerns as a solo developer?

  2. PlayCanvas seems to export to HTML5 before it can be exported cross-platform. I’ve heard bad things about hybrid app performance, even for small games, so I’m a little bit skeptical about how PlayCanvas handles things. Could someone clarify if PlayCanvas games will still have decent performance as native apps on mobile?

  3. I’ve heard that a HTML5 game is easily hackable, because the code is client side. Is this true, and if so, is there a way around it?

-1. It’s a valid concern. If the web app does go down then it is basically impossible to continue working until it comes back up again. I tend to keep a local copy of the build and project (using scripts via the REST API) so I could theoretically continue continue working during downtime to some degree and for version control.

If you are in a different time zone to the team, then there’s also the problem to wait for the team to wake up.

-2. PlayCanvas is an engine for the web. They are designed to work within the browser, not as a native app. The same goes for any other web engine like three.js and AFrame. They won’t have the same performance as a native app even when used with a HTML5 wrapper to make it an ‘app’.

If you are looking for an engine that can also be used to build native apps, then Unity3D (which is getting some good improvements to exporting to HTML5 in v2018) and Godot (open source) should be on your list to check out.

-3. There are some ways around it (obfuscating the code via something like https://obfuscator.io/ or https://jscrambler.com/). Assets won’t be protected though. The flipside of the question would be how much do you care/how much does it matter. If a person hacks the game, who does it affect? If it only affects the player, then does it matter?

If it’s a multiplayer game or something with leaderboards, the servers should handle the validation and effectively not trust the client.

To put it another way, on all the websites you visit, shop at, post at etc are all running HTML5 and Javascript. Would you deem them to be easily hackable?

Thanks for your answers, but I’m not worried about hybrid games having the same performance as native games, I just want to know if a hybrid solution will be able to handle a 3D game without having unplayable lag.

Googling gives me vague answers like “native apps are better for performance and user experience” or “hybrid apps are faster to develop”, I’m just looking for confirmation from someone who has attempted this.

At the end of the day, it will be a 3D game running in a browser. A hybrid app is just a browser/web view. If the game runs well enough in the browser on mobile, you should expect the same if not slightly better performance as a ‘hybrid’ app.

And the answer is, it depends. What would be your definition or example be of a 3D game?

You can have a 3D game in the browser play pretty well but it depends on how complex the game is itself. For example, I wouldn’t expect to see a game like Fortnite run in the browser just yet but let’s say a game like Hitman: GO, Monument Valley, Subway Surfer should be possible.

What type of 3D game are you thinking to make?

You can also try some older 3D apps to see how they perform:
BMW: https://playcanv.as/p/RqJJ9oU9/
Just rolling: https://playcanv.as/p/opTNfffr/

That should give you some idea hopefully.

TLDR; Yes it is possible, keep expectations in check about complexity.

Edit made some edits

There is one thing that I did miss from my reply above.

3D physics does not scale very well on mobile. If possible stick to 2D physics (eg: https://playcanvas.com/project/446127/overview/p2js-integration)

I ported this title very quickly to mobile to see what performance could be like: https://www.miniclip.com/games/virtual-voodoo/en/

This used 3D physics including joints and the such and it was just about ‘okay’ in terms of performance. Playable enough and could have been better with some more thought into optimisation.

I don’t have anything fleshed out yet. I’m still working on a 2D project in another engine, so this is just a possible side project. I’m not thinking of anything ambitious, this is just an opportunity for me to learn new things and dabble with new systems I haven’t used before, like networking.

My project will definitely not use 3D physics, however, so I think I should be okay.

EDIT: What software were you using to export that title to mobile in under 10 minutes? That’s mind blowing to me.

Erm which title and where did I say 10 minutes :sweat_smile:? I need refresher in the context :stuck_out_tongue:

You said this:

And there was 15 minutes between your two posts, so I just assumed it took you roughly 10 minutes to export. Sorry if I’m dead wrong though!

Ah, sorry. I was talking about something I did before. I helped with the original game that was meant to be for desktop only and later on, was curious on how well it would do on mobile.

I forked the project, tried it on mobile, found some issues with the UI and some performance bottlenecks and had a build that was playable on mobile.

The great advantage about web based engines such as PlayCanvas and three.js and the such is that there is almost no build times. You can make a change, push it to the server and run from the browser on mobile.

Specifically with PlayCanvas, as it is all in the cloud, you can simply just refresh the ‘launch’ page on mobile and it’s ready. There’s virtually no build times to test directly on mobile.

Normally, developers don’t build the hybrid native app that often and most of the day to day testing is in the browser.

Taking the hybrid app part of the context, there is no difference between a build for mobile and build for desktop. If done right, it should be the same experience on both.

For example, try accessing this on desktop and mobile: https://playcanv.as/p/lBg2rBGR/

It’s a single build that is responsive to different input types and screen resolutions.