移行ガイド
レガシースクリプトプロジェクトの移行方法
2016 年 7 月、PlayCanvas は現在のスクリプトシステム(Scripts 2.0 としても知られています)を採用しました。レガシー スクリプトプロジェクトは通常通り動作し続けますが、レガシー スクリプトプロジェクトのフォー クや新規作成はできなくなりました。
2020 年 12 月には、レガシースクリプトプロジェクトが近い将来 read-only になることが発表されました。エディタで開くと、プロジェクトダッシュボードには次のようなメッセージが表示されます。
エディタには、次のようなメッセージが表示されます。
レガシースクリプトプロジェクトで作業を続けたい場合は、現在の形式に移行することをお勧めします。残念なことに、これには自動化された移行プロセスはありません。代わりに、このガイドに従って手動で移行する必要があります。
ステップ 1 - 新しいプロジェクトを作成する
最初に、アセットとコードを転送するための新しい空のプロジェクトを作成します。シーンルートエンティティの下にデフォルトで作成される 4 つのエンティティを削除してください。
ステップ 2 - アセットを転送する
次に、すべてのアセットを新しいプロジェクトにコピーします(レガシープロジェクトのスクリプトは実際にはアセットではないため、スクリプトは除外します)。右クリックのコンテキストメニューを使用して、アセットを 1 つのプロジェクトから別のプロジェクトにコピーして貼り付けることができます。
ただし、レガシースクリプトプロジェクトはかなり古いため、ファイル拡張子なしでアセットがインポートされ、インスペクターパネルで表示できないメタデータがある可能性があるため、ソースアセットをダウンロードして新しいプロジェクトにアップロードすることを検討する必要があります。
ステップ 3 - スクリプトを転送する
プロジェクトダッシュボードから、レガシースクリプトプロジェクトのスクリプトをダウンロードします。
レガシープロジェクトが GitHub リポジトリに接続されている場合は、そこからスクリプトをダウンロードします。
次に、レガシースクリプトを新しいプロジェクトにアップロードできます。
ステップ 4 - スクリプトを現在の形式に更新する
新しいプロジェクトに転送されたスクリプトは、現在の形式に更新する必要があります。以下は、レガシーフォーマットを示す例です。
pc.script.attribute('speed', 'number', 10);
pc.script.create('myScript', function (app) {
// Creates a new MyScript instance
var MyScript = function (entity) {
this.entity = entity;
};
MyScript.prototype = {
// Called once after all resources are loaded and before the first update
initialize: function () {
},
// Called every frame, dt is time in seconds since last update
update: function (dt) {
}
};
return MyScript;
});
こちらが、現在のフォーマットに相当するスクリプトです。
var MyScript = pc.createScript('myScript');
MyScript.attributes.add('speed', { type: 'number', default: 10 });
// initialize code called once per entity
MyScript.prototype.initialize = function() {
var app = this.app; // application instance is available as this.app
var entity = this.entity; // entity property already set up
};
// update code called every frame
MyScript.prototype.update = function(dt) {
};
注意すべき点:
- 現在のスクリプト形式にはコンストラクタはありません。コンストラクタコードは
initialize
関数に移動する必要があります。 - スクリプトの
pc.Application
インスタンスであるapp
はthis.app
になります。 this.entity
は自動的に現在のフォーマットのスクリプトで使用できるようになりました。