Я делаю такую ​​игру, как Crossy Roads на Unity, проблема в том, почему игрок улетает - PullRequest
0 голосов
/ 29 мая 2019

В основном, когда игрок сталкивается с препятствием, идущим вверх, игра генерирует полосу, это нормально, проблема в том, что если он ударил препятствие 3 раза, переместится в сторону и подпрыгнет, не задев препятствие, игрок будет прыгать 4 полосы вместо 1 ...

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

internal void SpawnNewStrip()     
{
    int stripsPrefabCount = poolOfStripsPrefabs.Length;
    int randomNumber = Random.Range (0, stripsPrefabCount);

    GameObject item = poolOfStripsPrefabs [randomNumber] as GameObject;

    Transform itemChildTransform = item.transform.GetChild(0) as Transform;
    Transform itemChildOfChildTranform = itemChildTransform.GetChild (0) as Transform;

    float itemWidth = itemChildOfChildTranform.gameObject.GetComponent<Renderer> ().bounds.size.x;

    GameObject lastStrip = strips [strips.Count - 1] as GameObject;

    GameObject newStrip = Instantiate (item, lastStrip.transform.position, lastStrip.transform.rotation) as GameObject;
    newStrip.transform.position = new Vector3 (newStrip.transform.position.x -  itemWidth, newStrip.transform.position.y, newStrip.transform.position.z);
        strips.Add (newStrip);
}

internal void JumpUp()
{
    if(gameIsPlaying == false)
            return;

    stripsCurrentIndex += 1;

    if (stripsCurrentIndex > indexOfTheHighestRoadStrip) 
    {
        Score += 1;
        scoreText.text = "Score: " + Score.ToString();
        indexOfTheHighestRoadStrip = stripsCurrentIndex;
        Debug.Log("new  score: " + indexOfTheHighestRoadStrip.ToString());
    }

    GameObject nextStrip = strips [stripsCurrentIndex] as GameObject;

    JumpTargetLocation = new Vector3 (nextStrip.transform.position.x - jumpOffsetX, transform.position.y, transform.position.z);
    midWayPointX = JumpTargetLocation.x + ((this.transform.position.x - JumpTargetLocation.x) / 2);

    mesh.transform.localEulerAngles = new Vector3 (0, 180, 0);

    SpawnNewStrip();

    float distanceX = this.transform.position.x - JumpTargetLocation.x;
    BoundaryLeft.transform.position -= new Vector3 (distanceX, 0, 0);
    BoundaryRight.transform.position -= new Vector3 (distanceX, 0, 0);
}


internal void JumpDown()
{
    if(gameIsPlaying == false)
        return;

    stripsCurrentIndex -= 1;

    if (stripsCurrentIndex < 0) 
    {
        stripsCurrentIndex = 0;
        return;
    }

    GameObject previousStrip = strips [stripsCurrentIndex] as GameObject;

    JumpTargetLocation = new Vector3 (previousStrip.transform.position.x - jumpOffsetX, transform.position.y, transform.position.z);
    midWayPointX = JumpTargetLocation.x - ((JumpTargetLocation.x - this.transform.position.x) / 2);

    mesh.transform.localEulerAngles = new Vector3 (0, 0, 0);

    float distanceX = JumpTargetLocation.x - this.transform.position.x;
    BoundaryLeft.transform.position += new Vector3 (distanceX, 0, 0);
    BoundaryRight.transform.position += new Vector3 (distanceX, 0, 0);
}

Просто хотите, чтобы игрок прыгал нормально после столкновения с препятствием.

1 Ответ

0 голосов
/ 29 мая 2019

Так что, когда вы прыгаете, вы увеличиваете stripSurrentIndex на единицу.Это, однако, не уменьшается, если вы столкнулись с препятствием.Это означает, что если вы находитесь на stripCurrentIndex = 0 и прыгаете в препятствие три раза, это установит stripCurrentIndex = 3. Даже если ваша позиция не изменилась.Затем, когда вы прыгаете в сторону и подпрыгиваете, вы извлекаете полосу из stripCurrentIndex = 4. Таким образом, вы перепрыгиваете четыре пробела.

Так что вам придется либо уменьшать индекс при столкновении с препятствием, например, так.

if (isJumpingUp)
{
    offsetUpDown = 2.5f;
    stripCurrentIndex -= 1;
}

else if (isJumpingDown)
{
    offsetUpDown = -2.5f;
    stripsCurrentIndex += 1;
}

Поочередно рефакторинг вашего кода, чтобы индекс увеличивался только после того, как вы фактически достигли позиции.В моде «Установить цель» - «Делать фактическое движение» - «Индекс приращения».

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