2015-06-13 2 views
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; 
} 
} 

Он прикреплен к GUI текста gameObject имени ScoreText.

ответ

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"); 
Смежные вопросы