トラブルシューティング
うまく動かないときは、下から当てはまる問題を探してください。まずは最初の 2 つを確認しましょう。問題の大半はこの 2 つが原因です。
Preview では動くのに、エディタでは動かない
それで正常です。エディタはロジックを実行しません。スクリプト、パッチ、物理演算、タイマー、近接トリガーはどれも止まっています。エディタはシーンの表示と編集をするだけです。
これは意図的なものです。編集中にアニメーションが再生されたら邪魔になりますし、タイマーがプロジェクトを変えてしまいます。プロジェクトの動きを見るには、Preview を開いてください。
スクリプトが動かない
次の順に確認してください。
- オブジェクトが有効になっているか。階層でその上にあるオブジェクトもすべて有効か。
- そのシーンがアクティブか。AR シーンの場合は、マーカーが検出されている必要があります。
- スクリプトのコンポーネントが有効になっているか。
- エディタではなく、Preview か公開したプロジェクトで見ているか。
インスペクターでスクリプトのプロパティを変更すると、スクリプトは再起動します。うっかり値を変えただけでも、クラッシュしたように見えることがあります。
変更が元に戻ってしまう
よくある原因は 2 つです。
- ステートがアクティブになっている。 ステートを選択している間は、そのオブジェクトへの変更がステートに保存されます。ステートを切り替えると、保存した値が戻ってきます。オブジェクトそのものを変更するには、先にステートの選択を外してください。
- ほかの何かが毎フレームその値を設定している。 タイムラインのバー、物理ボディ、Look At コンポーネントがオブジェクトに書き込み続け、あなたの変更を上書きしています。次の項目を見てください。
2 つのアニメーションがぶつかり合う
2 つのものが同じオブジェクトを変更しています。タイムラインは毎フレーム書き込むので、トランジションには必ず勝ちます。
1 つのオブジェクトには、どちらか 1 つだけを使いましょう。タイムラインで制御しているものにトランジションが必要なら、トランジションを子オブジェクトにつけるか、タイムラインでアニメーションさせてください。アニメーションを参照してください。
スクリプトからマテリアルを変えても何も起きない
マテリアルはスロットのリストです。そのため material.update({ color }) は、その階層に存在しないフィールドに書き込むことになります。代わりにスロットを変更してください。
material.update({
materials: [{ ...material.$data.materials[0], color: '#ff0000' }],
});
入れ子になった値はすべて同じです。update は渡したもので置き換えるので、残したい値もコピーして渡してください。
オブジェクトが床をすり抜ける
取り込んだ 3D モデルは、コライダーを追加するまで実体がありません。 コライダーを追加してください。たいていはボックスかカプセルで十分です。
床にもリジッドボディとコライダーがあるか確認してください。これらがないジオメトリはただの飾りで、ものがすり抜けてしまいます。物理演算を参照してください。
物理オブジェクトが、設定した位置を無視する
動的なボディの位置は物理演算が管理していて、ステップごとに設定し直します。オブジェクトを置くには teleport を使います。動かすには、インパルスか力を使います。
スクリーンショットに UI が写らない
カードは 3D ビューの手前に描画されるので、3D ビューのキャプチャーには含まれません。UI は Preview で確認してください。
回転の値が合わない
インスペクターやパッチノードのポートなど、画面に表示されるものはすべて度です。スクリプトはラジアンで読み書きします。両者の間で値を受け渡すときは変換してください。
キーを押しても何も起きない
名前の書き方を確認してください。トリガーはハイフン(on-click)、ステップはアンダースコア(play_animation)を使います。名前のつづりが間違っていてもエラーは出ず、ただ一致しないだけです。
イベントでプロジェクトのバインディングを使っている場合は、そのバインディングがまだあるか確認してください。バインディングが削除されると、イベントは発生しなくなります。「どのキーでも」に切り替わることはありません。
2 回発生する
同じトリガーを 2 か所で処理しています。イベントとスクリプト、またはイベントとパッチです。どちらか 1 つだけを残してください。イベントを参照してください。
オブジェクトが少し遅れて表示される
リソースはシーンの実行中に読み込まれるので、モデル、テクスチャ、テキストはシーンが開いた少しあとに届くことがあります。最初のフレームから表示されていなければならないコンテンツでは、大きなダウンロードを避けるか、準備ができるまでシーンを非表示にしておきましょう。
「アニメーション終了」のイベントがない
どのアニメーションツールにもありません。同じ長さの待機ステップを使うか、スクリプトで時間を管理してください。
元に戻したら、ほかの人の変更が消えた
元に戻す(Undo)の履歴はあなた自身のもので、厳密に順番どおりにさかのぼります。その間に共同作業者が同じオブジェクトを変更したかどうかは考慮しません。共有しているシーンでは、元に戻してさかのぼるのではなく、新しい変更でミスを直してください。
それでも解決しないときは
答えが見つかる可能性がいちばん高いのは、次の 2 ページです。
- リファレンス — すべての設定を、常に最新の状態でまとめています。
- オブジェクトとシーン — プロジェクトの組み立てのしくみです。このセクションのほかのページは、すべてこれを前提にしています。