问题描述
在游戏开发方面,我还比较陌生,但是我花了十几个小时来研究如何使用可脚本对象(SO)。
我不知道我的游戏将要包含多少个物品,所以我想尽可能地使物品制作过程自动化,以避免人为错误。我已经读过,使用可脚本编写的对象将信息存储在一个地方对性能有好处:
ItemData.cs
public class ItemData : ScriptableObject
{
public int itemID;
new public string name;
public Sprite sprite = null;
}
接下来,我有一个gameObject,它将所有itemData加载到Awake上的字典中:
ItemDatabase.cs
private Dictionary<int,ItemData> itemDB = new Dictionary<int,ItemData>();
void Awake()
{
LoadItems();
}
private void LoadItems()
{
//Load all itemData
ItemData[] itemData = Resources.LoadAll<ItemData>(itemDirectoryPath);
for(int i = 0; i < itemData.Length; i++)
{
//Set sprite of itemData,to avoid doing it manually
itemData[i] = SetSprite(itemData[i]);
//Add itemData to dataBase
itemDB[itemData[i].itemID] = itemData[i];
}
}
最后,我有一个在运行时创建指定itemID的gameObject的函数:
//Create new gameobject at location
public void SpawnItem(int itemID,float x,float y)
{
//Get itemData
ItemData itemData = getItemData(itemID);
//Create new gameObject
GameObject gameObject = new GameObject();
//Set name of gameObject,add Item Script,and set position
gameObject.name = itemData.name;
gameObject.AddComponent<Item>().itemData = itemData;
gameObject.transform.position = new Vector3(x,y,0);
}
问题:
- 如上面的SpawnItem所示,在运行时创建项目是否被认为是“ hacky”?我必须手动将每个项目创建为预制件吗?
- 如果认为“资源”是不好的做法,除了将每个项目手动拖动到ItemDatabase脚本上,还有更好的解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)