Как я могу переключить свой код с UnityScript на C# (csharp)?

Этот скрипт (код) отлично работает в UnityScript, но теперь я хочу переключить его на C#. Это то, что у меня есть до сих пор. Я думаю, что есть проблема с «transform.position» и созданием «случайной позиции» для моего персонажа. Наверное, это очень просто, но я новичок в C#, поэтому, пожалуйста, помогите мне.

public class AntScript : MonoBehaviour 
{
    public GameObject ant;
    public GameObject scoreText;
    public GameObject livesText;
    public double walkingSpeed = 0.0f;
    public int livesNumber = 3;
    public int scoreNumber = 0;
    float x;
    float y;

    void Start() {   ant = GameObject.Find("Ant");
        scoreText = GameObject.Find("Score");
        livesText = GameObject.Find("Lives");

        //Initialize the GUI components
        livesText.GetComponent<Text>().text = "Lives Remaining: " + livesNumber;
        scoreText.GetComponent<Text>().text = "Score: " + scoreNumber;

        //Place the ant in a random position on start of the game
        ant.transform.position.x = generateX();
        ant.transform.position.y = generateY();
    }

    void Update()
    {
        Vector3 p = transform.position;

        if (ant.transform.position.y < -4.35 && livesNumber > 0)
        {

            livesNumber -= 1;
            livesText.GetComponent<Text>().text = "Lives Remaining: " + livesNumber;
            generateCoordinates();

        }
        else if (ant.transform.position.y < -4.35 && livesNumber == 0)
        {
            Destroy(GameObject.Find("Ant"));
            gameOver();

        }
        else
        {
            ant.transform.position.y -= walkingSpeed;
        }
    }

    void gameOver()
    {
        Application.LoadLevel("GameOver");
    }


    //Generates random x
    void generateX()
    {
        x = Random.Range(-2.54f, 2.54f);
        //return x;
    }

    //Generates random y
    void generateY()
    {
        y = Random.Range(-4.0f, 3.8f);
        //return y;
    }

    //Move the "Ant" to the new coordiantess
    void generateCoordinates()
    {
        //You clicked it!
        scoreNumber += 1;

        //Update the score display
        scoreText.GetComponent<Text>().text = "Score: " + scoreNumber;
        ant.transform.position.x = generateX();
        ant.transform.position.y = generateY();
    }

    //If tapped or clicked
    void OnMouseDown()
    {
        //Place the ant at another point
        generateCoordinates();

        //Increase the walking speed by 0.01
        walkingSpeed += 0.01f;
    }
}
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
3
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это действительно причуда С#, сначала мне потребовалось некоторое время, чтобы понять это.

Проблема в том, что transform.position — это не поле, это сеттер/геттер (это пара внутренних методов, представьте его как Vector3 GetPosition() и SetPosition (Vector3), что означает, что вам нужно передать в него целую структуру, вы не можете просто установить x или y (поскольку метод не может быть вызван, пока у вас нет всех параметров. Обходной путь действительно прост, к счастью

Vector3 temp = ant.transform.position; // use a getter
temp.x = generateX();                  // modify a struct
temp.y = generateY();
ant.transform.position=temp;           // use a setter

Хорошо, но теперь у меня проблемы с generateX() и Y()..."Невозможно неявно преобразовать тип "void" в "float". ", а в других местах эта временная переменная уже не решает проблему... I' м очень плохо, извините... :D

Soos Istvan 22.05.2019 13:12

потому что вы не возвращаете y, а ваши generateX и generateY помечены как недействительные как невозвратные. Вместо переменных уровня класса они пытались заставить вас вернуть переменную из метода

BugFinder 22.05.2019 13:40

@soosistvan у вас есть операторы возврата в ваших методах, просто раскомментируйте их (и измените тип возврата с void на float)

zambari 22.05.2019 15:53

Затем вы можете снова сократить его до одной строки, используя transform.position = new Vector3(generateX(), generateY(), transform.position.z); или, в случае 2D-приложения, просто new Vector2(generateX(), generateY())

derHugo 23.05.2019 18:00

Другие вопросы по теме