1

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

我想做类似的东西:

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名为ScoreText.

4

1 回答 1

0

1)当您使用 GetComponent 时,请始终检查 null。

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

3)你不必每帧刷新分数,只有当它改变时。这应该使用事件来完成。

为了访问敌人的点,你可以使用GameObject.FindWithTag,如果敌人有这个标签,就使用“Enemy”。您可以通过这种方式获得对敌方游戏对象的引用。然后访问其分数组件。

例如:

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");
于 2015-06-24T16:36:09.197 回答