我有一个“玩家”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
。
答案 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");