2014-01-10 5 views
1

Я пытаюсь создать очень простой сценарий боеприпасов в игровом движке под названием Unity.Невозможно «объединить» две переменные

C#:

public int ammoCount = 30; 
public string ammoText; 

void magazine() 
{ 
    ammoText = "AMMO " + ammoCount + "/30"; 

    if (Input.GetKey(KeyCode.Mouse0)) 
    { 
     ammoCount = - 1; 
    } 

    if (Input.GetKey(KeyCode.R)) 
    { 
     ammoCount = 30; 
    } 
} 

Так что я хочу сосредоточиться на это "ammoText = "AMMO" + ammoCountString + "/ 30";". Я искал в Google, и, как я вижу, это так, как должно быть.

Далее в моем коде я написал код, чтобы переменная отображалась на экране, но она показывает только «AMMO».

Есть ли ответы?

Спасибо вперёд.

-Mads

EDIT: Кажется, что это не мой сценарий. Извините ребята! Но, может быть, вы знаете, почему он не отобразит мою переменную?

Код для отображения переменной на экране: GUI.Label (новый Rect (10, 10, 100, 20), (ammoText));

+0

Я не понимаю. Какова ценность 'ammoCountString'? –

+0

О, прости! Это было то, что я пробовал раньше! Теперь его изменить :) – mads232

+0

Почтовый код, в котором вы печатаете переменную ammoText и другой связанный код. – scheien

ответ

2

Вашего сценарий кажется немного неудобно - не полностью уверен, как его называют или как вы выводите его на экран. Это метод в MonoBehaviour?

Вы можете выводить информацию об отладке в консоль Unity, написав Debug.WriteLine («Некоторый текст или переменная»), которая поможет вам понять, что происходит.

Помимо того факта, что код немного подробный, я не вижу проблем с тем, что вы пытаетесь сделать, хотя я не уверен, почему вы хотите получить значение -1 или 30, между. Вы пытаетесь удалить 1 боеприпасы из клипа, когда вы нажимаете Mouse0? Если да, используйте код, который я разместил ниже. Я также немного «улучшил» код, чтобы дать вам немного больше контроля. Некоторые из ваших переменных должны быть частными (хотя я не уверен на 100%, что в вашем случае), так как нет никакой пользы для доступа к ним через Unity Editor.

Хотя ваш код будет работать, когда я конкатенируюсь на C#, я стараюсь использовать string.Concat() или string.Format(), поскольку они делают вещи немного опрятными, и они немного более эффективны (что это еще одна тема).

public int ammoInFullClip = 30; 
private int currentAmmoCount = 30; 
private string ammoText; 

void magazine() 
{ 
    if (Input.GetKey(KeyCode.Mouse0)) 
    { 
     currentAmmoCount-= 1; 
    } 

    if (Input.GetKey(KeyCode.R)) 
    { 
     currentAmmoCount= ammoInFullClip; 
    } 

    ammoText = string.Format("AMMO {0}/{1}", currentAmmoCount, ammoInFullClip); 
} 

UPDATE

Используя код, вот полный пример, который должен работать, хотя я не проверял.

public class MyScript : MonoBehaviour { 
    public int ammoInFullClip = 30; 
    private int currentAmmoCount = 30; 
    private string ammoText; 

    private void UpdateMagazine() { 
     if (Input.GetKey(KeyCode.Mouse0)) { 
      currentAmmoCount -= 1; 
     } 

     if (Input.GetKey(KeyCode.R)) { 
      currentAmmoCount = ammoInFullClip; 
     } 

     ammoText = string.Format("AMMO {0}/{1}", currentAmmoCount, ammoInFullClip); 
    } 

    public void Update() { 
     UpdateMagazine(); 
    } 

    void OnGUI() { 
     Debug.WriteLine(ammoText); 
    } 
} 
+0

Спасибо за ваш ответ :) Да, я пытался удалить 1 боеприпасы для каждого выстрела. О, и прочитайте мой EDIT. Это делает мой исходный вопрос неуместным, но если кто-то из вас, ребята, знает такую ​​проблему, пожалуйста, не стесняйтесь отвечать на это тоже. – mads232

+0

Не совсем - по звукам этого, вы сбиваете с толку, как редактор единства использует переменные. Скорее, как работает область видимости C#. Я обновил свой ответ немного подробнее. Вам нужно защитить локальные переменные, сделав их частными и т. Д. – Spikeh

+0

Да, я был :) Я как бы понял это, как вы написали это: P 2 Вопросы. One: Почему вы делали ammoInFullClip общедоступным, а не частным, как другие? Двое: не стали ли они делать их непригодными для журнала пустот? Вы должны понимать, что у меня нет опытного программиста, поэтому я не очень разбираюсь в кодировании. (Как вы могли догадаться;)) Спасибо! – mads232

0

Объединяет строку и Int, если число после строки, вам не нужен пользователь ToString, просто используйте:

ammoText = "AMMO " + ammoCount + "/30"; 
+0

Обнаружено :) Это было просто то, что я пробовал. – mads232

0

Вам не нужно объявлять переменные как общественности только вы можете объявить, как показано ниже

междунар ammoCount = 30; string ammoText;

Ваша конкатенация будет работать без проблем.

Смежные вопросы