【PlayCanvas】JavaScriptで効率よく処理しよう!

【PlayCanvas】JavaScriptで効率よく処理しよう!

福田です!
今回はPlayCanvasでEntityの制御をするうえで大事なJavaScriptの知識をいくつか紹介します!
知っているだけで簡単になるかもしれない処理はたくさんあるので、積極的に学んでいきましょう!

アロー関数(Arrow Function)

アロー関数は、ES6で導入された新しい関数の記法です。従来の関数式よりも簡潔に書くことができ、PlayCanvasのスクリプトでもよく使われます。

// 例文
// 従来の関数式
const multiply = function(a, b) {
    return a * b;
};

// アロー関数
const multiply = (a, b) => {
    return a * b;
};

アロー関数を使うことで、コードの可読性が向上し、より簡潔に記述できます。特にコールバック関数を扱う際に便利です。また、アロー関数は自動的にthisをバインドするため、this参照に関する問題を回避できます。PlayCanvasのスクリプトでは、イベントリスナーやPromiseのコールバックなどでアロー関数が頻繁に使用されます。
関数の定義時のthisが使えるのは意図しない値が入ることを防ぐのにとても便利ですね!

プロミス(Promises)

プロミスは、非同期処理を扱うための機能です。PlayCanvasでは、アセットのロードやネットワーク通信など、非同期処理を行う場面が多くあります。プロミスを使うことで、これらの処理をより簡潔に記述できます。

// プロミスを使った非同期処理
loadTexture('texture.png')
    .then(texture => {
        // テクスチャのロードが完了した後の処理
        material.diffuseMap = texture;
    })
    .catch(error => {
        // エラーハンドリング
        console.error('Error loading texture:', error);
    });

プロミスを使うことで、非同期処理の結果を扱いやすくなり、コードの可読性も向上します。PlayCanvasでは、アセットのロードやネットワーク通信などの非同期処理にプロミスが広く使われます。また、複数の非同期処理を順番に実行したり、並列に実行したりする際にも、プロミスのチェーンやPromise.allなどを活用できますのでお試しください!

モジュール(Modules)

JavaScriptのモジュールは、コードを分割し、再利用性を高めるための機能です。PlayCanvasでは、スクリプトをモジュール化することで、コードの管理がしやすくなります。

// モジュールのエクスポート (utils.js)
export function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

// モジュールのインポート (main.js)
import { randomInt } from './utils.js';

const randomNumber = randomInt(1, 10);
console.log(randomNumber);

モジュールを使うことで、コードを機能ごとに分割し、必要な部分だけを読み込むことができます。これにより、コードの管理がしやすくなり、パフォーマンスの向上にもつながります。PlayCanvasでは、スクリプトをモジュール化することで、コードの再利用性を高め、大規模なプロジェクトでも管理しやすくなります。また、サードパーティのライブラリを使う際にも、モジュールとしてインポートすることができます。

非同期/待機(Async/Await)

Async/Awaitは、プロミスをより簡潔に扱うための構文です。非同期処理を同期的に記述できるため、コードの可読性が向上します。

async function loadMultipleAssets() {
    try {
        const [model, texture] = await Promise.all([
            loadAsset('model.json'),
            loadTexture('texture.png')
        ]);
        
        // アセットのロードが完了した後の処理
        console.log('Assets loaded:', model, texture);
    } catch (error) {
        // エラーハンドリング
        console.error('Error loading assets:', error);
    }
}

Async/Awaitを使うことで、非同期処理を同期的に記述でき、コードの流れが理解しやすくなります。PlayCanvasでは、複数のアセットを同時にロードしたり、非同期処理を順番に実行したりする際に、Async/Awaitが活用されます。また、try/catch構文を使ってエラーハンドリングを行うこともできます。
特によく使うことが多い印象です!

スプレッド演算子(Spread Operator)

スプレッド演算子は、配列やオブジェクトを展開するための構文です。PlayCanvasでは、スプレッド演算子を使って、配列やオブジェクトのコピーや結合を簡潔に記述できます。

const numbers = [1, 2, 3];
const newNumbers = [...numbers, 4, 5];
console.log(newNumbers); // [1, 2, 3, 4, 5]

const object1 = { a: 1, b: 2 };
const object2 = { ...object1, c: 3 };
console.log(object2); // { a: 1, b: 2, c: 3 }

スプレッド演算子を使うことで、配列やオブジェクトの操作がより簡潔になります。PlayCanvasでは、エンティティの属性をコピーしたり、複数のオブジェクトを結合したりする際に、スプレッド演算子が活用されます。また、関数の引数として配列を展開する際にも使用できます。

終わりに

今回はPlayCanvasで開発するうえで特によく使う重要なJavaScriptの構文について解説しました!
特に外部ライブラリやデータセットを扱う際には今回の構文をすべてフルで使うことも少なくありません!
しっかりと扱えるようになっておくと、開発がはかどりますのでぜひ覚えていってください!

以上、福田でした!


現在
株式会社チョモランマ
株式会社シェルパ
3Dmodeljapan株式会社
ではスタッフを大募集しております!!
Unreal Engine4、AI、プログラミングや建築パースに興味がある方!
ぜひご応募下さい!!
初心者の方、未経験の方やインターンを受けてみたい方々でも大歓迎です!!

画像に alt 属性が指定されていません。ファイル名: F_BrZ12bcAAinOm-e1714633684128.jpg