Использование оператора switch для перемещения символа - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь заставить NP C в своей игре двигаться с помощью оператора switch, но он не работает.

Сначала я использую функцию, чтобы выбрать число от 0 до 3, затем Я использую оператор switch:

void Start()
    {

       int randomNumber = Random.Range(0, 3);

        switch (randomNumber)
        {
            case 0:// the npc moves towards
                targetPosition.y = 1.4f;
                targetPosition.x = this.transform.position.x;
                targetPosition.z = this.transform.position.z - 3;
                this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity * Time.deltaTime);
                break;

            case 1://the npc moves back
                targetPosition.y = 1.4f;
                targetPosition.x = this.transform.position.x;
                targetPosition.z = this.transform.position.z + 3;
                this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity * Time.deltaTime);
                break;

            case 2://the npc moves right
                targetPosition.y = 1.4f;
                targetPosition.x = this.transform.position.x - 3;
                targetPosition.z = this.transform.position.z;
                this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity * Time.deltaTime);
                break;

            case 3://the npc moves left
                targetPosition.y = 1.4f;
                targetPosition.x = this.transform.position.x + 3;
                targetPosition.z = this.transform.position.z;
                this.transform.position = Vector3.MoveTowards(transform.position, targetPosition, velocity * Time.deltaTime);
                break;

            default: break;
        }
    }

Число создается, но NP C не перемещается. Что я здесь делаю не так?

1 Ответ

1 голос
/ 07 мая 2020

Если вам нужна начальная позиция с первым ходом, используйте startCoroutine ..

void Start()
{
   StartCoroutine(FirstMove(Random.range(0,4));
}

public IEnumerator MoveToPosition(Transform transform, Vector3 position, float timeToMove)
{
    var currentPos = transform.position;
    var t = 0f;
    while (t < 1f)
    {
        t += Time.deltaTime / timeToMove;
        transform.position = Vector3.Lerp(currentPos, position, t);
        yield return null;
    }
    transform.position = position;
}


private void Firstmove(int randomNumber)
{

    //Vector3 targetPosition = new Vector3();
    //float velocity = 10.0f;
    switch (randomNumber)
    {
        case 0: // the npc moves towards
            targetPosition.y = 1.4f;
            targetPosition.x = this.transform.position.x;
            targetPosition.z = this.transform.position.z - 3;
            break;

        case 1: //the npc moves back
            targetPosition.y = 1.4f;
            targetPosition.x = this.transform.position.x;
            targetPosition.z = this.transform.position.z + 3;
            break;

        case 2: //the npc moves right
            targetPosition.y = 1.4f;
            targetPosition.x = this.transform.position.x - 3;
            targetPosition.z = this.transform.position.z;
            break;

        case 3: //the npc moves left
            targetPosition.y = 1.4f;
            targetPosition.x = this.transform.position.x + 3;
            targetPosition.z = this.transform.position.z;
            break;

        default: break;
    }

    StartCoroutine(MoveToPosition(transform, targetPosition, 2f));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...