【问题标题】:Instantiate the next item when the first item is dropped删除第一个项目时实例化下一个项目
【发布时间】:2018-09-16 12:04:45
【问题描述】:

我有一个脚本,当玩家从商店购买 X 金额时实例化游戏对象,它可以工作,但我遇到了一个问题。你看,如果玩家购买了大约 200 件物品,我的游戏就会滞后;我制作了一个脚本,将上面的每个项目设置为 false,但它仍然使我的游戏滞后。

这是不可取的,我想知道是否有一种方法可以保留玩家购买的物品的数量(int),但在玩家掉落(将孩子从其父母中设置出来)第一个物品时实例化该物品到特定区域。

假设如果玩家购买了 3 件物品,其中一件已被实例化,但接下来的两件尚未实例化,那么当玩家将第一个物品放入特定区域时,下一个已实例化但第三个尚未实例化直到第二个也被放置在特定区域。这是我的实例化脚本:

void Update () {

        if (happenOnce == false) {
            for (int x = 0; x < slotCon.GetComponent<SlotController> ().Wallet; x++) {
                var item = Instantiate (ItemPrefab) as GameObject;
                item.transform.position = transform.position;
                item.transform.SetParent (slotHolder.transform);
                item.SetActive (true);
            }
            happenOnce = true;
         }
}

【问题讨论】:

  • 就我个人而言,我会将大块的单词分成更小、更易读的段落。

标签: c# unity3d


【解决方案1】:

我不确定这是否适用于您的具体困境(我也不确定您商店的具体情况)。

我会记录循环中已实例化的项目数量和已删除的项目数量。然后,如果我按照你的逻辑,你只希望下一个项目在前一个项目产生已被删除,所以我们可以这样做。

if (droppeditemscount >= instantiateditemscount)
{
instantiate()
}

【讨论】:

  • 感谢您的建议,抱歉这么久才回复;我有工作。我现在回到我的项目并尝试了您的建议,但调整了功能以满足我的需求。你给我的想法是一个巨大的帮助,一旦第一个预制件被放入一个区域,我就能够将预制件实例化到我的游戏中,但是我仍然遇到问题,因为我的游戏仍然滞后。我认为在玩家将前一个物品放入游戏后将 1 个物品实例化到库存中有助于使我的游戏顺利进行。
  • 但是当我购买 X(比如 100)个项目(一旦玩家丢弃默认/第一个项目后,只有 1 个被一次又一次实例化),我的游戏仍然滞后,有时会崩溃。
  • 你在实例化的对象上使用什么样的碰撞器?如果它有太多的多边形,可能会导致游戏延迟。
  • 我有两个 2d 盒子碰撞器,一个在实例化对象上,另一个在项目的子对象上。
  • 不幸的是,如果无法访问该项目,我认为我无法为您提供帮助,因为延迟可能是由多种原因引起的。您可能想研究基本的优化、遮挡剔除和其他技术。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多