Articles of 组件为基础

如何处理组件中的标签

我有一个名为“ReflectOffCollision”的组件。 显然,这个组件显然不需要了解关于游戏的具体细节,如标签。 问题是,我想把这个脚本应用到只反映一些碰撞的对象上。 我可以检查碰撞标签,但这会破坏组件的通用性。 它只会与这个标签碰撞。 我可以让脚本采取一个白名单或黑名单标签,但这是尴尬的。 我的另一个select是从组件inheritance,并做出更具体的版本。 虽然这看起来好像过火了。 我应该如何处理组件中的标签? 我在任何有碰撞的地方看到这个问题。 我错误地使用标签,或误解他们?

如何确定控制游戏对象的参数值?

我是一名C#开发人员,现在正试图改变我的梦想领域:游戏开发。 我是新来的游戏开发和目前自学Unity3D。 对我来说Unity是基于组件的工具,我们可以设置不同的参数来控制游戏对象的行为。 有一个问题让我怀疑很久了: 是否有任何“科学”的方法来确定组件的参数的价值而不是试错(蛮力)? 就像当我看一些教程时,导师通常会告诉你“改变这个值为x,改变为y”,而不告诉你为什么这样。 我只想知道游戏开发商如何设定价值,是否有共同的标准等等。

问题与button组件

当我添加一个Button组件时,它看起来像这样: 通常情况下,应该是这样的: 我该如何解决这个问题?

如何强制每个游戏对象的自定义组件?

我想有一个自定义组件,将有一个下拉。 我希望将其应用于项目中的任何GameObject,这意味着层次结构中的每个GameObject以及每个GameObject预制。 就像变换组件一样。 它不应该是可移动的,并且在创建新的GameObjects时应该默认添加它。 在下拉列表中,我将select一些选项,并且将这些值存储在该GameObject的自定义强制组件中的一个数组中。 所以如果我在场景中有两个新的GameObjects,名为XYZ和ABC,而组件是PQR,我应该可以做到这一点 – ABC.GetComponent<PQR>().someArrayVar = whatever; XYZ.GetComponent<PQR>().someArrayVar = anotherWhatever; 有人知道怎么做吗? 任何帮助赞赏。 提前致谢 :)

如何正确使用Unity组件的方法?

这可能听起来像一个基于意见的问题,但我觉得我并不孤单,这也可能帮助其他人。 我花了很多时间去了解如何使Unity成为事物,使用最好的组件方法。 我阅读了几乎所有我可以访问的内容,并观看了我发现的每个演示文稿。 但最后我发现自己在实现人们所谈论的所有这些抽象概念的时候非常困惑。 我没有试过的最后一件事是在这里问一个问题。 另外我想提一提的是我有编程经验(主要是OOP),并且我意识到不同的devise模式,组件方法和inheritance之间的区别,Unity EC和ECS以及所有这些。 但是,当涉及到与Unity练习,似乎我失去了一些东西。 我会告诉你一个例子: 组件方法鼓励我们使组件小而独立。 所以我们可以很容易地从这个组件中组合对象 我非常喜欢这个想法。 我决定做一个2d roguelike来尝试这种方法。 首先,我正在考虑需要哪些组件,并且列表中有一些组件: 固体 移动 健康 启用 所以除了Transform和SpriteRenderer:Wall还有Solid和Health组件。 演员有固体 , 移动和健康的组成部分。 门有固体和激活组件。 地板将是空的。 我决定我游戏中的所有对象只是组件的容器,没有特定的名称或标签。 对象交互逻辑将仅基于对象所具有的组件。 换句话说,当移动组件的对象将尝试移动特定的瓷砖时,我应该以某种方式获取该瓷砖上的所有组件,然后执行一些逻辑(如一些疯狂的伪代码): Move(x, y) { components = getAllComponentsAtCoordinate(x, y); if (there is health component in components) component.TakeDamage(); //attack return; if (there is activate component in components) component.Activate(); return; if […]

基于组件的AI依赖关系

我正在Unity中进行基于回合的游戏。 我需要执行字段/网格分析(2D网格),当我迭代通过每个单位“实体”。 AI应该能够提前计划,因此需要考虑每个单元所具有的组件。 不是每个单位都有同样的能力。 这些能力被定义为组件。 我想让它变得灵活一点,我可以插入新的能力,我的AI会考虑到这一点。 虽然用户控制有些实施,AI甚至没有写。 所以我愿意接受任何建议。 问:人工智能系统如何收集一个单元的所有能力,并根据各个部分做出决定? 编辑:我知道有“空”检查方法,看看游戏对象是否包含一个组件。 但是这是非常不灵活的,因为你很难编码一堆。 我想防止的事情。

AI:处理与玩家驾驶相同input的运动

我的AIdevise非常简单。 我有不同的实体,可以由玩家或AI拥有。 这些实体有一个“input”组件,它保存实际input的状态,如右,左,上,下,火。 (并且是右边,左边,wasUp,wasDown,wasFire执行检查input是否被触发或没有)。 我的PlayerController类是通过从键盘或游戏手柄读取input来驱动该组件的。 以类似的方式,我的AIController通过逻辑function提供相同的input。 在处理运动时,现在我已经用这种方法撞墙了。 假设我处于二维空间,并且正在水平移动AI。 我正在从(0,0)移到(10,0),所以我一直激活“右”input,直到达到(10,0)的位置。 但是,如果我的实体的速度很高,我可能实际上会超越这个位置,并且引发一个回退,然后再次前进,因为它实际上不能解决。 我知道我可以检查前面的动作是否在同一个方向,如果我通过了目标,我可以强制这个位置到达我想要的位置。 但它看起来并不像一个干净的解决scheme。 这种方法是完全错误的吗? 我想尽量保持简单和模块化的同时。

使用子对象进行基于组件的编程

目前,我正在Unity3d上开发一款游戏,并且已经就重复的子对象编写脚本了。 这些子对象是否应该处理自己的脚本以获得最佳实践? 例如,我有一个父游戏对象Game Board,它在棋盘上产生重复的子对象Tiles。 现在,当这些瓷砖移动时,我让这些子对象在电路板上处理自己的位置和自己的animation。 不过,我可以轻松地使用父对象的脚本类来做到这一点。 我select让子对象这样做的原因是因为我相信子对象应尽可能独立于父对象。 但是由于这些是重复的子对象,我开始怀疑在父对象中执行所有的脚本是否容易。 这样我减less了子对象中的类实例的数量。 根据基于组件的编程,推荐哪种方法?

Unity:基于组件的devise中的callback

我正在尝试在Unity3d v5中使用基于组件的devise。 如果我有2个独立的C#脚本,如下所示附加到敌方船只: Script1.shipDead() – 删除游戏对象并显示爆炸animation Script2.showPoints() – 被毁坏的舰船显示点数:+100(稍后这将消失) 在执行shipDead()函数后,如何执行showPoints()函数作为callback函数? 我不能把这两个动作放在同一个function上,因为有些敌人不会有分数。 一些敌人被摧毁后会留下大功率的小型敌人/炸弹。 而且我不想在4个函数中重复相同的代码。 喜欢 : function1:摧毁船只(仅此而已) function2:破坏船舶+展示点 function3:摧毁舰船+产生小型敌人 function4:破坏船舶+展示点+产卵炸弹 (正如你可以看到,有很多不同的可能性/组合我可以想出) 我需要分离function并将其隔离以完成单个任务。 由于shipDead()不会执行与showPoints()或showPowerUp()函数相关的任何操作。 我的问题是如何顺序执行function? 一个又一个,像一个callback函数? 喜欢这个: 首先运行Script1.DestroyShip(); 之后运行Script2.ShowPoints(); 最后运行Script3.SpawnBomb(); 请提供一个不会违反以下内容的解决scheme: 组件需要可重用(我可以将脚本拖放到其他敌人/船只上) 代码不应重复 松散耦合(较小的依赖) 请帮助我,在此先感谢!

如何存储一组具体组件并实现“GetComponent <T>()?”

我想要一个抽象类AbstractComponentAggregate,它有许多AbstractComponents。 我的框架的用户将通过扩展AbstractComponent并将组件添加到AbstractComponentAggregate来创建组件。 我想知道是否有一个优雅的方式让AbstractComponentAggregate存储扩展AbstractComponents的具体类的字典。 请注意,我想存储很多具体的类,每个类都是一个AbstractComponent。 这与存储AbstractComponents列表不同。 因此,您可以调用AbstractComponentAggregate上的方法,例如: AbstractComponentAggregate.GetComponent(),它返回typesT. T是具体类,我们确保T是AbstractComponenttypes。 类似这样的事情在Unity3d中完成,我想模拟这个。