Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Программирование в Unity Шаг 194 из 210

5. Испытание на удар

Цели обучения

Проверьте коллизии и убедитесь, что LostCrypt не имеет ошибок, которые позволяют вашему персонажу перемещаться за пределы карты.

2010 год

Посмотрите на GameObject Environment/Character Bounds - Left. Вы видите, что он расположен слева от нашей карты 2D. Он предназначен для защиты игроков от выхода из карты и попадания в текстуры. Посмотрим, выполняет ли он свою задачу.

  1. Добавить новый тест MainScene\_CharacterDoesNotFallIntoTextures в MovementTest.cs.
  2. Сделайте ваш персонаж двигаться влево и иногда прыгать с некоторым интервалом ожидания между прыжками.
  3. В тесте, Утверждаем, что Сара Вариант позиция игрового объекта находится в пределах нашей текущей сцены.

Подсказки

  • Аналогично предыдущему тесту, давайте установим какое-то произвольное количество секунд как тайм-аут. Сара должна оставаться в пределах сцены в течение указанного времени.
  • Вы можете использовать WaitForSeconds(0.5f) между прыжками, чтобы лучше эмулировать поведение Пользователя.
  • Изучите Scene и hardcode X, и Y позиции, используемые для проверки вне карты, или лучше — получить его динамически из Character Bounds - Left игрового объекта.

Решение

MovementTest.cs

using System.Collections;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.SceneManagement;

public class MovementTest
{
    const float _testTimeout = 20.0f;
    private Transform _characterTransform;

    [UnityTest]
    public IEnumerator MainScene_CharacterDoesNotFallIntoTextures()
    {
        SceneManager.LoadScene("Assets/Scenes/Main.unity", LoadSceneMode.Single);
        yield return waitForSceneLoad();

        yield return GoLeft();
        while (Time.timeSinceLevelLoad < _testTimeout)
        {
            yield return new WaitForSeconds(0.5f);
            yield return Jump();
            if (GetCurrentCharacterPosition().x < -75f && GetCurrentCharacterPosition().y < -10f)
            {
                Assert.Fail("Character escaped the map and fell into textures! :(");
            }
        }
    }

    private Vector3 GetCurrentCharacterPosition()
    {
        // Get Main character's Transform which is used to manipulate position.
        if (_characterTransform == null)
        {
            _characterTransform = GameObject.Find("Sara Variant").transform;
        }

        return _characterTransform.position;
    }

    private IEnumerator Jump()
    {
        TestInputControl.Jump = true;
        yield return null;
        TestInputControl.Jump = false;
    }

    private IEnumerator GoLeft()
    {
        TestInputControl.MoveRight = false;
        yield return null;
        TestInputControl.MoveLeft = true;
    }

    private IEnumerator waitForSceneLoad()
    {
        while (SceneManager.GetActiveScene().buildIndex > 0)
        {
            yield return null;
        }
    }
}

Наш тест не сработал, у нас есть ошибка в одном из наших проектов Sample Unity. Как бы вы подходили к решению этой проблемы? Есть много возможностей, продолжайте и попробуйте исправить ее в рамках этого обучения:

  • Представлен новый коллайдер Character Bounds Box, который предотвратит возникновение ошибки.
  • Переработанная логика столкновений персонажа Сара.