Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Unity3d - SUPER HOT


Gość henb

Rekomendowane odpowiedzi

Opublikowano

Witajcie,

 

To chyba jeden z ostatnich mini tutoriali. 

 

Chyba większość widziała i grała w SUPER HOT. Nie wiem jak dokładnie zrobili to twórcy, ale przedstawię Wam mój sposób który jest zbliżony do oryginału.

 

Do dzieła :D

 

Na samym początku potrzebujemy takie zmienne:

private bool _superHot = false;
private float _timeScale = 1.0f;
private float _slowTimeScale = 0.01f;

Odpowiadają kolejno za: Włączenie i wyłączenie trybu SuperHot, przechowywanie domyślnej wartości Time.timeScale, przechowywania wartości dla spowolnionego Time.timeScale.

 

 

Nie potrzebujemy void Start(). Wszystko co będzie w tym tutorialu dzieje się w Update().

Update:

if(Input.GetKeyDown(KeyCode.Space))
{

Ja odpalam tryb SuperHot ze spacji. Nie narzucam tego rozwiązania - każdy niech zrobi jakim klawiszem chce.

if(_superHot)
{
     _superHot = false;
     Time.timeScale = _timeScale;

}
     else
     _superHot = true;
}

Włączniko-wyłącznik trybu SuperHot. Jeżeli jest true to ustawiam na false i wracam do normalnej prędkości gry oraz ustawiam _time na 0. Jeżeli nie to ustawiam na true i za chwile wsytsko stanie się jasne.

if(_superHot)
	{

Jeżeli _superHot ma wartość true to:

	if(Input.GetKey (KeyCode.LeftArrow)) 
		Time.timeScale = _timeScale;
	else if(Input.GetKey (KeyCode.RightArrow)) 
		Time.timeScale = _timeScale;

Jeżeli wcisnę prawą lub lewą strzałkę (Tylko takie potrzebuję w mojej grze. Warunek IF zna chyba każdy więc można łatwo dopisać obsługę WSADu lub pozostałych strzałek) - Time.timeScale ustawiam na domyślną wartość, czylu 1.0f;

	else 
		Time.timeScale = _slowTimeScale;
}

A jak w tym czasie nic nie wcisnę to Time.timeScale ustawiam na zwolnione tempo.

 

 

 

Dodatkowo dopisuję jedną linijkę z poprzedniego tutoriala, żeby gra nie klatkowała:

     Time.fixedDeltaTime = 0.02f * Time.timeScale;
}

Całość:

using UnityEngine;
using System.Collections;

public class SuperHot : MonoBehaviour {
	private bool _superHot = false;
	private float _timeScale = 1.0f;
	private float _slowTimeScale = 0.01f;

	
	

	// Update is called once per frame
	void Update () {
		if(Input.GetKeyDown(KeyCode.Space))
		{
			if(_superHot)
			{
				_superHot = false;
				Time.timeScale = _timeScale;

			}
			else
				_superHot = true;
		}
		if(_superHot)
		{
			if(Input.GetKey (KeyCode.LeftArrow)) 
				Time.timeScale = _timeScale;
			else if(Input.GetKey (KeyCode.RightArrow)) 
				Time.timeScale = _timeScale;
			else 
				Time.timeScale = _slowTimeScale;
		}
		Time.fixedDeltaTime = 0.02f * Time.timeScale;
	}

}

No i skrypt w akcji:


  • 2 tygodnie później...
Opublikowano

Ale dlaczego jeden z ostatnich tutoriali? :(

Jakbyś umiał czytać to byś przeczytał " jeden z ostatnich MINI tutoriali " więc pewnie zwykłe tuty będą.

  • 1 rok później...
Opublikowano

Nie ma znaczenia, ważne żeby obiekt był aktywny kiedy ta opcja ma działać.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...