在多人游戏中窃取敌人点数

时间:2015-06-13 11:48:13

标签: c# unity3d multiplayer unity5

我有一个“玩家”gameObject,它会产生OnServerInitialized()。 当GetComponent<NetworkView>().isMine时,它的标签“Enemy”会更改为“播放器”。

我想做点什么:

void OnTriggerEnter (Collider Enemy){ 
    if (ScoreManager.score > Enemy.Score) {
            ScoreManager.score = ScoreManager.score + Enemy.Score;
    }
    else if (ScoreManager.score < Enemy.Score) {
Destroy (gameObject);
    }
}

但我不知道如何获得产生的敌方玩家的积分。

我的ScoreManager脚本:

public static int score;

Text text;

void Awake () {
    text = GetComponent <Text> ();
    score = 0;  
}
void Update () {    
    text.text = "Score: " + score;
 }
}

它附加到名为gameObject的GUI文本ScoreText

1 个答案:

答案 0 :(得分:0)

1)当你使用GetComponent时,总是检查null。

2)不要使用GetComponent。通过在[System.Serializable]之上添加Text text;并在检查器(文本组件)中拖放来序列化变量(或公开)。

3)您不必每帧都刷新得分,只有在它发生变化时。这应该使用事件来完成。

为了获得敌人的分数,你可以使用GameObject.FindWithTag,并使用“敌人”,前提是敌人拥有此标记。你可以通过这种方式获得对敌人游戏对象的引用。然后访问其得分组件。

例如:

ScoreManager enemyScoreManager = null;
GameObject enemyReference = GameObject.FindWithTag("Enemy");
if (enemyReference !=null)
    enemyScoreManager = enemyReference.GetComponent<ScoreManager>();
if (enemyScoreManager != null)
{
    enemyScoreManager.score -=5; //steal 5 points
    myScore.score +=5; //assuming myScore is a reference to your score manager
}
else
    Debug.LogError("Enemy not found");