// Start is called before the first frame updatevoid Start()
{
// パネルに並ぶslot名からimage配列を作成foreach (Transform slotImage inthis.panelInventory)
{
var match = Regex.Match(slotImage.name, "slot([0-9]{2})");
if(match.Success && 2 == match.Groups.Count)
{
this.slotTransforms[int.Parse(match.Groups[1].Value)] = slotImage;
}
}
}
インベントリ情報を受け取ったら
カスタムデータがあるものについて、まずはスロットに情報を埋めます。(今はありません)
slot00 とかでマッチしたら 0 スロットに value の値を入れることにします。(今はありません)
しつこいですが、最初はカスタムデータを持たないので、若いスロットからアイテムを詰めていきます。
若いスロットからアイテムを詰めていくコードはこんな感じ
PlayFabInventory.GetUserInventory(result => {
this.userInventory = result.Inventory;
List<ItemInstance> noSlotItems = new List<ItemInstance>();
foreach (var item inthis.userInventory)
{
if ("0" == item.ItemId)
{
continue;
}
Debug.Log(item.ItemId);
Debug.Log(item.DisplayName);
Debug.Log(item.RemainingUses);
if (null != item.CustomData)
{
foreach (var customData in item.CustomData)
{
var match = Regex.Match(customData.Key, "slot([0-9]{2})");
if (match.Success && 2 == match.Groups.Count && int.TryParse(customData.Value, outint itemCount))
{
this.viewItems[int.Parse(match.Groups[1].Value)] = new ViewItem { item = item, count = itemCount };
}
Debug.Log($"key = {customData.Key}, value = {customData.Value}");
}
}
else
{
noSlotItems.Add(item);
}
}
foreach (var item in noSlotItems)
{
for (int viewItemIndex = 0; viewItemIndex < this.viewItems.Length; viewItemIndex++)
{
if (null == this.viewItems[viewItemIndex] && null != item.RemainingUses)
{
constint slotMaxPrismCount = 99 * 2;
int overSlot = Mathf.FloorToInt((int)item.RemainingUses / slotMaxPrismCount);
for (int i = overSlot; i >= 0; i--)
{
if (0 != i)
{
this.viewItems[viewItemIndex] = new ViewItem { item = item, count = slotMaxPrismCount };
for (; viewItemIndex < this.viewItems.Length; viewItemIndex++)
{
if (null == this.viewItems[viewItemIndex])
{
break;
}
}
}
elseif (0 < ((int)item.RemainingUses - overSlot * slotMaxPrismCount))
{
this.viewItems[viewItemIndex] = new ViewItem { item = item, count = (int)item.RemainingUses - overSlot * slotMaxPrismCount };
}
}
break;
}
}
}
for (int viewItemIndex = 0; viewItemIndex < this.viewItems.Length; viewItemIndex++)
{
if (null != this.viewItems[viewItemIndex])
{
this.CreateBasicCubeObject(viewItemIndex, this.viewItems[viewItemIndex]);
}
}
});
}
アイテム数を増やすのではなく、装備状況などをゲーム情報としてカスタム管理するので、これはクライアントから投げても ok とします。
この世界ではカスタムデータをどんなに偽装しても、最終的にはアイテム数を処理するので、整合性がとれなくなった場合は、リクエストされたカスタムデータが無視されます
PlayFab の api の情報によれば、サーバー側でしかカスタムデータを編集できないので、クライアントからは、どのslotにいくつ移動したという旨のリクエストを投げます。