メインコンテンツまでスキップ

インタラクティビティ

Scene ができたら、インタラクティブにしたくなるはずです。用途に応じて、いくつかの方法があります。

ポインターイベント

Entity にポインターイベントを付与すると、ユーザー操作に応答できます。リアクティブに入力を扱う簡単な方法です。

ヒント

ポインターイベントはバブルします。親の Entity にイベントを付ければ、React ツリーを通じて伝播します。

クリックで色が変わる球体を作ってみましょう。

Entity は、DOM の Pointer Events API に近い挙動で、次のポインターイベントをサポートします。

  • onPointerUp
  • onPointerDown
  • onPointerOver
  • onPointerOut
  • onClick

Script コンポーネント

Script コンポーネントは、Entity に独自の振る舞いを追加する便利な方法です。任意の ESM 形式の PlayCanvas ScriptEntity に取り付けられます。インタラクティビティやアニメーション、React のレンダーループ外で行いたい処理に適しています。

ESM 形式の PlayCanvas Script<Script> コンポーネントの script Prop に渡します。

PlayCanvas の Script は Script クラスを拡張した ESM モジュールです。既存の Script や自作、エンジンリポジトリの既存 Scriptも利用できます。

ヒント

毎フレームアニメーションさせたい場合は、React ツリーを再レンダリングするより <Script> コンポーネントの方が一般的にパフォーマンスに有利です。ただし Script が Entity の Props を上書きすることもあります。

詳しくはドキュメントの Scriptを参照してください。

Application イベント

より React らしい方法として、useAppEvent フックがあります。PlayCanvas のアプリケーションイベントを、適切な TypeScript の型付きで購読できます。組み込みイベントと、コールバックのシグネチャが決まったカスタムイベントの両方に対応します。

次の例では、useAppEventupdate イベントを購読し、カプセルを回転させます。

フックできるアプリケーションイベントは複数あり、それぞれコールバックのシグネチャが決まっています。利用可能なイベントは Engine の Application API を確認してください。

app.fire メソッドで独自のイベントを発火することもできます。

import { useAppEvent } from '@playcanvas/react/hooks'

const MyComponent = () => {
useAppEvent('myEvent', (message) => {
console.log('My event fired.', message);
});
}

app.fire('myEvent', 'Hello, world!');

次のステップ

インタラクティビティについて学んだら、物理マテリアルへ進んでください。