Пытаюсь написать простой скрипт для управления объектом, но не работает последняя часть кода

Рейтинг: 0Ответов: 1Опубликовано: 22.07.2023
 private Rigidbody playerRb;
public float speed = 4f;
public float jumpForce = 12;
public float gravityModifier;
public bool isOnGround = true;
public bool gameOver = false;
public float verticalInput;
public float horizontalInput;
public float zUpperBound = 1.3f;
public float zLowerBound = -1.3f;
private float xBound = 10;
// Start is called before the first frame update
void Start()
{
    playerRb = GetComponent<Rigidbody>();
    Physics.gravity *= gravityModifier;
    
}

// Update is called once per frame
void Update()
{
    

    if(Input.GetKeyDown(KeyCode.Space) && isOnGround && !gameOver)
    {
      playerRb.AddForce(Vector3.up * jumpForce , ForceMode.Impulse);
      isOnGround = false;
    }

    verticalInput = Input.GetAxis("Horizontal");
    transform.Translate(Vector3.forward * Time.deltaTime * verticalInput * speed);

    if (transform.position.z < zLowerBound)
    {
        transform.position = new Vector3(transform.position.x, transform.position.y, zLowerBound);    
    }
    if (transform.position.z > zUpperBound)
    {
        transform.position = new Vector3(transform.position.x, transform.position.y, zUpperBound);
    }
    
}

private void OnCollisionEnter(Collision collision)

{
   if (collision.gameObject.CompareTag("Ground"))
   {
    isOnGround = true;
   }
}

public void GameOver()
{
    if(transform.position.x > xBound && !gameOver) 
    {
        gameOver = true;
        Debug.Log("Game Over!");
    } 
}  

после того как позиция игрока становится больше заданной границы ничего не происходит. НО! Когда я вставляю последние три строки кода в метод Update все работает как надо. Я уже менял доступ своего метода GameOver и на public и на private, ошибки программа не выдаёт

Ответы

▲ 0

Вы нигде не вызываете метод GameOver, потому код в нем и не работает.

Предлагаю внести следующие изменения:

...
void Update()    // Вызывается каждый кадр
{
    ...
    if(transform.position.x > xBound && !gameOver)    // Обнаружили выход персонажа за границу
    {
        GameOver();   // Вызвали GameOver()
    } 
    ...
}
...
private void GameOver()
{
    gameOver = true;
    Debug.Log("Game Over!");
}