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

[Mini Tutorial] Unity3d - Slowmotion


Gość henb

Rekomendowane odpowiedzi

Opublikowano

Jakoś cicho ostatnio w tym dziale.

 

Tak jak w poprzednim mini tutorialu. Parę linijek kodu z wytłumaczeniem.

 

Na samym początku dwie zmienne typu float:

	float currentTime = 0.0f;
	float maximumTime = 1.5f;

Pierwsza zlicza czas, który spędziliśmy w zwolnionym tempie. Jeżeli przekroczy tę drugą to slowmotion jest wyłączone. O tym później.

 

Następnie wywalamy void Start(). Nie potrzbeujemy.

 

 

Wszystko dzieje się w Update()

if(Input.GetButtonDown ("Jump"))
{

Tłumacząc na polski - Jeżeli wcisnę spację...

	if(Time.timeScale == 1.0f)
		Time.timeScale = 0.3f;

I jeżeli Time.timeScale wynosi 1 (czyli normalna wartość), to zmieniam ją na 0.3f (ta wartośc zależy od Was).

	else
	     Time.timeScale = 1.0f;

A jeżeli Time.timeScale nie wynosi 1, to ustawiam ją na 1.     o_O co to za czary o_O

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

A poza tym, to nie zapominam o fixedDeltaTime. 0.02f pomnożone przez aktualny Time.timeScale zapobiega ostremu klatkowaniu gry. Bez tego wszystko zwolni, ale będzie brzydkie. A gra musi być ładna. 

	if(Time.timeScale == 0.3f)
	{
		currentTime += Time.deltaTime;
	}

Dodatkowo, jeżeli Time.timeScale jest równe 0.3 (czyli w naszym przypadku włączone slowmotion) - dodaję Time.deltaTime do zmiennej przechowującej czas spędzony w slowmotion.

	if(currentTime > maximumTime) 
	{
		currentTime = 0;
		Time.timeScale = 1.0f;
	}

Po jakimś czasie ta zmienna będzie większa od maksymalnej przez nas dopuszczonej wartości. Wtedy ją zerujemy i Time.timeScale ustawiamy na 1.0. Inaczej mówiąc wracamy do normalności.

 

 

 

 

 

Całość:

using UnityEngine;
using System.Collections;



public class SlowMotion : MonoBehaviour {
	float currentTime = 0.0f;
	float maximumTime = 1.5f;

	// Update is called once per frame
	void Update () {
		if(Input.GetButtonDown ("Jump"))
		{
			if(Time.timeScale == 1.0f)
				Time.timeScale = 0.3f;
			else
				Time.timeScale = 1.0f;

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

		if(Time.timeScale == 0.3f)
		{
			currentTime += Time.deltaTime;
		}

		if(currentTime > maximumTime) 
		{
			currentTime = 0;
			Time.timeScale = 1.0f;
		}
	}
}

Slowmotion w akcji:


Jak zrobić tak zajebistą grę w spadające klocki zabijające kulkę? Otóż odpowiadam: Jak zarobię już miliony, albo Wałęsa odda moje 100 milionów to o tym opowiem. To jest zbyt cenny projekt, żeby zdradzać sekrety 10 linijek kodu :(

 

Wiem, że można uniknąć hardcode typu 0.3f i ustawiać to np. w inspektorze. Z założenia mini tutoriale mają być proste i krótkie. 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...