Unity 场景中的“事物”是 GameObject,仅此而已。
您的类必须是 MonoBehaviour 才能在游戏对象上。
在 Unity 中,一切都是 MonoBehaviour(Component)。毫不夸张地说,Unity 中没有其他任何东西。
(当然,你可能有一些“原始”的非 Unity 类用于诸如数学计算之类的事情,但这无关紧要。)
就是这么简单。
public Class Entity:Monobehaviour
{
}
将它附加到一个空的游戏对象上。添加模型(网格).. 或任何你想要的。添加音效,添加任何东西。
关于“改变网格”,没问题。
如果您愿意,可以在 Entity 中的例行程序中执行此操作。
public Class Entity:Monobehaviour
{
public void ChooseRandomMesh()
{
}
public void ChooseRandomColorPattern()
{
}
public void RunForTheHills()
{
}
public void AttackHero()
{
}
}
如果您愿意,可以写一个Component,它只会随机更改网格。
public Class Entity:Monobehaviour
{
public void RandomizeEntity()
{
}
public void ChooseRandomColorPattern()
{
}
}
.. 并将该脚本附加到游戏对象。
在 Unity 中,一切都是 MonoBehaviour(Component),就是这么简单。
关于使其成为预制件,如果您愿意,请务必这样做。阅读数千篇关于预制件的教程。
您在下面的 cmets 中有一个批评性评论:
“实体类也不是MonoBehaviour...”
这是理解 Unity 的关键点:
1) 你的“模型”或“AI”或“数据库连接”与统一游戏对象“无关”,这是非常正确的。 (他们当然没有“位置”或“质量!”或任何东西,对吧?!)
不管怎么样还是怎么样还是怎么样
2) 在 Unity 中,除非一个类是 MonoBehaviour:你不能对它做任何事情/你甚至不能访问运行循环,它完全是一个不启动的对象。
如此如此如此如此如此如此如此如此如此如此如此如此如此如此如此如此如此如此如此
3) 在 Unity 中,所有类似的东西,实际上是一种 MonoBehaviour,您只需 将它放在一个空的游戏对象上。 (通常,Heirarchy 中的名称以下划线开头,所以你知道它“不是真的”一个传统的游戏对象。)
简单的底线是在您的预加载场景中(您必须拥有 100% 的项目)您拥有所有“AI”、“模型”和“数据库”的东西,只需坐在一个或多个“假装”标记上(标记 == 否则为空游戏对象)。
底线,当您在下面说“您的模型不是 MonoBehaviour”时,这是错误的。它必须是一个 MonoBehaviour (如果你考虑一下,这是绝对不可避免的,你需要访问 runloop,如果没有别的)......只需将其设置为 MonoBehaviour 并将其放在标记上,几乎可以肯定在你的预加载中.
我希望这是有道理的。 Essay 关于这个话题。