我期望达到的目标是,一个物体被点击后会被破坏,而刚刚被点击的物体会出现在背包里,但现在的问题是,当物体被破坏后,当我再次回到同一场景时,被破坏的物体又会重新出现,这让我的玩家不停地点击,无数次地捡起同样的物体。
这是我当前的代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetItem : MonoBehaviour
{
public item thisItem;
public inventory playerBag;
private void OnMouseDown()
{
AddNewItem();
Debug.Log(+1);
DontDestroyOnLoad(gameObject);
Destroy(gameObject);
}
public void AddNewItem()
{
if (!playerBag.itemList.Contains(thisItem))
{
playerBag.itemList.Add(thisItem);
}
else
{
thisItem.itemHeld += 1;
}
inventorymanager.RefreshItem();
}
}
这个bug困扰我很久了,希望有专业人士能解答这个问题,谢谢。
2条答案
按热度按时间2guxujil1#
为游戏中的对象创建一个产卵器,让它存储一个预制的对象,并使它看起来像编辑器中的对象。在开始或任何逻辑发生后产卵对象,当玩家离开Map时跟踪产卵时间-将常规的c#对象附加到每个产卵器以跟踪其状态,将这些对象存储在某个地方并在需要时更新)。
ldioqlga2#
你可以给予每个对象一个唯一的ID,并在
PlayerPrefs
或任何更高级的数据库等中跟踪它们。然后你只需检查相应的ID是否已知=〉销毁你的对象。
if UNITY_EDITOR private void OnValidate(){ if(PrefabUtility.IsPartOfAnyPrefab(this)){ _uniqueID = null;返回; }
结束编号
这是一个非常简单的获取ID的“愚蠢”示例方法,但仍然可能导致冲突,与预制件等有问题。还有更复杂的解决方案like e.g. this one-原理保持不变