为什么不注册其他类方法的变量?

时间:2019-09-12 22:09:18

标签: c# unity3d

我的参数方法中的变量未在另一个类中调用。

我试图告诉它我们正在从playerlivesdisplayed类获取PlayerdmgAmount。我收到一条错误消息,指出PlayerLivesDisplay无法转换为int。

因此,我将其注释掉并再次写入int值。该代码运行,但是没有按照我想要的去做。

public class PlayerLivesDisplay : MonoBehaviour
{

    public void takeLives(int PlayerdmgAmount)
    {
        playerLives -= PlayerdmgAmount;
        displayUpdate();

        if (playerLives <= 0)
        {
            //TODO load mainMenu
        }
    }

}//playerLives

public class DamgePlayer : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D othercollision)
    {
        //PlayerLivesDisplay PlayerdmgAmount = GetComponent<PlayerLivesDisplay>()

        int PlayerdmgAmount = 1;
        FindObjectOfType<PlayerLivesDisplay>().takeLives(PlayerdmgAmount);
    }
}

public class Attacker : MonoBehaviour
{
    [Range(0f, 10f)] [SerializeField] float walkSpeed = 1f;
    [SerializeField] int PlayerdmgAmount = 1;
    GameObject currentTarget;

    public void hurtplayer(int PlayerdmgAmount)
    {
        FindObjectOfType<PlayerLivesDisplay>().takeLives(PlayerdmgAmount);

    }

}

我要实现的目标:

  1. 攻击者脚本上标有Player dmg数量。

Golem1 =夺走5条生命

Fox:夺走2条生命

  1. 将这些变量(发生冲突时)传递给玩家健康伤害(DamagePlayer脚本)

  2. 然后转到播放器生命显示类takeLives方法,并将伤害变量输入到从攻击者脚本启动的参数中。

1 个答案:

答案 0 :(得分:1)

如果您的takeLives方法使用一个int变量作为参数,则无法传递PlayerLivesDisplay对象,则需要传递一个int(这就是错误所在关于)。 PlayerLivesDisplay可能包含PlayerdmgAmount(因此int),但本身并不包含PlayerdmgAmount。 根据您要完成的工作,您可以执行以下操作:

在您的PlayerLivesDisplay中添加一个属性,并使用它存储以后需要获取的值:

public class PlayerLivesDisplay : MonoBehaviour
{
    ...
    public int PlayerdmgAmount { get; set; }
    ...
    public void takeLives(int playerdmgAmount)
    {
        ...
        this.PlayerdmgAmount = playerdmgAmount;
    }

}

现在您可以访问其他类中的值:

public class DamgePlayer : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D othercollision)
    {
        int playerdmgAmount = GetComponent<PlayerLivesDisplay>().PlayerdmgAmount;
        ...
    }
}