c#如何从另一个类访问in

时间:2017-04-04 08:52:42

标签: c# unity2d

我正在制作游戏并正在进行近战伤害。我已经完成了寻找敌人等所有代码,但现在我需要让敌人受到伤害。这就是为什么我需要在脚本中访问我的enemys(Slime)curHealth int。

以下是近战武器的代码:(可能是瑞典语中的一些话,不介意它)

{ 
    private float meeleAttackStart = 0f;
    private float meeleAttackCooldown = 0.5f;
    public int meeleDamage = 40;

    // Use this for initialization 
    void Start() 
    { 

    } 

    // Update is called once per frame 
    void Update() 
    {
        if (Input.GetKeyDown(KeyCode.Mouse0) && Time.time > meeleAttackStart + meeleAttackCooldown )
        {
            RaycastHit2D[] hitArea = Physics2D.BoxCastAll(transform.position, Vector2.one, 0, Vector2.up);
            if(hitArea != null)
            {
                for(int i = 0; i < hitArea.Length; i = i+1)
                {
                    if(hitArea[i].collider.tag == "Enemy")
                    {
                        // do stuff
                    }

                }
            }

            meeleAttackStart = Time.time;
        }          
    }
    ...
}

这是我的敌人代码(仍在进行中)

{
    public int maxSlimeHealth = 40;
    public int curSlimeHealth = 40;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

1 个答案:

答案 0 :(得分:2)

简单和糟糕的解决方案是使用hitArea[i].collider.gameObject.GetComponent<TYPE_OF_YOUR_COMPONENT>().curSlimeHealth;
但是如果你想以更优雅的方式做到这一点,我建议制作一个接口,例如。 IMortal或基类CreatureBehaviour然后只调用该接口/抽象类的方法。在示例中,它可能是这样的:

public class CreatureBehaviour
    : MonoBehaviour
{
    int m_Health = 40;
    public int Health { get { return m_Health; } }

    // you can add defense attribute 
    int m_Defense;
    public int Defense { get { return m_Defense; } }

    public void DoDamage(double atkPower)
    {
        // calculate this creature defence agains attack power
        int damage = atkPower - this.Defense;
        m_Health -= damage;
        // check health and other stuff.
    }
}

现在创造你的粘液:

public class Slime
    : CreatureBehaviour
{

}

你可以用类似的方式使用它,但不要检查你的hitArea[i].collider.tag"Enemy"还是"AnotherTag",你可以查看:

var creature = hitAread[i].collider.gameObject.GetComponent<CreatureBehaviour>();
if ( creature )
    creature.DoDamage(13.37D);