Динамически отображать текст и выходить - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь сделать простую игру в стиле раннеров в единстве и столкнулся с проблемой: когда игрок «умирает», на экране вспыхивают счет и игра переполняются, чередуя кадры.

IЯ новичок в C # и не знаю, что еще попробовать.

using UnityEngine;
using UnityEngine.UI;

public class PlayerCollision : MonoBehaviour{
        public PlayerMovement movement;
        private int lives = 0;
        public Transform player;
        public Text scoreText;
        public Rigidbody rb = null;
        private bool abort = false;
    void OnCollisionEnter (Collision collisionInfo) {
        if (collisionInfo.collider.tag == "Obstacle") {
            if (lives >= 3) {
                movement.enabled = false;
                Debug.Log("We Hit the thing");
                Debug.Log(movement);
                rb.AddForce(0, 0, 0);
                transform.position = new Vector3(0,1,-30);
                scoreText.text = "Level failed - Press C to try again";

                rb.AddForce(0, 0, 0);
            } else {
                lives = lives + 1;
            }
        }
    }

void FixedUpdate()
    {
        if (scoreText.text == "-30") {
            //DISPLAY TEXT AND LEAVE THE VOID FIXEDUPDATE()
            scoreText.text = "Level failed - Press C to try again";
            return;
        } else {
            //CONTINUE RUNNING THIS UNTILL -30 IS REACHED
            scoreText.text = player.position.z.ToString("0");
        }
    }

void Update() {
    if ( Input.GetKey("c") ) {
        movement.enabled = true;
            transform.position = new Vector3(0,1,0);

            lives = 0;
        }
    }
}

Вот ссылка на github https://raw.githubusercontent.com/jackcrane/jackcrane.github.io/master/PlayerCollision.cs

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Решение

Всегда старайтесь набирать очки в PlayerPrefs, что является важной особенностью единства для сохранения счета.Если вы не хотите показывать счет или счет.просто используйте объект текста и установите пустую строку для текста.Просто .Преимущество использования PlayerPref заключается в том, что он будет хранить окончательный или конечный счет игрока, а затем даже пустую строку.Тем не менее счет будет храниться отдельно.Поэтому всякий раз, когда вы хотите получить значение этого балла, просто используйте Playerpref.getInt («Score»);Счет будет получен в любой переменной и может быть использован в дальнейшем.

Код для создания пустой строки

if (scoreText.text == "-30") {
    //DISPLAY TEXT AND LEAVE THE VOID FIXEDUPDATE()
    scoreText.text = "";
    return;
}

Код для PlaerPref: -

var myVariable : float;

PlayerPrefs.SetFloat("Player Score", 10.0);

myVariable = PlayerPrefs.GetFloat("Player Score");

print (myVariable);

Заключение

Результат можно получить и установить черезфункция playerprefs.Он использует понятия ключей и хранит в файлах.

0 голосов
/ 06 февраля 2019

Когда игрок мертв, scoreText.text будет установлен на «Уровень не пройден - нажмите C, чтобы повторить попытку», поэтому будет выполнен следующий код:

 else {
     //CONTINUE RUNNING THIS UNTILL -30 IS REACHED
     scoreText.text = player.position.z.ToString("0");
 }

Тогда scoreText.text будетизменено на «-30»

Так будет выполнен следующий фиксированный кадр обновления:

if (scoreText.text == "-30") {
    //DISPLAY TEXT AND LEAVE THE VOID FIXEDUPDATE()
    scoreText.text = "Level failed - Press C to try again";
    return;
}

Теперь текст был изменен обратно на «Уровень не пройден - нажмите C, чтобы повторить попытку», циклы.

Я не знаю, как это исправить, потому что логика у вас в голове.

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