Есть ли способ телепортировать игрока после того, как таймер обратного отсчета достигнет нуля? на единстве - PullRequest
0 голосов
/ 02 августа 2020

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

Я сделал базовый c таймер кода, который нашел в Интернете

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Timer : MonoBehaviour
{
    public float timeRemaining = 150;
    public bool timerIsRunning = false;
    public Text timeText;

    private void Start()
    {
        // Starts the timer automatically
        timerIsRunning = true;
    }

    void Update()
    {
        if (timerIsRunning)
        {
            if (timeRemaining > 0)
            {
                timeRemaining -= Time.deltaTime;
                DisplayTime(timeRemaining);
            }
            else
            {
                Debug.Log("Time has run out!");
                timeRemaining = 0;
                timerIsRunning = false;
            }
        }
    }

    void DisplayTime(float timeToDisplay)
    {
        timeToDisplay += 1;

        float minutes = Mathf.FloorToInt(timeToDisplay / 60);
        float seconds = Mathf.FloorToInt(timeToDisplay % 60);

        timeText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
    }
}

1 Ответ

1 голос
/ 02 августа 2020

У вас есть много способов выполнить «телепорт», но в основном это изменение позиции преобразования объекта, поэтому, если вы хотите, чтобы объект перешел в положение в трехмерном пространстве (0,1,0), просто назначьте его ему:

this.transform.position = new Vector3(0,1,0);

Для таймера вы можете использовать методы Invoke или InvokeRepeating или обратный отсчет, как у вас.

Таким образом, в вашем коде это будет выглядеть примерно так:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Timer : MonoBehaviour
{
///
    public GameObject objectToTeleport = null; //assign it from inspector or code
    public Vector3 destination = new Vector3(0,0,0); //assign it from inspector or code
///
    public float timeRemaining = 150;
    public bool timerIsRunning = false;
    public Text timeText;

    private void Start()
    {
        // Starts the timer automatically
        timerIsRunning = true;
    }

    void Update()
    {
        if (timerIsRunning)
        {
            if (timeRemaining > 0)
            {
                timeRemaining -= Time.deltaTime;
                DisplayTime(timeRemaining);
            }
            else
            {
                Debug.Log("Time has run out!");
                timeRemaining = 0;
                timerIsRunning = false;
                //Move object
                objectToTeleport.transform.position = destination;
            }
        }
    }

    void DisplayTime(float timeToDisplay)
    {
        timeToDisplay += 1;

        float minutes = Mathf.FloorToInt(timeToDisplay / 60);
        float seconds = Mathf.FloorToInt(timeToDisplay % 60);

        timeText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...