Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除了使用字典,还有更好的方法在运行时将游戏对象与非单行为类绑定在一起吗?_C#_Unity3d - Fatal编程技术网

C# 除了使用字典,还有更好的方法在运行时将游戏对象与非单行为类绑定在一起吗?

C# 除了使用字典,还有更好的方法在运行时将游戏对象与非单行为类绑定在一起吗?,c#,unity3d,C#,Unity3d,我有一个我相信的通用案例,我有一个NPC类,它的统计数据和参数必须在比赛进行过程中更新(想象一个运动员玩足球比赛时的疲劳) 我有一个游戏对象,它有一个网格,一个动画师组件和其他组件(脚本,单行为),来执行特定的功能 现在;如果你有2,5,10个NPC,这不是什么大问题,但是如果你有很多;如果需要更新各种参数,您可能会在这里感受到这个问题 到目前为止,我有一本字典,它的键是NPC类,值是gameobject;因此,我可以在运行时创建NPC游戏对象,并将NPC类实例“关联”到该特定游戏对象。这似乎效

我有一个我相信的通用案例,我有一个NPC类,它的统计数据和参数必须在比赛进行过程中更新(想象一个运动员玩足球比赛时的疲劳)

我有一个游戏对象,它有一个网格,一个动画师组件和其他组件(脚本,单行为),来执行特定的功能

现在;如果你有2,5,10个NPC,这不是什么大问题,但是如果你有很多;如果需要更新各种参数,您可能会在这里感受到这个问题

到目前为止,我有一本字典,它的键是NPC类,值是gameobject;因此,我可以在运行时创建NPC游戏对象,并将NPC类实例“关联”到该特定游戏对象。这似乎效果不错,但它的效果并不能证明它是有效的


使用这种方法,我会冒任何风险吗?还是有更好的办法?我确实在某个地方读到过,如果所有的类都是单行为的,那么所有的问题都会消失;虽然我看不到实际的比较。

你不应该使用这样的列表或字典,因为所有的查找都需要时间,特别是考虑到Unity已经提供了一个基于组件的系统,所以只需为此创建你自己的组件

我可以稍后发布更多详细信息,但基本上创建一个新的MonoBehavior,如
ClassNPC
,并向其中添加一个公共成员,该成员包含对类信息对象的引用(例如
public ClassInfo usedClass


然后,您可以使用'GetComponent().usedClass'访问它(获取或设置)。

为什么不添加一个包含类对象引用的组件/行为?请告诉我更多信息……这对于我来说是新的回答。我考虑过这个解决方案,但它意味着使用单行为类;而我的NPC课程只是一个标准的C#类。在运行时将组件添加到游戏对象上,然后使用GetComponent()检索它,这不是比在字典中查找更昂贵吗?@newbiez不一定。它可以在幕后进行优化,因此它总是返回附加到此实体的第n个组件,即变得微不足道。我不知道实际执行情况。这是首选的方式,超出了代码的范围,所以不要担心,除非它成为性能问题;在我的例子中,我有一个简单的实体类,它保存NPC数据/参数;而且,由于它从来没有被UI处理过,所以我将其作为常规类。在这一点上,我应该把它作为一个单一的行为,并继续下去。顺便说一句,我是否将引用应用于我的NPC类的类实例并不重要,对吗?一旦我在预置中使用addComponent,Unity将在运行时自行处理。谢谢马里奥的意思并不是让你的统计数据成为一种单一行为。您仍然可以保持stats类的原样,并拥有一个单一行为的连接器类,该连接器类具有stats类的引用。