あなたの世界を作りなさい
経済
ユーザーが所有するアイテムに関する情報を取得する
8分
現在接続されているユーザーのアイテム情報をカテゴリ別に取得するには、zepeto module shop apiを使用できます。 インストール ウィンドウ → パッケージマネージャ → まずzepeto worldパッケージのバージョン1 21 14以上をインストールしてください。 次に、zepeto moduleパッケージのバージョン1 0 7以上をインストールしてください。 zepeto module shop api zepeto module shop apiに興味がある場合は、ドキュメントを参照してください: 📘 以下のガイドを参照してください。 \[ zepeto module shop api https //developer zepeto me/docs/module/namespaces/zepeto module shop ] アイテム情報出力の例 プロジェクト > 作成 > zepeto > typescriptが作成され、名前がmyitemlistに変更されました。 以下のようにサンプルスクリプトを書いてください。 import { zepetoscriptbehaviour } from 'zepeto script' import { shopservice, category, itemkeyword } from 'zepeto module shop' import { zepetopropertyflag } from 'zepeto' import { texture2d, waituntil } from 'unityengine' import { rawimage } from 'unityengine ui' import { item } from 'zepeto module content' export default class myitemlist extends zepetoscriptbehaviour { public thumbnailimage rawimage; start() { this startcoroutine(this cogetmycategory()); } cogetmycategory() { var requestcategory = shopservice getmycategoryasync(); yield new waituntil(() => requestcategory keepwaiting == false); if (requestcategory responsedata issuccess) { let categoryinfo = requestcategory responsedata category; console log(`\[category info] ${categoryinfo displayname} length ${categoryinfo categories length}`); let categories category\[] = categoryinfo categories; for (const category of categories) { console log(`\[category displayname] ${category displayname} `); //category keywordはshopservice getmycontentitemlistasync関数の引数として使用されます console log(`\[category keyword] ${category keyword} `); } } this startcoroutine(this cogetmyitem()); } cogetmyitem() { var requestitemlist = shopservice getmycontentitemlistasync(itemkeyword all, null); yield new waituntil(() => requestitemlist keepwaiting == false); if (requestitemlist responsedata issuccess) { let items item\[] = requestitemlist responsedata items; // getmycontentitemlistasync()の結果として受け取ったアイテムの数。 console log(items length); for (let i = 0; i < items length; ++i) { const property zepetopropertyflag = items\[i] property; // アイテムidとアイテムプロパティ console log(`\[content item] (id) ${items\[i] id} | (property) ${property}`); // アイテムのサムネイルをrawimageのテクスチャとして設定 var texturereq = items\[i] getthumbnailasync(); yield new waituntil(() => texturereq keepwaiting == false); let thumbnailtexture texture2d = texturereq responsedata texture; this thumbnailimage texture = thumbnailtexture; } } } } スクリプトの説明 マイアイテムタブの情報を取得する shopservice getmycategoryasync()を呼び出して、マイアイテムタブのアイテムカテゴリを知ることができます。 成功裏に応答を受け取った場合、responsedataプロパティを通じてcategoryresponseオブジェクトにアクセスできます。 categoryresponse category categoriesを参照し、マイアイテムタブのアイテムカテゴリリストを出力します。 アイテムリストを取得する shopservice getmycontentitemlistasync(itemkeyword all, null)を呼び出して、すべてのカテゴリのアイテムリストを取得します。 特定のカテゴリからのみアイテムを取得することもできます。たとえば、itemkeyword allの代わりにitemkeyword hairを使用して、髪のアイテムのみを取得できます。 2番目のパラメータは、次のページトークンを知っている場合にのみ使用されます。apiを初めて呼び出すときは、nullに設定します。 nextpagetokenに関連する例については、以下の情報を確認してください。 成功裏に応答を受け取った場合、responsedataプロパティを通じてcontentitemlistresponseオブジェクトにアクセスできます。 itemresponse itemsを参照し、各アイテムのidと部分enumコードを出力します。 また、アイテムのサムネイルは指定されたrawimageとして設定されます。 スクリプトの記述が完了したら、シーン内のオブジェクトにスクリプトを追加します。 再生ボタンを押すと、マイアイテムタブのカテゴリリストとすべてのカテゴリのアイテム情報が表示されます。 アイテムのサムネイルプレハブを作成し、アイテムリストに基づいてサムネイルを動的に作成する場合、uiにアイテムリストのサムネイルを表示できます。 ユーザーの特定のアイテムの所有状況を確認する例 getmycontentitemlistasync()を利用して、ワールド内の誰かが特定の服を着ているかどうかを確認できます。 以下は、特定のアイテムを所有しているユーザーのuiにメッセージを表示する簡単な例です。 プロジェクト > 作成 > zepeto > typescriptが作成され、名前がcheckitemに変更されます。 以下のようにサンプルスクリプトを書きます。 import { zepetoscriptbehaviour } from 'zepeto script' import { shopservice, itemkeyword } from 'zepeto module shop' import { zepetopropertyflag } from 'zepeto' import { waituntil } from 'unityengine' import { text } from 'unityengine ui' import { item } from 'zepeto module content' export default class checkitem extends zepetoscriptbehaviour { public resulttext text; public checkitemid string; start() { this resulttext gameobject setactive(false); this startcoroutine(this cocheckitem()); } cocheckitem() { let nextpagetoken string | null = null; do { // ユーザーのコンテンツアイテムのリストをリクエストします。 const requestitemlist = shopservice getmycontentitemlistasync(itemkeyword all, nextpagetoken); yield new waituntil(() => requestitemlist keepwaiting == false); if (requestitemlist responsedata issuccess) { // レスポンスからコンテンツアイテムを取得します。 const contentitems item\[] = requestitemlist responsedata items; nextpagetoken = requestitemlist responsedata nextpagetoken; // コンテンツアイテムを反復処理します。 for (let i = 0; i < contentitems length; ++i) { const property zepetopropertyflag = contentitems\[i] property; // アイテムidが指定されたidと一致するか確認します。 if (contentitems\[i] id == this checkitemid) { // 一致したアイテムメッセージをアクティブにします。 this activatematcheditem(); break; } } } else { break; } } while (nextpagetoken != null); } activatematcheditem() { // 一致したアイテムメッセージを表示します。 this resulttext gameobject setactive(true); this resulttext text = "わあ、私が作ったアイテムを持っている!"; } } スクリプトの説明 これは、worldにログインしているユーザーの「マイアイテム」リスト(すべてのカテゴリ)をブラウズし、インスペクターに入力された一致するアイテムidを見つけるスクリプトです。 アイテムが多い場合、nextpagetokenの値はnullではありません。したがって、値がnullになるまでdo while文で処理が繰り返されます。 nextpagetokenがshopservice getmycontentitemlistasync(itemkeyword all, nextpagetoken)の第二引数として提供されたことに注意してください。 成功したレスポンスを受け取ったら、responsedataプロパティを通じてcontentitemlistresponseオブジェクトにアクセスできます。 itemresponse itemsをブラウズして、入力されたアイテムidに一致するものを見つけます。 一致するアイテムが見つかった場合、activatematcheditem()が呼び出され、ユーザーの画面にテキストが表示され、ループが終了します。 スクリプトの記述が終わったら、シーン内のオブジェクトにスクリプトを追加します。 インスペクターで、world内のユーザーが持っているか確認したいアイテムのidを入力します。 プロセスを実行するには再生ボタンを押してください。ユーザーがログインしているワールドに、入力されたアイテムidに一致するアイテムがある場合、画面にテキストが表示されます。 この例を適用して、さまざまな興味深いコンテンツを作成できます。