在多人游戏中窃取敌人积分

本文关键字:敌人 游戏 | 更新日期: 2023-09-27 17:55:48

我有一个生成OnServerInitialized()的"玩家"gameObject。它的标签"敌人"在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);
    }
}

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

我的分数管理器脚本:

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

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

在多人游戏中窃取敌人积分

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

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

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");