Если заявление не работает Unity C # - PullRequest
0 голосов
/ 26 июня 2018

РЕДАКТИРОВАТЬ: Да, я в последнее время кодирую на Python и я перепутал синтаксис между двумя языками. Спасибо за советы по улучшению.

Моя цель - заставить операторы if работать и выводить соответствующие нормальные, средние и сложные значения. Eventhough GameDifficulty установлен в 2, он выводит жесткий вместо среднего. Я заметил, что он просто выводит последний бит оператора if. Это действительно странно.

Я определяю GameDifficulty как 2. Когда я запускаю скрипт, Text11 становится «жестким» вместо Medium. Я понятия не имею, почему это происходит.

Спасибо

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class DifficultyDisplayOnWinScreen : MonoBehaviour {
    public int GameDifficulty;
    public GameObject Text11;
    public string diffi;
    void Start () 
    {

        //GameDifficulty = DifficultyChooser.DifficultyNumber;
        GameDifficulty = 2;

    }

    void Update () 
    {
        //GameDifficulty = DifficultyChooser.DifficultyNumber;
        if (GameDifficulty == 3);
        {
            Text11.GetComponent<Text> ().text = "Normal";
        }       
        if (GameDifficulty == 2);
        {
            Text11.GetComponent<Text> ().text = "Medium";
        }
        if (GameDifficulty == 1);
        {
            Text11.GetComponent<Text> ().text = "Hard";
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Удалить ; после if -условий:

if (GameDifficulty == 3)
{
    Text11.GetComponent<Text>().text = "Normal";
}
if (GameDifficulty == 2)
{
    Text11.GetComponent<Text>().text = "Medium";
}
if (GameDifficulty == 1)
{
    Text11.GetComponent<Text>().text = "Hard";
}

Объяснение: ; завершает оператор if, делая его пустым оператором. Это связано с тем, что в C # разрешены однострочные операторы if, а ; определяет, где они заканчиваются.

0 голосов
/ 26 июня 2018

РЕДАКТИРОВАТЬ : я даже не заметил ; s, да, удалите точки с запятой, и это должно работать.

if (GameDifficulty == 3)
{
    Text11.GetComponent<Text>().text = "Normal";
}       
if (GameDifficulty == 2)
{
    Text11.GetComponent<Text>().text = "Medium";
}
if (GameDifficulty == 1) //if there is only 3 difficulties in this line you can use just else
{
    Text11.GetComponent<Text>().text = "Hard";
}

Или используйте if/else

if (GameDifficulty == 3)
{
    Text11.GetComponent<Text>().text = "Normal";
}       
else if (GameDifficulty == 2)
{
    Text11.GetComponent<Text>().text = "Medium";
}
else if (GameDifficulty == 1) //if there is only 3 difficulties in this line you can use just else
{
    Text11.GetComponent<Text>().text = "Hard";
}

и в этом случае лучше использовать switch/case:

switch(GameDifficulty)
{
    case 1:
        Text11.GetComponent<Text>().text = "Hard";
        break;

    case 2:
        Text11.GetComponent<Text>().text = "Medium";
        break;

    case 3:
        Text11.GetComponent<Text>().text = "Normal";
        break;
}

или у вас может быть словарь трудностей, например:

Dictionary<int, string> difficulties = new Dictionary<int, string>()
{
    {1, "Hard" },
    {2, "Medium" },
    {3, "Normal" }
};

и используйте его как:

Text11.GetComponent<Text>().text = difficulties[GameDifficulty];

или enum (существует множество способов сделать его более читабельным и простым, поэтому я закончу свои примеры этим)

enum Difficulties
{
    Hard = 1,
    Medium = 2,
    Normal = 3
}

использование:

Text11.GetComponent<Text>().text = ((Difficulties)GameDifficulty).ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...