игрок умирает, когда он касается пола - PullRequest
0 голосов
/ 29 мая 2019

Я сделал игру, следуя инструкциям на YouTube https://www.youtube.com/playlist?list=PLPV2KyIb3jR5QFsefuO2RlAgWEz6EvVi6 Я нахожусь в эпизоде ​​8, и когда я запускаю игру, появляется текст конца игры, и я предполагаю, что это потому, что игрок касается земли, я не вижу никакой разницымежду созданной мной кодировкой и YouTuber

GAME MANAGER: с использованием UnityEngine;

public class GameManager : MonoBehaviour
{
bool gameHasEnded = false;
// Start is called before the first frame update
public void EndGame ()
{
    if (gameHasEnded == false)
    {
        gameHasEnded = true;
        Debug.Log("GAME OVER");

    }


}
}

ИГРОВЫЕ КОЛЛИЗИИ: с использованием UnityEngine;

public class PlayerCollision : MonoBehaviour
{

public PlayerMovement movement;

void OnCollisionEnter (Collision collisionInfo)
{
    if (collisionInfo.collider.tag == "Block")
    {
        movement.enabled = false;
    }   FindObjectOfType<GameManager>().EndGame();
}
}

ДВИЖЕНИЕ ИГРОКА:

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{   //to substitute rigidbody to rb
public Rigidbody rb;

public float forwardForce = 2000f;

public float sidewaysForce = 500f;

// Update is called once per frame
void FixedUpdate()
{
    //add forward force
    rb.AddForce(0, 0, forwardForce * Time.deltaTime);
    //only exectued if condition is met
    if ( Input.GetKey("d") )
    {
        rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, 
ForceMode.VelocityChange);


    }

    if (Input.GetKey("a"))
    {
        rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, 
ForceMode.VelocityChange);


    }
    if (rb.position.y < -1f)
    {
       FindObjectOfType<GameManager>().EndGame();
    }

}
}

1 Ответ

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

Проблема здесь:

void OnCollisionEnter (Collision collisionInfo)
{
    if (collisionInfo.collider.tag == "Block")
    {
        movement.enabled = false;
    }   FindObjectOfType<GameManager>().EndGame();// <--- It is outside the if
}

Должно быть так:

void OnCollisionEnter (Collision collisionInfo)
{
    if (collisionInfo.collider.tag == "Block")
    {
        movement.enabled = false;
        FindObjectOfType<GameManager>().EndGame();
    }
}

Он заканчивал игру всякий раз, когда вы сталкивались с чем-то, вместо того, чтобы делать это, когда это только блок.

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