我没有在统一论坛上发布此内容,因为我认为与c#相关性比与统一性更多有关。 我想向敌人开枪。 我的敌人是玩家还是敌人AI。 Player具有PlayerCombatSystem,而敌人Ai具有EnemyCombatController。我正在使用Object变量通过
获取这两个脚本之一GetComponent<ScriptName>()
对撞机是指我要与之碰撞的对象
我该怎么做才能增加存储在PlayerCombatSystem或EnemyCombatController中的损坏值?损害是公共价值
这是我两次修th的尝试
float gotDamage = shotterDamage * (100 / (100 + enemy.GetInstanceID.
float gotDamage = shotterDamage * (100 / (100 + enemy.damage;
Object enemy;
float shotterDamage;
if(shotter.GetComponent<PlayerCombatSystem>() != null)
{
shotterDamage = shotter.GetComponent<PlayerCombatSystem>().damage;
}
else if(shotter.GetComponent<EnemyCombatController>() != null)
{
shotterDamage = shotter.GetComponent<EnemyCombatController>().damage;
}
else
{
Debug.Log("ERROR 0");
}
if (collision.GetComponent<PlayerCombatSystem>() != null)
{
enemy = collision.GetComponent<PlayerCombatSystem>();
}
else if (collision.GetComponent<EnemyCombatController>() != null)
{
enemy = collision.GetComponent<EnemyCombatController>();
}
float gotDamage = shotterDamage * (100 / (100 + enemy
答案 0 :(得分:1)
创建一个共享的基类,例如
// abstract just makes sure this can't be instanced
// directly but only inherited types
public abstract class CombatBase : MonoBehaviour
{
public float Damage;
}
,然后使您的两个脚本都从该基类继承
public class PlayerCombatSystem : CombatBase
{
// inherits Damage and everything implemented in CombatBase
// so remove it here
// and here you can extend it with its speicifc behaviour
}
和
public class EnemyCombatController : CombatBase
{
// inherits Damage and everything implemented in CombatBase
// so remove it here
// and here you can extend it with its speicifc behaviour
}
比起您的脚本,您可以简单地使用
CombatBase enemy;
...
// this will also find either PlayerCombatSystem
// or EnemyCombatController since they are both of type
// CombatBase
enemy = collision.GetComponent<CombatBase>();
...
float gotDamage = shotterDamage * (100 / (100 + enemy.Damage);
答案 1 :(得分:0)
另一种选择是使用构造函数,例如:
public class EnemyCombatController : MonoBehaviour
{
public PlayerCombatSystem constructorPlayerCombatSystem ;
//your code
//...
//Damage has changed in the other script (PlayerCombatSystem)
float gotDamage = shotterDamage * (100 / (100 + enemy.constructorPlayerCombatSystem.Damage);
}
要在两个类中都使用变量时,将使用创建另一个类的构造函数
我不太了解您的代码的操作,但是为了简化起见,我推断游戏是在另一个或其他脚本中进行的,并且当检测到(或击中)电击时,变量Damage会发生变化。
假设此变量位于播放器拥有的脚本中,则您想在有敌人(或相反)的脚本中使用它(或者该变量位于另一个脚本中,并且想要在该脚本中使用它)其他两个),则可以创建其他类类型的变量,然后在该类中使用它。
请记住,您必须在检查器中引用包含该类的对象
希望对您有所帮助,或者告诉我我是否理解您的问题