在没有预制件的情况下实例化GameObject

时间:2017-06-05 01:34:01

标签: c# enums unity5

我正在为我的游戏制作一个库存系统,但作为一个完整的初学者,我在谷歌挖掘后有一些问题。

我设计库存系统的方式包含3个主要类:

  1. SceneItem< ---这是场景中的gameObject
  2. ItemData< ---此存储项目的所有信息,并放入项目类
  3. InventoryHandler
  4. ItemName< ---存储所有可用项目名称的枚举
  5. 因此,每当我的角色拿起一个项目时,SceneItem内的ItemData会复制自身,并添加到InventoryHandler中的列表中,这样我就可以存储所有项目的数据。

    然而问题是,如果我以这种方式创建它,我担心我需要创建一堆预制件,每个预制件都包含它们各自的脚本。我认为这不是一个好方法。

    我认为ItemName枚举可以帮助我减少一些工作,通过将怪物的战利品连接到预制件的文件名,但我仍然需要为此创建一堆预制件

    无论如何都可以绕过它吗?或者我这样做的方式本身并不是最优的?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

Unity内部的所有内容都是Object或GameObject< - 仍然继承Object。这意味着如果您创建预制件或非预制件来实例化它。它仍然会有GameObject类,并且里面会有一个Transform类。无论你做什么,它都将包含代码或脚本。预制件只是一组将在过程中重复的数据。不要担心制作大量重复项目,因为Unity知道如何使用相同的实例化项目正确处理内存。您甚至不必担心课程中会有的属性。您需要考虑的唯一事情是运行时性能,而不是单个项目中将包含多少脚本。在你的场景中你可能看起来很大,你有脚本和模型。但是当它被编译时,它不再是一个大问题。垃圾收集在运行时有很多帮助,但如果你对对象有强烈的引用,CLR将永远不知道何时收集它,这是你必须为自己做的事情。

<强>更新

说您希望XML成为解决方案的一部分。这是一个很好的做法,但不完全是性能明智的,因为当你实例化时,你会吃掉一些运行时进程。每次创建项目时,都必须告诉GameEngine在XML模型上查找一些数据。如果你有一些,这并不是那么糟糕。请记住,因为我们使用的语言是在运行时计算的。从XML查找它会慢一些,它也会慢一些。但无论如何,你的方法是Cleaner,关注点的分离和其他开发人员可以在单独的XML文件上工作。

您可以使用很多XML库,甚至为什么不使用JSON,因为它们可以在模型中来回反序列化和反序列化。为什么我推荐JSON?好吧,如果你打算使用第三方Unity游戏API。您最终将不得不使用JSON而不是XML。但就像我说的那样,解析XML到JSON没有问题。最好从JSON开始,因为其他UNITY游戏开发工具已经支持它了。

查看Firebase for Unity,您可以在其中使用RealTime数据库进行游戏。 点击此处FireBase SDK for Unity

事实上你可以使用。 FireBase存储,如果你想在这里保存预制件。

你想到的解决方案是如此简单,你不可能出错,除非你是精通业绩,但是因为我们有很多噱头来处理未来的性能,比如Runtime Prefab下载。您可以在运行游戏时预加载游戏物品的位置。我相信你知道这一点。继续实现XML或者我引用JSON文件。