Почему мой код не работает в Unity?Unity C # - PullRequest
0 голосов
/ 03 октября 2018

Почему-то мой код не работает ... Я понятия не имею, почему.может кто-нибудь помочь?Я использую оператор switch для управления моим кодом:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        Vector3 pos = transform.position;
        string state = "idle";
        float vx = 0f;
        float vy = 0f;
        float playerSpeed = 2f * Time.deltaTime;

        switch (state) {
            case "idle": 
                vx = 0;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;

            case "left":
                vx = -1 * playerSpeed;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;

            case "right":
                vx = playerSpeed;
                vy = 0;

                if (Input.GetKey (KeyCode.A)) state = "left";
                if (Input.GetKey (KeyCode.D)) state = "right";
                if (!Input.GetKey (KeyCode.D) && !Input.GetKey (KeyCode.A)) state = "idle";             
                break;
        }
        vx += pos.x;
        vy += pos.y;
        pos += transform.position;

    }
}

В консоли нет ошибок, и я не вижу ошибок с моим кодом ...

Пожалуйста, помогите!

любые ответы приветствуются.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Видите ли, я чувствую, что «состояние» каждый раз сбрасывается в «Холостой».Можете ли вы попробовать переместить эту функцию string state = "idle"; Start (), а затем добавить эту state = "idle"; куда-нибудь еще, например, под

   vx += pos.x;
   vy += pos.y;
   pos += transform.position;

Вы видите, что у вас есть Switch Switch Case.который передаст код один раз, вы видите эти разрывы?вот почему они не вводят и не получают изменения значений на ваших VX и VY.Я предлагаю вам использовать If Else вместо переключателя для определения входа.

0 голосов
/ 03 октября 2018

Вы оцениваете свой вклад в каждом случае коммутатора, а не перед тем, как оценивать коммутатор.Вы также проверяете ввод и затем его отсутствие, поэтому просто используйте else для очистки этих проверок.Вы также ничего не делаете, кроме vy = 0, поэтому не беспокойтесь о том, чтобы установить:

if (Input.GetKey (KeyCode.A))
    state = "left";
else if (Input.GetKey (KeyCode.D)) // if you hold both A and D, A will get priority
    state = "right";
else
    state = "idle";
switch(state)
{
    case("idle")
        vx = 0;
        break;
    case("left")
        vx = playerSpeed;
        break;
    case("right")
        vx = -1 * playerSpeed;
        break;
}

Вы также не добавляете значения в позицию преобразования должным образом, вы просто добавляете ихк вашей временной переменной pos (переменная, которая вам вообще не нужна):

vx += pos.x;
vy += pos.y;
pos += transform.position;

вместо этого должно быть:

transform.position.Translate(vx, vy, 0);

Мне бы тоже хотелосьуказать, что сам переключатель совершенно бессмыслен, но я сделал это своим ответом, чтобы было ясно, что делается неправильно;вам просто нужно установить значения vx в операторах if / else if / else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...