PlayCanvas

Fast and lightweight JavaScript game engine built on WebGL and glTF

README


PlayCanvas WebGL Game Engine


PlayCanvas is an open-source game engine. It uses HTML5 and WebGL to run games and other interactive 3D content in any mobile or desktop browser.
[![NPM version][npm-badge]][npm-url] [![Minzipped size][minzip-badge]][minzip-url] [![Language grade: JavaScript][code-quality-badge]][code-quality-url] [![Average time to resolve an issue][resolution-badge]][isitmaintained-url] [![Percentage of issues still open][open-issues-badge]][isitmaintained-url] [![Twitter][twitter-badge]][twitter-url]


Project Showcase


[Many games and apps](https://github.com/playcanvas/awesome-playcanvas#awesome-playcanvas-
) have been published using the PlayCanvas engine. Here is a small selection:
Seemore After The Flood Casino   Swooop dev Archer Flappy Bird   Car Star-Lord Global Illumination

You can see more games on the PlayCanvas website.


Users


PlayCanvas is used by leading companies in video games, advertising and visualization such as:  
Animech, Arm, BMW, Disney, Facebook, Famobi, Funday Factory, IGT, King, Miniclip, Leapfrog, Mojiworks, Mozilla, Nickelodeon, Nordeus, NOWWA, PikPok, PlaySide Studios, Polaris, Product Madness, Samsung, Snap, Spry Fox, Zeptolab, Zynga

Features


PlayCanvas is a fully featured game engine.

🧊 Graphics - Advanced 2D + 3D graphics engine built on WebGL 1 & 2.
🏃 Animation - Powerful state-based animations for characters and arbitrary scene properties
⚛️ Physics - Full integration with 3D rigid-body physics engine ammo.js
🎮 Input - Mouse, keyboard, touch, gamepad and VR controller APIs
🔊 Sound - 3D positional sounds built on the Web Audio API
📦 Assets - Asynchronous streaming system built on glTF 2.0, Draco and Basis compression
📜 Scripts - Write game behaviors in Typescript or JavaScript

Usage


Here's a super-simple Hello World example - a spinning cube!

  1. ```html
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5.     <meta charset="utf-8">
  6.     <title>PlayCanvas Hello Cube</title>
  7.     <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no' />
  8.     <style>
  9.         body {
  10.             margin: 0;
  11.             overflow: hidden;
  12.         }
  13.     </style>
  14.     <script src='https://code.playcanvas.com/playcanvas-stable.min.js'></script>
  15. </head>
  16. <body>
  17.     <canvas id='application'></canvas>
  18.     <script>
  19.         // create a PlayCanvas application
  20.         const canvas = document.getElementById('application');
  21.         const app = new pc.Application(canvas);
  22.         // fill the available space at full resolution
  23.         app.setCanvasFillMode(pc.FILLMODE_FILL_WINDOW);
  24.         app.setCanvasResolution(pc.RESOLUTION_AUTO);
  25.         // ensure canvas is resized when window changes size
  26.         window.addEventListener('resize', () => app.resizeCanvas());
  27.         // create box entity
  28.         const box = new pc.Entity('cube');
  29.         box.addComponent('model', {
  30.             type: 'box'
  31.         });
  32.         app.root.addChild(box);
  33.         // create camera entity
  34.         const camera = new pc.Entity('camera');
  35.         camera.addComponent('camera', {
  36.             clearColor: new pc.Color(0.1, 0.1, 0.1)
  37.         });
  38.         app.root.addChild(camera);
  39.         camera.setPosition(0, 0, 3);
  40.         // create directional light entity
  41.         const light = new pc.Entity('light');
  42.         light.addComponent('light');
  43.         app.root.addChild(light);
  44.         light.setEulerAngles(45, 0, 0);
  45.         // rotate the box according to the delta time since the last frame
  46.         app.on('update', dt => box.rotate(10 * dt, 20 * dt, 30 * dt));
  47.         app.start();
  48.     </script>
  49. </body>
  50. </html>
  51. ```

Want to play with the code yourself? Edit it on CodePen.

How to build


Ensure you have Node.js installed. Then, install all of the required Node.js dependencies:

    npm install

Now you can run various build options:

CommandDescriptionOutputs
|-----------------------|-------------------------------------------|----------------------------------|
`npmBuild`build\playcanvas[.min/.dbg/.prf].[mjs/js]`
`npmBuild`build\playcanvas[.min/.dbg/.prf].js`
`npmBuild`build\playcanvas.[mjs/js]`
`npmBuild`build\playcanvas.d.ts`
`npmBuild`docs`

Pre-built versions of the engine are also available.

Latest development release (head revision of dev branch):

https://code.playcanvas.com/playcanvas-latest.js
https://code.playcanvas.com/playcanvas-latest.min.js

Latest stable release:

https://code.playcanvas.com/playcanvas-stable.js
https://code.playcanvas.com/playcanvas-stable.min.js

Specific engine versions:

https://code.playcanvas.com/playcanvas-1.38.4.js
https://code.playcanvas.com/playcanvas-1.38.4.min.js

Generate Source Maps


To build the source map to allow for easier engine debugging, you can add -- -m to any engine build command. For example:

    npm run build -- -m

This will output to build/playcanvas.js.map

PlayCanvas Editor


The PlayCanvas Engine is an open source engine which you can use to create HTML5 apps/games. In addition to the engine, we also make the PlayCanvas Editor:
Editor

For Editor related bugs and issues, please refer to the Editor's repo.

[npm-badge]: https://img.shields.io/npm/v/playcanvas
[npm-url]: https://www.npmjs.com/package/playcanvas
[minzip-badge]: https://img.shields.io/bundlephobia/minzip/playcanvas
[minzip-url]: https://bundlephobia.com/result?p=playcanvas
[code-quality-badge]: https://img.shields.io/lgtm/grade/javascript/g/playcanvas/engine.svg?logo=lgtm&logoWidth=18
[code-quality-url]: https://lgtm.com/projects/g/playcanvas/engine/context:javascript
[resolution-badge]: https://isitmaintained.com/badge/resolution/playcanvas/engine.svg
[open-issues-badge]: https://isitmaintained.com/badge/open/playcanvas/engine.svg
[isitmaintained-url]: https://isitmaintained.com/project/playcanvas/engine
[twitter-badge]: https://img.shields.io/twitter/follow/playcanvas.svg?style=social&label=Follow
[twitter-url]: https://twitter.com/intent/follow?screen_name=playcanvas
[docs]: https://developer.playcanvas.com/en/api/