Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多人游戏中盗取敌人点数_C#_Unity3d_Multiplayer_Unity5 - Fatal编程技术网

C# 多人游戏中盗取敌人点数

C# 多人游戏中盗取敌人点数,c#,unity3d,multiplayer,unity5,C#,Unity3d,Multiplayer,Unity5,我有一个“玩家”gameObject,它在serverinitialized()上生成。 当GetComponent().isMine时,标签“敌人”变为“玩家” 我想做一些像: void OnTriggerEnter (Collider Enemy){ if (ScoreManager.score > Enemy.Score) { ScoreManager.score = ScoreManager.score + Enemy.Score; }

我有一个“玩家”
gameObject
,它在serverinitialized()上生成
。
当
GetComponent().isMine
时,标签“敌人”变为“玩家”

我想做一些像:

void OnTriggerEnter (Collider Enemy){ 
    if (ScoreManager.score > Enemy.Score) {
            ScoreManager.score = ScoreManager.score + Enemy.Score;
    }
    else if (ScoreManager.score < Enemy.Score) {
Destroy (gameObject);
    }
}
void ontriggenter(对撞机敌人){
如果(ScoreManager.score>敌方.score){
ScoreManager.score=ScoreManager.score+敌人.score;
}
否则如果(ScoreManager.score<敌方.score){
摧毁(游戏对象);
}
}
但我不知道如何获得敌人玩家的点数

我的ScoreManager脚本:

public static int score;

Text text;

void Awake () {
    text = GetComponent <Text> ();
    score = 0;  
}
void Update () {    
    text.text = "Score: " + score;
 }
}
publicstaticint分数;
文本;
无效唤醒(){
text=GetComponent();
得分=0;
}
无效更新(){
text.text=“分数:”+分数;
}
}
当您使用GetComponent时,它被附加到GUI文本
gameObject
名为
ScoreText

1)始终检查空值

2) 不要使用GetComponent。通过在
文本上方添加
[System.Serializable]
来序列化变量(或使其公开)并在inspector(文本组件)中拖放

3) 您不必每帧刷新分数,只需在分数更改时刷新。这应该使用事件来完成

为了访问敌人的点,你可以使用,并使用“敌人”,只要敌人有这个标签。您可以通过这种方式获得对敌人游戏对象的引用。然后访问它的score组件

例如:

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");
ScoreManager-enemyScoreManager=null;
GameObject enemyReference=GameObject.FindWithTag(“敌人”);
if(enemyReference!=null)
EnemyCoreManager=enemyReference.GetComponent();
如果(enemyScoreManager!=null)
{
enemyScoreManager.score-=5;//盗取5分
myScore.score+=5;//假设myScore是对分数管理器的引用
}
其他的
Debug.LogError(“未找到敌人”);
1)当您使用GetComponent时,请始终检查null

2) 不要使用GetComponent。通过在
文本上方添加
[System.Serializable]
来序列化变量(或使其公开)并在inspector(文本组件)中拖放

3) 您不必每帧刷新分数,只需在分数更改时刷新。这应该使用事件来完成

为了访问敌人的点,你可以使用,并使用“敌人”,只要敌人有这个标签。您可以通过这种方式获得对敌人游戏对象的引用。然后访问它的score组件

例如:

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");
ScoreManager-enemyScoreManager=null;
GameObject enemyReference=GameObject.FindWithTag(“敌人”);
if(enemyReference!=null)
EnemyCoreManager=enemyReference.GetComponent();
如果(enemyScoreManager!=null)
{
enemyScoreManager.score-=5;//盗取5分
myScore.score+=5;//假设myScore是对分数管理器的引用
}
其他的
Debug.LogError(“未找到敌人”);