C# 使用GetComponent<&燃气轮机;()使用变量?

C# 使用GetComponent<&燃气轮机;()使用变量?,c#,unity3d,gameobject,C#,Unity3d,Gameobject,我正试图建立一个目标系统 当我点击一个骷髅敌人时,我希望能够从骷髅脚本获得生命值和伤害,同样,当我点击另一个敌人时,我希望获得他们的特定生命值和伤害 我能想到的唯一方法是使用GetComponent方法,但是有没有一种方法可以使用一个通用的GetComponent,它根据我瞄准的敌人使用一个变量,这样我就可以根据该变量获取选定敌人的数据?您没有显示任何示例代码,所以很难看出你有什么和没有解决,但这是解决问题的一种方法 //Pseudocode GameObject enemy = GetEne

我正试图建立一个目标系统

当我点击一个骷髅敌人时,我希望能够从骷髅脚本获得生命值和伤害,同样,当我点击另一个敌人时,我希望获得他们的特定生命值和伤害


我能想到的唯一方法是使用
GetComponent
方法,但是有没有一种方法可以使用一个通用的
GetComponent
,它根据我瞄准的敌人使用一个变量,这样我就可以根据该变量获取选定敌人的数据?

您没有显示任何示例代码,所以很难看出你有什么和没有解决,但这是解决问题的一种方法

//Pseudocode 
GameObject enemy = GetEnemy(); //This could be a raycast, collision or some other method.
Health enemyHealth = enemy.GetComponent<Health>();
从它的声音来看,你遇到的问题不是获得另一个组件,而是将一堆不相关的功能混合在一起。一个敌人
gameobject
一般来说*应该拥有与主要玩家相同的
健康组件。健康代码不应出现在
敌人
玩家
以及
可破坏框
组件中,否则不仅您多次编写同一代码,而且您在与同一事物的不同实现交互时会遇到困难

*在高级情况下,可能需要一个健康脚本的多个实现,而不是一个大型类。在这些情况下,某种抽象是有用的,例如接口、继承或消息传递


您没有显示任何示例代码,因此很难看到您已经完成的和尚未完成的工作,但这是解决问题的一种方法

//Pseudocode 
GameObject enemy = GetEnemy(); //This could be a raycast, collision or some other method.
Health enemyHealth = enemy.GetComponent<Health>();
从它的声音来看,你遇到的问题不是获得另一个组件,而是将一堆不相关的功能混合在一起。一个敌人
gameobject
一般来说*应该拥有与主要玩家相同的
健康组件。健康代码不应出现在
敌人
玩家
以及
可破坏框
组件中,否则不仅您多次编写同一代码,而且您在与同一事物的不同实现交互时会遇到困难

*在高级情况下,可能需要一个健康脚本的多个实现,而不是一个大型类。在这些情况下,某种抽象是有用的,例如接口、继承或消息传递


您是否尝试过
EnemyScript EnemyScript=gameObject.GetComponent()?我做过类似的事情:
对手.GetComponent().getHit(伤害)这是我在
中硬编码的地方,但我想说的是,如何将
设置为与
对手的脚本相等?我认为你不能这样做。我的建议是让所有敌人都有相同的脚本,所以你不需要更改脚本。相反,在敌方脚本中,您需要有一个变量
type
,例如标记敌方是什么(例如,机器人为
type=1
,外星人为
type=2
,等等)。这样,你也可以从
GetComponent
中获取
类型
,并为每种类型的敌人设置条件。GetComponent方法是否具有接受
系统.type
对象的覆盖?你试过
EnemyScript EnemyScript=gameObject.GetComponent()吗?我做过类似的事情:
对手.GetComponent().getHit(伤害)这是我在
中硬编码的地方,但我想说的是,如何将
设置为与
对手的脚本相等?我认为你不能这样做。我的建议是让所有敌人都有相同的脚本,所以你不需要更改脚本。相反,在敌方脚本中,您需要有一个变量
type
,例如标记敌方是什么(例如,机器人为
type=1
,外星人为
type=2
,等等)。这样你也可以从
GetComponent
获得
类型
,并为每种类型的敌人创造条件。GetComponent方法是否有一个可以接受
系统的覆盖。类型
对象?很好的答案,基于组件的体系结构使这类东西非常容易。很好的答案,基于组件的体系结构使这类工作变得非常简单。