
PlayCanvasã¯ãã€ã³ã¿ã©ã¯ãã£ããªWebã¢ããªã±ãŒã·ã§ã³ãéçºããããã®èŠèŠçãªãã©ãããã©ãŒã ã§ãã PlayCanvasã䜿çšããŠéçºããããã¹ãŠã®ãã®ã¯ãHTML5ã®æ©èœã«åºã¥ããŠããŸãã PlayCanvasã¯Webã¢ããªã±ãŒã·ã§ã³ã§ããã€ãŸããç¹å¥ãªããã°ã©ã ãã€ã³ã¹ããŒã«ããå¿ èŠããªããäžçäžã®ã©ãããã§ãã€ã³ã¿ãŒãããçµç±ã§ãããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã äœæãããã¹ãŠã®ãããžã§ã¯ãã¯ãã¯ã³ã¯ãªãã¯ã§ãããã¯ãŒã¯ã«é 眮ã§ããŸãã
PlayCanvasã®ã¯ãŒã¯ãããŒ

PlayCanvasã®ãã¹ãŠã¯ãããžã¥ã¢ã«ãšãã£ã¿ãŒããå§ãŸããŸãã
ç»é¢ã®å·ŠåŽã«ã¯ããšã³ãã£ãã£éå±€ã®ã»ã¯ã·ã§ã³ããããŸãã 空ã®ãšã³ãã£ãã£ãšãã«ã¡ã©ãã©ã€ããããªããã£ãããªãŒãã£ãªãã€ã³ã¿ãŒãã§ã€ã¹ãããŒãã£ã¯ã«ã·ã¹ãã ãã¢ãã«ãªã©ã®å®çŸ©æžã¿ã®ãšã³ãã£ãã£ã®äž¡æ¹ãäœæã§ããŸãã éå±€ã«è¿œå ããããšã³ãã£ãã£ã¯ãèªåçã«ã·ãŒã³ã«å ¥ããŸãã
ç»é¢ã®äžå€®ã«ã¯ã·ãŒã³ãšãã£ã¿ãŒããããŸãã ããã§ããšã³ãã£ãã£ã®é 眮ãå€æŽããç·šéãããšã³ãã£ãã£ãéžæããŠãã¢ããªã±ãŒã·ã§ã³ã·ãŒã³ã®å€èŠ³ã衚瀺ã§ããŸãã
ã·ãŒã³ãšãã£ã¿ãŒã®äžéšã«ã¯ãã¢ã»ããã»ã¯ã·ã§ã³ããããŸãã ã¢ã»ããã¯ãã¹ãŠããšã³ãã£ãã£ã«è¿œå ã§ãããã¡ã€ã«ããã³ãã®ä»ã®èŠçŽ ã§ãã PlayCanvasã«ã¯ããã©ã«ããŒãCSSããã¥ãŒãããããHTMLãJSONããããªã¢ã«ãã¹ã¯ãªãããã·ã§ãŒããŒãããã¹ãã®ããã€ãã®ã¿ã€ãã®ã¢ã»ããããããŸãã ãããã¯ãã¹ãŠç°ãªãç®çãæã£ãŠããŸãã
ãããŠæåŸã«ãç»é¢ã®å³åŽã«ãšã³ãã£ãã£ããããã£ã»ã¯ã·ã§ã³ããããŸãã ãšã³ãã£ãã£ã«ã¯ãå Žæãå転ãã¹ã±ãŒã«ãååãã¿ã°ãè¿œå ãããã³ã³ããŒãã³ãã®èšå®ãªã©ã®åºæ¬çãªããããã£ããããŸãã ããããã£ã¯ãè¿œå ããããšã³ãã£ãã£ã«ãã£ãŠç°ãªããŸãã ããšãã°ããã¥ââãŒããè¿œå ãããšãã¿ã€ãããããªã¢ã«ãã·ã£ããŠèšå®ãã¬ã€ã€ãŒãã°ã«ãŒãã®ããããã£ãèšå®ãããŸãã
PlayCanvasã§ã¢ããªã±ãŒã·ã§ã³ãšã²ãŒã ãéçºããäžè¬çãªããã»ã¹ã¯ãããã次ã®ãšããã§ãã
- å¿ èŠãªè³ç£ãè¿œå ããŸãã äŸïŒã¢ãã«ãçŽ æããªãŒãã£ãªããããªã
- ã·ãŒã³ã®ç°å¢ãäœæããŸãã äŸïŒéœåžã家ã颚æ¯ã
- ã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ãè¿œå ããŸãã äŸïŒãã¬ãŒã€ãŒãšãã®æµã
- ã¹ã¯ãªããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããžãã¯ãè¿œå ããŸãã
- ã²ãŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ããªã³ã©ã€ã³ã§å ¬éããŸãã
PlayCanvasãšJavaScript

PlayCanvasã®ã²ãŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«ããžãã¯ãè¿œå ããããã«ãç¹å¥ãªã³ã³ããŒãã³ãïŒã¹ã¯ãªããããããŸãã ã¹ã¯ãªããã¯ã°ããŒãã«ã«ããããšãã§ããŸãããã®å Žåãã¹ã¯ãªããã¯ã·ãŒã³éå±€ã®ã«ãŒããšã³ãã£ãã£ã«è¿œå ããå¿ èŠããããŸãã ããŒã«ã«ã¹ã¯ãªããã¯ãéå±€å ã®ãšã³ãã£ãã£ïŒã²ãŒã ãã£ã©ã¯ã¿ãŒã®ã¢ãã«ãªã©ïŒã«çŽæ¥è¿œå ãããŸãã ãã¹ãŠã®ã¹ã¯ãªããã¯JavaScriptã§èšè¿°ããå¿ èŠãããããã çµå±ã®ãšããããã©ãŠã¶ã§ã²ãŒã ãäœæããŸãã ES6ã®æ奜家ã¯ãæ®å¿µãªãã倱æããã§ãããããªããªãã PlayCanvasã¯äŸç¶ãšããŠES5ã䜿çšããŠãããES6ããäœããã®æ§é ãèšè¿°ããããšãããšãçµã¿èŸŒã¿ã®ãªã³ã¿ãŒãèªããç«ãŠãŸãã äžè¬ã«ãã¹ã¯ãªããã®æ§é ã¯æ¬¡ã®ãã³ãã¬ãŒãã§ãã
var NewScript = pc.createScript('newScript'); NewScript.attributes.add('someString', { type: 'string', default: 'any', title: 'Some string' }); NewScript.prototype.initialize = function() { this.startPosition = this.entity.getPosition(); }; NewScript.prototype.update = function(dt) { this.entity.setLocalPosition(this.newPosition); }; NewScript.prototype.calcaulateNewPosition = function() { this.newPosition = this.startPosition.dot(pc.Vec3.ZERO) };
ããã§ãæ°ããã¹ã¯ãªãããäœæããŸãã 圌ã¯2ã€ã®äž»èŠãªã¡ãœãããååŸããŸããåæå-ãšã³ãã£ãã£ãã·ãŒã³ã«è¿œå ããããšãã«åŒã³åºãããŸãã æŽæ°-åã¬ã³ããŒãã¬ãŒã ãåŒã³åºãããŸãã æŽæ°ã®dtãã©ã¡ãŒã¿ã¯ããã«ã¿æé-æåŸã®ãã¬ãŒã ãæç»ãããç§ã®ïŒ ã§ãã ããã¯ã次ã®äŸã§ããããããŸãããªããžã§ã¯ãã1ç§360床å転ãããå¿ èŠããããŸãã 次ã®ã³ãŒããèšè¿°ããŸãã
this.entity.rotate(0, 360 * dt, 0);
æåŸã«ãæåŸã®calcaulateNewPositionã¡ãœããã¯ã«ã¹ã¿ã ã¡ãœããã§ãããã³ãŒãã®æ§é åã«äœ¿çšã§ããŸãã
ãŸããã³ãŒãã«ã¯ãæ°ããå±æ§someStringãè¿œå ããå¯èœæ§ããããŸãã ãã®èšèšã§ã¯ããšãã£ã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠããã«æå®ã§ãããã©ã¡ãŒã¿ãŒãå®çŸ©ã§ããŸãã éžæãããšã³ãã£ãã£ã«ã¹ã¯ãªãããè¿œå ãã ã解æããã¿ã³ãã¯ãªãã¯ããŸãã ã¹ã¯ãªããã«å±æ§ãæã€æ§é ãããå Žåãå€ãå ¥åããããã®ç¹å¥ãªãã£ãŒã«ãã衚瀺ãããŸãã ãã®å€ã¯ããã©ã«ãå€ãäžæžãããŸãã PlayCanvasã¯ãã¹ã¯ãªããã®ããŸããŸãªçš®é¡ã®å±æ§ããµããŒãããŠããŸãã 詳现ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ã¹ã¯ãªããã¯ãçµã¿èŸŒã¿ã®ãšãã£ã¿ãŒãšã䟿å©ãªIDEã®ããŒã«ã«ãã·ã³ã®äž¡æ¹ã§ç·šéã§ããŸãã ãã ãã2çªç®ã®å Žåã¯ãPlayCanvasãšãã¢ã«ãªã£ãŠãããµãŒããŒãäžããå¿ èŠããããããèšå®ããããå¿ èŠããããŸãã
ããŠãPlayCanvasã®äž»ãªæ©èœã説æããã®ã§ãPlayCanvasã§ããŒãã£ã«ãªã¢ãªãã£ã·ãŒã³ãäœæããæ¹æ³ã«ã€ããŠã話ããŸãã
ããã«äœ¿ããVââR

PlayCanvasã䜿çšãããšãããã«VRã·ãŒã³ãäœæã§ããŸãã ãããè¡ãã«ã¯ãæ°ãããããžã§ã¯ããäœæãããšãã«é©åãªãªãã·ã§ã³ïŒVRã¹ã¿ãŒã¿ãŒãããïŒãéžæããŸãã ããã§ãPlayCanvasãããã©ã«ãã§æäŸãããã®ãèŠãŠã¿ãŸãããïŒãã¿ãã¬ïŒç§ãã¡ãæãã»ã©ã§ã¯ãããŸããïŒã
ã·ãŒã³ãå®è¡ãããšã3ã€ã®ãã¥ãŒããç®ã®åã«è¡šç€ºãããŸãã ãããã泚èŠãããšïŒæ³šèŠã³ã³ãããŒã«ïŒãé²è¡ç¶æ³ããŒãèµ·åãããã¥ãŒããéæã«ãªããŸãã PCçšã®ã³ã³ãããŒã©ãŒãŸãã¯WASDã³ã³ãããŒã«ã¯ãããŸããã å®éããã®ç®¡çã§ã¯ãããã©ã«ãã§ã¿ããã€ãã³ãã®ãµããŒããããããã段ããŒã«çšã®å°ããªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
å®éãã¹ã¿ãŒã¿ãŒVRãããã®ã³ãŒãã¯ããŸãæ§é åãããŠãããããã®äžéšã¯ãã®ã·ãŒã³ã®ããžãã¯ã«çŽæ¥çµã³ä»ããŠããŸãã ã€ãŸããç¬èªã®åŠçãè¡ãã«ã¯ããã¹ãŠãã©ã®ããã«æ©èœããããææ¡ããããŒãºã«åãããŠèª¿æŽããå¿ èŠããããŸãã æ©èœãåå¥ã«æ¥ç¶ã§ããAPIã¯ãããŸããã
ããã§ã¯ãã¹ã¿ãŒã¿ãŒããããã¡ã€ã«ã調ã¹ãŠãäœã«è²¬ä»»ãããã®ãââããããèªåã®ç®çã«ã©ã®ããã«äœ¿çšã§ããã®ãã調ã¹ãŠã¿ãŸãããã
- look-camera.js VRãã£ã¹ãã¬ã€ãšã«ã¡ã©ã®ãã¢ãªã³ã°ãæ åœããããžãã¯ã¯æ¬¡ã®ãšããã§ãã ããã«ãmouse-controller.jsãŸãã¯touch-controller.jsã䜿çšããŠãPCãŸãã¯æºåž¯é»è©±ããã«ã¡ã©ãå¶åŸ¡ããããã«ããããšãšãŒãéä¿¡ã§ããŸãã
- selector-camera.js ã ãã®ãã¡ã€ã«ã«ã¯ãèŠç·å¶åŸ¡ãå®è£ ããããã®é ãããããžãã¯ããããŸãã çžäºäœçšã«äœ¿çšã§ããåèŠçŽ ã¯ãselectorcameraïŒaddã€ãã³ããä»ããŠè¿œå ããå¿ èŠããããŸãã ããã«ããã®AABBã¯æåã§èšç®ããå¿ èŠããããŸããŸããããã§ã¯å ç·ã®ããžãã¯ïŒray \ raycasterïŒãèŠã€ããããšãã§ããŸãã PlayCanvasã«ã¯ç¹å¥ãªãªããžã§ã¯ãããããŸãthis._ray = new pc.RayïŒïŒ; BoundingBoxãŸãã¯BoundingSphereãšã®äº€å·®ç¹ãèŠã€ããæ¹æ³ãç¥ã£ãŠããŸãã
- web-vr-ui.js VRãã°ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ãè¿œå ããã ãã§ãã ççŽã«èšã£ãŠãããã¯ããŸããšã¬ã¬ã³ãã§ã¯ãããŸããã ãã®ã¹ã¯ãªããã§ã¯ããã¹ãŠã®ã¹ã¿ã€ã«ãšHTMLãé©åã§ãã ã©ãããããã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®2Dç»é¢ã«ã¯ç¬èªã®å¶éãããããã¿ã³ã¯å³äžé ã«å³å¯ã«é 眮ããå¿ èŠãããããã§ãã
- box.jsã ããã§ã¯ããã¥ãŒãã«é¢é£ä»ããããŠãããã¹ãŠã®ããžãã¯ïŒé²è¡ç¶æ³ããŒã®ç®¡çãªã©ïŒãèŠã€ããŸãã
äžèšãããããããã«ãéå§VRãããã«äŸåãããã®ã¯ããŸããããŸããã ã§ããã®ã¯æ®µããŒã«ã®ã¢ããªã±ãŒã·ã§ã³ã ãã§ããããã¯ãç§ã®æèŠã§ã¯ãããŸãèå³æ·±ããã®ã§ã¯ãããŸããã段ããŒã«ã¯ãVRã䜿çšããéåžžã®çµéšãæãã€ããªãäžçš®ã®ããã¡ãã ããã§ãã Oculus GoãOculus RiftããŸãã¯HTC Viveã䜿çšããŠãä»®æ³çŸå®ã«æ¬åœã«æ²¡é ã§ããŸãã
次ã«ãã¢ããªã±ãŒã·ã§ã³ã«ã³ã³ãããŒã©ãŒãµããŒããè¿œå ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
VRã³ã³ãããŒã©ãŒ

å¿ èŠãªããžãã¯ã«æ¥ç¶ãããããŸããŸãªèŠçŽ ã1ã€ã®ãã¿ã³ã§ã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ã§ããããã«ãPlayCanvasããã®ã¹ãã¬ãŒãžãé©åããããšäŸ¿å©ã§ãã ããããä»æ¥ããããè¡ãããšã¯äžå¯èœã§ãã®ã§ãå¥ã®æ¹æ³ã§è©ŠããŠã¿ãŸãããã ã³ã³ãããŒã©ã®äœçœ®ãæ¯èŒããããã®ãã¹ãŠã®ããžãã¯ãèšè¿°ããªãããã«ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã䜿çšã§ããŸãã Web VR Labã®çŽ æŽãããäŸããããŸã ã èå³æ·±ãããšããããããããŸãããã³ãŒã...æªéèªèº«ã足ã骚æããŸãã å°ããªVR Tracked Controllersã·ãŒã³ããããŸã-2ã€ã®ã³ã³ãããŒã©ãŒãåããåºæ¬çãªã·ãŒã³ã§ãã ããã§ããŸã£ããåãã§ãããèŠçŽ ããããžã§ã¯ãã«åãå ¥ããã®ã«é©ããŠããŸãã
VR Tracked Controllersã·ãŒã³ãç·šéçšã«éããŸãã ãŸããã³ã³ãããŒã©ãŒã転éããå¿ èŠããããŸãã
- ã³ã³ãããŒã©ãŒãéžæããããããã£ã»ã¯ã·ã§ã³ã§ã¢ãã«ãèŠã€ããŠã¯ãªãã¯ããã¢ã»ãããšããŠååŸããŸãã
- èšå®ã«ã¯[ããŠã³ããŒã]ãã¿ã³ããããŸãããã®ãã¿ã³ãã¯ãªãã¯ããŠãã¢ãã«ãšãã¯ã¹ãã£ãããŠã³ããŒãããŸãã
- ã¢ã»ããã解åããã¢ããªã±ãŒã·ã§ã³ã«ããŒãããŸãã ãããè¡ãã«ã¯ãäžã«ããã¢ã»ãããŠã£ã³ããŠã«ãã©ãã°ããŸãã JSON圢åŒã®ã¢ãã«ãšãã¹ãŠã®ãã¯ã¹ãã£ïŒãã¹ãŠã転éããå¿ èŠããããŸãã
- ã¢ãã«ãã¢ã»ããã®ãªã¹ãã«è¡šç€ºãããŸãã ã¹ããŒãžã«ãã©ãã°ããŸãã ãããŠã圌女ã¯ãã§ã«ããã«ããŸãã å·Šã³ã³ãããŒã©ãŒãšåŒã³ãŸãããã
次ã«ããããªã¢ã«ãè¿œå ããå¿ èŠããããŸãã
- ã¢ã»ããããã«ã®[ + ]ãã¿ã³ãã¯ãªãã¯ããŠãæ°ãããããªã¢ã«ãäœæããŸãã ãããªã¢ã«ã«Controller Materialãšããååãä»ããŸãã
- ããã§ããœãŒã¹ãããžã§ã¯ããéããããã§ãã©ããã³ã°ã³ã³ãããŒã©ãŒãããªã¢ã«ãèŠã€ããŠãæ³ç·ãæŸå°ãé¡é¢åå°ãæ¡æ£ãããïŒãããïŒãªã©ããã¹ãŠã®èšå®ããããªã¢ã«ã«ã³ããŒããå¿ èŠããããŸãã
ããã§ãéå±€ããã«ã®ç¹å¥ãªè€è£œãã¿ã³ã䜿çšããŠã³ã³ãããŒã©ãŒãã³ããŒãã2çªç®ã®ã³ã³ãããŒã©ãŒã«Right Controllerãšããååãä»ããããšãã§ããŸãã
ããã§ãã¹ããŒãžäžã®ã³ã³ãããŒã©ãŒã§ãã ãããããããŸã§ã®ãšããããããã¯2ã€ã®ã¢ãã«ã«ãããããã¹ãŠãæ©èœããããã«ã¯ã¹ã¯ãªããã転éããå¿ èŠããããŸãã ããã§äœãå¿ èŠã§ãã©ã®ããã«æ©èœãããã詳ããèŠãŠã¿ãŸãããã
- vr-gamepad-manager.js-åºæ¬çã«ãå®éã®ã³ã³ãããŒã©ãŒã®äœçœ®ãšå転ãååŸããããã«ã³ã³ãããŒã©ãŒã«å¿ èŠãªãã¹ãŠã®ããžãã¯ãå«ãŸããŠããŸãã ããã§ã¯ãOculus GoãGear VRãDaydreamãªã©ã®3-dofãã«ã¡ããã®åœãšã«ãã®ããžãã¯ãå®è£ ãããŠããŸãã _updatePadToHandMappingsã¯ãããã§ã³ã³ãããŒã©ãŒãèŠã€ããŠã³ã³ãããŒã©ãŒã«ãããã³ã°ããŸãã å®ã³ã³ãããŒã©ãŒãšä»®æ³ã³ã³ãããŒã©ãŒãäžèŽããããã¹ãŠã®ããžãã¯ã¯ã_poseToWorldé¢æ°ã«ãããŸãã å®éãããã§ã¯ããŒã¿ã¯ã³ã³ãããŒã©ãŒèªäœã®ã€ã³ã¹ã¿ã³ã¹ïŒpadPose.positionãpadPose.poseRotationïŒãä»ããŠWebXR APIããååŸãããŸãã 以äžã®ããžãã¯ã¯ãããŸããŸãªã¿ã€ãã®ããã€ã¹ã«é¢é£ãããã¥ã¢ã³ã¹ãæ åœããŸãã ã¹ã¯ãªããèªäœã¯ã°ããŒãã«ã§ããå¿ èŠããããŸãïŒã€ãŸããéå±€ã®ã«ãŒãã«è¿œå ãããŠããïŒã
- input-vr.js-ã³ã³ãããŒã©ãŒã®ç»é²ãæ åœãããã¿ã³ãæäœããŸãã å®éããã¿ã³ãæŒãããããšãå€æããæŒããããã¿ã³ã®çªå·ãéä¿¡ããŸãã ããã€ã¹ã«ãã£ãŠãã¿ã³ãGamePad APIãç°ãªãå Žåããããããããã¯ããŸã䟿å©ã§ã¯ãããŸããããŸããOculus Goã®æåã®ãã¿ã³ãHTC Viveã³ã³ãããŒã©ãŒã®ããªã¬ãŒã«ãªããšããäºå®ã¯ãããŸããã ãããã£ãŠãæåã§æãå¿ èŠããããŸãã ãã®ã¹ã¯ãªããã¯ãã³ã³ãããŒã©ãŒèŠçŽ ã«æ¥ç¶ããå¿ èŠããããŸãã
ãã¹ãŠãæ£ããå®äºããããä»®æ³çŸå®ã«å ¥ããã³ã³ãããŒã©ãŒãæ¯ãããšãã§ããŸãã æªãã¯ãããŸããããå¿ èŠãªæ©èœãçµ±åããããã»ã¹ã¯éåžžã«äžäŸ¿ã§éå±ã§ãã
åèš
PlayCanvasã¯ãWebGLã²ãŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®äœæã«äœ¿çšã§ããåªãããšã³ãžã³ã§ãã ããããç§ã¯ãããWebVRã«ããŸãé©åããŠããªãããšãèªããªããã°ãªããŸããã ç®æšã¯ãPlayCanvasãå ¬å ±ã®å©çãä¿é²ããããã«ã§ããããšãå®èšŒããããšã ã£ãããã§ãã ãããããã®æ¹åã¯æããã«éçºãããŠããŸããã ãããã£ãŠãVRã²ãŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããããã¢çšã«äœæãããè€éãªã³ãŒããå€ãã³ããŒããŠç解ããå¿ èŠããããŸãïŒWeb VR LabïŒã
次ã®èšäºã§ã¯ããã¬ããŒãã³ã³ãããŒã«ã®äœæã«ã€ããŠå°ãã¬ãã¹ã³ãè¡ã£ãŠãWeb VRã²ãŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ãéå§ã§ãããå°ãªããšãå°ãã®ã»ãããçšæããããšæããŸãã ãæž èŽããããšãããããŸããïŒ