Time.deltaTimeã®äœ¿ãæ¹ åŸ¹åºãŸãšã
ç§»åã»ã¿ã€ããŒã»ã«ãŠã³ãããŠã³ã§ãã䜿ãæéåŠç
Unityã§ã²ãŒã ãäœã£ãŠãããšãããåºãŠããã®ã
Time.deltaTimeã§ãã
æåã¯å°ãåããã«ããã§ããããã£ã©ã¯ã¿ãŒã®ç§»åãã¿ã€ããŒãã«ãŠã³ãããŠã³ãæµã®åºçŸééãªã©ããããããªå Žé¢ã§äœ¿ããŸãã
ãã®èšäºã§ã¯ãUnityåå¿è
ã®æ¹åãã«ãTime.deltaTime ã®åºæ¬çãªèãæ¹ãšããã䜿ãã³ãŒãäŸããŸãšããŠãããŸãã
Time.deltaTimeãšã¯ïŒ
Time.deltaTime ã¯ãç°¡åã«èšããšã
åã®ãã¬ãŒã ããä»ã®ãã¬ãŒã ãŸã§ã«ããã£ãæé
ã衚ããŸãã
ïŒïŒç§»åãäžå®é床ã«ãã
Unity ã® Update() ã¯ã1ç§éã«äœåºŠãåŒã°ããŸãã
ãã ããåŒã°ããåæ°ã¯ããœã³ã³ãã¹ããã®æ§èœãã²ãŒã ã®éããåæã«åããŠããä»ã®ã·ã¹ãã çã«ãã£ãŠå€ãããŸãã
äŸãã°ã
1ç§éã«60å Update() ãåŒã°ããããã€ã¹ã®å Žå
1ç§éã«30å Update() ãåŒã°ããããã€ã¹ã®å Žå
ã§ã¯ãåãã³ãŒããæžããŠããŠããåŠçãããåæ°ãå€ãã£ãŠããŸããŸãã
ãã®ãããäœãèããã«æ¯ãã¬ãŒã äœçœ®ãåãããšãç°å¢ã«ãã£ãŠåãéããå€ãã£ãŠããŸãããšããããŸãã
ããã§äœ¿ãã®ã Time.deltaTime ã§ãã
Time.deltaTimeã䜿ããªãç§»å
ãŸãã¯ãTime.deltaTime ã䜿ããªãç§»åãèŠãŠã¿ãŸãã
void Update()
{
transform.position += Vector3.right * 0.1f;
}ãã®ã³ãŒãã§ã¯ãUpdate() ãåŒã°ãããã³ã«ããªããžã§ã¯ãã峿¹åã« 0.1 ãã€ç§»åããŸãã
äžèŠåé¡ãªãããã§ãããå®ã¯ãã®æžãæ¹ã ãšãUpdate() ãå€ãåŒã°ããç°å¢ã»ã©éãåããŠããŸããŸãã
äŸãã°ã

ãã®ããã«ãFPSãé«ãã»ã©ç§»åéãå¢ããŠããŸããŸãã
FPS 㯠Frames Per Second ã®ç¥ã§ããæå³ã¯ã1ç§éã«äœæã®ãã¬ãŒã ãã€ãŸãç»é¢ãè¡šç€ºã»æŽæ°ã§ããã ã§ãã

Time.deltaTimeã䜿ã£ãç§»å
次ã«ãTime.deltaTime ã䜿ã£ãç§»åã§ãã
public float speed = 5f;
void Update()
{
transform.position += Vector3.right * speed * Time.deltaTime;
}ãã®ããã«æžããšãspeed ã¯
1ç§éã«ã©ããããé²ãã
ãšããæå³ã«ãªããŸãã
äŸãã° speed = 5f ãªãã1ç§éã« 5 é²ããšããèãæ¹ã§ãã
Time.deltaTime ããããããšã§ã1ãã¬ãŒã ããšã®ç§»åéã§ã¯ãªãã1ç§ãããã®ç§»åéãšããŠæ±ããããã«ãªããŸãã
ãã®ãããFPSãéã£ãŠããã ãããåãéãã§åããããšãã§ããŸãã
ãã䜿ãç§»åã³ãŒã
å®éã®ã²ãŒã ã§ã¯ãããŒå ¥åã«åãããŠãã£ã©ã¯ã¿ãŒãåããããšãå€ãã§ãã
äŸãã°ãå·Šå³ç§»åãªã次ã®ããã«æžããŸãã
public float speed = 5f;
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
Vector3 direction = new Vector3(x, 0, 0);
transform.position += direction * speed * Time.deltaTime;
}å·Šå³ã ãã§ãªããäžäžã«ãåããããå Žåã¯æ¬¡ã®ããã«ãªããŸãã
public float speed = 5f;
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(x, y, 0).normalized;
transform.position += direction * speed * Time.deltaTime;
}ããã§ .normalized ã䜿ã£ãŠããã®ã¯ãæãç§»åãéããªããããªãããã«ããããã§ãã
å·Šå³ã ããäžäžã ãã®ç§»åã§ã¯åé¡ãããŸããããå³äžãå·Šäžãªã©ã®æãæ¹åã«ç§»åãããšãçžŠãšæšªã®ç§»åãåæã«è¡ãããŸãã
ãã®ãŸãŸã ãšæãç§»åã ãå°ãéããªã£ãŠããŸãããã.normalized ã§æ¹åã®é·ããããããŠããŸãã
GetAxisRaw
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");ãã®éšåã§ã¯ãããŒããŒãã®å ¥åãååŸããŠããŸãã
Horizontal ã¯æšªæ¹åã®å ¥åãVertical ã¯çžŠæ¹åã®å ¥åã衚ããŸãã
â Horizontal
Horizontal ã¯ã暪æ¹åã®å ¥åã§ãã
å³ããŒããŸã㯠DããŒãæŒã â 1
å·ŠããŒããŸã㯠AããŒãæŒã â -1
äœãæŒããŠããªã â 0
ã€ãŸããå³ã«é²ã¿ãããšã㯠1ãå·Šã«é²ã¿ãããšã㯠-1ãæ¢ãŸã£ãŠãããšã㯠0 ã«ãªããŸãã
â Vertical
Vertical ã¯ã瞊æ¹åã®å ¥åã§ãã
äžããŒããŸã㯠WããŒãæŒã â 1
äžããŒããŸã㯠SããŒãæŒã â -1
äœãæŒããŠããªã â 0
ã€ãŸããäžã«é²ã¿ãããšã㯠1ãäžã«é²ã¿ãããšã㯠-1ãæ¢ãŸã£ãŠãããšã㯠0 ã«ãªããŸãã

2,ã¿ã€ããŒãšããŠäœ¿ã
Time.deltaTime ã¯ãç§»åã ãã§ãªãã¿ã€ããŒã«ããã䜿ããŸãã
äŸãã°ã3ç§ãã£ããåŠçãå®è¡ãããå Žåã¯ã次ã®ããã«æžããŸãã
float timer = 0f;
void Update()
{
timer += Time.deltaTime;
if (timer >= 3f)
{
Debug.Log("3ç§çµéããŸãã");
timer = 0f;
}
}ãã®ã³ãŒãã§ã¯ãtimer ã«æ¯ãã¬ãŒã Time.deltaTime ãè¶³ããŠããŸãã
ã€ãŸãã
timer += Time.deltaTime;ã«ãã£ãŠãçµéæéãå°ããã€ç©ã¿äžããŠããŸãã
timer ã3以äžã«ãªã£ããã3ç§ãã£ããšå€æããŠããŸãã
ãã®èãæ¹ã¯ãã²ãŒã å¶äœã§ãšãŠããã䜿ããŸãã
äŸãã°ã
3ç§ããšã«æµãåºã
5ç§ãã£ããã¢ã€ãã ãæ¶ã
äžå®æéããšã«ã¹ã³ã¢ãå¢ãã
å¶éæéã管çãã
ãšãã£ãåŠçã«äœ¿ããŸããã€ãã³ããçµãã£ãã timer ã 0 ã«æ»ãã®ãå¿ããã«ïŒ
ã€ã¡ãŒãžçã«ã¯ããããã©ããã«ãšãŠããã䌌ãŠããŸãã
timer += Time.deltaTime
ã¯ããããã©ãã«å°ããã€æ°ŽãããŸã£ãŠããã€ã¡ãŒãžã§ãã
æ¯ãã¬ãŒã ããšã«å°ããã€æéãå ç®ãããäžå®éãŸã§ããŸããšããããã©ãããã«ã³ã³ããšåŸãããã«ã€ãã³ããçºåããŸãã
ãããŠã
timer = 0f;
ã«ãã£ãŠäžèº«ã空ã«ãããŸãæ¬¡ã®æéãããå§ããŸãã

3,ã«ãŠã³ãããŠã³ã¿ã€ããŒãšããŠäœ¿ã
次ã¯ãå¶éæéã®ãããªã«ãŠã³ãããŠã³ã§ãã
public float timeLimit = 60f;
void Update()
{
timeLimit -= Time.deltaTime;
if (timeLimit <= 0f)
{
timeLimit = 0f;
Debug.Log("æéåã");
}
}ãã®ã³ãŒãã§ã¯ãtimeLimit ããæ¯ãã¬ãŒã Time.deltaTime ãåŒããŠããŸãã
timeLimit -= Time.deltaTime;ããã«ãã£ãŠãæéãå°ããã€æžã£ãŠãããŸãã
timeLimit ã0以äžã«ãªã£ãããæéåãã®åŠçãè¡ããŸãã
UIã«æ®ãæéã衚瀺ãã
ã²ãŒã ã§ã¯ãæ®ãæéãç»é¢ã«è¡šç€ºãããããšãå€ãã§ãã
äŸãã°ãTextã䜿ã£ãŠè¡šç€ºããå Žåã¯ã次ã®ããã«æžããŸãã
public float timeLimit = 60f;
public Text timerText;
void Update()
{
timeLimit -= Time.deltaTime;
if (timeLimit <= 0f)
{
timeLimit = 0f;
}
timerText.text = Mathf.CeilToInt(timeLimit).ToString();
}Mathf.CeilToInt() ã¯ãå°æ°ãåãäžããŠæŽæ°ã«å€æããåœä»€ã§ãã
äŸãã°ãæ®ãæéã 59.2 ç§ã®ãšããç»é¢ã«ã¯ 60 ãšè¡šç€ºãããŸãã
æ®ãæéã®è¡šç€ºã§ã¯ãå°æ°ã®ãŸãŸè¡šç€ºããããããæŽæ°ã«ããæ¹ãèŠããããªããŸãã
ãç»åïŒæ®ãæéUIã®è¡šç€ºäŸã
ããã«ãç»é¢äžã«ã60ãã59ãã58ããšè¡šç€ºãããç»åãå
¥ããã
äžå®æéããšã«æµãåºã
Time.deltaTime ã䜿ããšãäžå®æéããšã«æµãã¢ã€ãã ãåºãåŠçãäœããŸãã
public GameObject enemyPrefab;
public float spawnInterval = 2f;
float timer = 0f;
void Update()
{
timer += Time.deltaTime;
if (timer >= spawnInterval)
{
Instantiate(enemyPrefab);
timer = 0f;
}
}ãã®ã³ãŒãã§ã¯ãtimer ã spawnInterval 以äžã«ãªã£ããæµãåºããŠããŸãã
spawnInterval ã 2f ãªãã2ç§ããšã«æµãåºãŸãã
ãã®èãæ¹ã䜿ããšã
æµãäžå®ééã§åºã
ã¢ã€ãã ãäžå®ééã§åºã
é害ç©ãäžå®ééã§åºã
æéçµéã§é£æåºŠãäžãã
ãšãã£ãåŠçãäœãããšãã§ããŸãã
ãåç»ïŒ2ç§ããšã«æµãåºãäŸã
ããã«ãæµãäžå®ééã§åºçŸããåç»ãå
¥ããã
ã³ã«ãŒãã³ãšã®éã
ååã®èšäºã§ã¯ãã³ã«ãŒãã³ã«ã€ããŠãŸãšããŸããã
ã³ã«ãŒãã³ã§ã¯ã次ã®ããã«æžãããšã§ãæ°ç§åŸ ã£ãŠããåŠçãè¡ãããšãã§ããŸãã
yield return new WaitForSeconds(3f);äžæ¹ãTime.deltaTime ã䜿ãå Žåã¯ãæ¯ãã¬ãŒã æéãæ°ããªããåŠçããŸãã
timer += Time.deltaTime;ã©ã¡ããæéã«é¢ä¿ããåŠçã§ãããåŸæãªå Žé¢ãå°ãéããŸãã
æ¹æ³åããŠããåŠçTime.deltaTimeæ¯ãã¬ãŒã æéãèŠãªããåŠçãããã³ã«ãŒãã³æ°ç§åŸ ã£ãŠããæ¬¡ã®åŠçããããInvokeç°¡åã«é å»¶å®è¡ããã
äŸãã°ãå¶éæéã®ããã«ãæ¯ãã¬ãŒã æ®ãæéã衚瀺ãããå Žå㯠Time.deltaTime ãåããŠããŸãã
éã«ã3ç§åŸ ã£ãŠããã·ãŒã³ãåãæ¿ããã ããªããã³ã«ãŒãã³ã®æ¹ãåãããããå ŽåããããŸãã
Invokeãšã®éã
Unityã«ã¯ãInvoke() ãšããåœä»€ããããŸãã
Invoke("GameOver", 3f);ããã¯ã3ç§åŸã« GameOver ãšãã颿°ãåŒã³åºãæžãæ¹ã§ãã
ç°¡åãªé å»¶åŠçã«ã¯äŸ¿å©ã§ããã颿°åãæååã§æžãããã颿°åã倿Žãããšãã«ãã¹ãèµ·ãããããšããæ³šæç¹ããããŸãã
ãã®ãããåå¿è ã®ãã¡ã¯ã
æ¯ãã¬ãŒã æéã管çããããªã Time.deltaTime
é çªã«åŸ ã¡ãªããåŠçããããªãã³ã«ãŒãã³
ç°¡åã«æ°ç§åŸã«åŒã³ããã ããªã Invoke
ãšããã€ã¡ãŒãžã§èŠããŠãããšãããšæããŸãã
Time.timeScaleãšã®é¢ä¿
å°ãçºå±çãªå 容ã§ãããTime.deltaTime 㯠Time.timeScale ã®åœ±é¿ãåããŸãã
Time.timeScale ã¯ãã²ãŒã å ã®æéã®æµããå€ããããã®å€ã§ãã
äŸãã°ã
Time.timeScale = 0f;ãšãããšãã²ãŒã å ã®æéãæ¢ãŸããŸãã
ãã®ç¶æ ã§ã¯ãTime.deltaTime ãã»ãŒé²ãŸãªããªããŸãã
ã€ãŸãã
ãã£ã©ã¯ã¿ãŒã®ç§»åãæ¢ãŸã
æµã®ç§»åãæ¢ãŸã
ã«ãŠã³ãããŠã³ã¿ã€ããŒãæ¢ãŸã
ãšããããšãèµ·ãããŸãã
ããŒãºç»é¢ãäœããšãã«ã¯ããã®ä»çµã¿ã䜿ãããšããããŸããäŸãã°ä»¥äžã®ã³ãŒãã¯ãäžæåæ¢ãšåéãå Œãåãããã¿ã³ïŒãã°ã«ã¹ã€ããïŒã«ã»ãããã颿°ã§ãã
isPaused ã¯ãçŸåšã²ãŒã ãäžæåæ¢äžãã©ãããèŠããŠããããã®å€æ°ã§ãã
bool isPaused = false;æåã¯ã²ãŒã ãåããŠããç¶æ ãªã®ã§ãfalse ã«ããŠãããŸãã
ãã¿ã³ãæŒããããšãã« TogglePause() ãåŒã°ããŸãã
public void TogglePause()
{
if (isPaused == false)
{
Time.timeScale = 0f;
isPaused = true;
}
else
{
Time.timeScale = 1f;
isPaused = false;
}
}isPaused ã false ã®ãšãã¯ããŸã ããŒãºããŠããªãç¶æ
ã§ãã
ãã®ãããTime.timeScale = 0f; ã«ããŠã²ãŒã å
ã®æéãæ¢ããŸãã
ãã®ããšãisPaused = true; ã«ããŠãçŸåšããŒãºäžã§ããããšãèšé²ããŸãã
éã«ãisPaused ã true ã®ãšãã¯ããã§ã«ããŒãºäžã§ãã
ãã®ãããTime.timeScale = 1f; ã«æ»ããŠã²ãŒã ãåéããŸãã
ãã®ããšãisPaused = false; ã«ããŠãããŒãºãè§£é€ãããããšãèšé²ããŸãã
Time.unscaledDeltaTimeãšã¯ïŒ
Time.timeScale ã®åœ±é¿ãåããã«ãå®éã®æéã䜿ãããå Žåã¯ã
Time.unscaledDeltaTimeã䜿ããŸãã
äŸãã°ãã²ãŒã ãããŒãºããŠããŠããããŒãºã¡ãã¥ãŒã®ã¢ãã¡ãŒã·ã§ã³ã ãã¯åããããå Žåãªã©ã«äœ¿ããŸãã
åå¿è
ã®ãã¡ã¯ããŸã㯠Time.deltaTime ããã£ããçè§£ã§ããã°å€§äžå€«ã§ãã
Time.unscaledDeltaTime ã¯ãããŒãºäžã§ãåãããããã®ãåºãŠãããšãã«èŠãããšããã§ãã
ãŸãšã
Time.deltaTime ã¯ãUnityã§æéãæ±ããšãã«ãã䜿ã倧åãªä»çµã¿ã§ãã
ç¹ã«ã
ãã£ã©ã¯ã¿ãŒãäžå®ã®éãã§åãã
çµéæéãæ°ãã
ã«ãŠã³ãããŠã³ãäœã
äžå®æéããšã«æµãåºã
ããŒãºäžã®æéå¶åŸ¡ãèãã
ãšãã£ãå Žé¢ã§äœ¿ããŸãã
æåã¯å°ãåããã«ããã§ããã
Time.deltaTimeã¯ãåã®ãã¬ãŒã ããä»ã®ãã¬ãŒã ãŸã§ã«ããã£ãæé
ãšèãããšçè§£ãããããªããŸãã
ãããŠãç§»ååŠçã§ã¯ã
speed * Time.deltaTimeãšæžãããšã§ãFPSã«å·Šå³ããã«ããåããäœãããšãã§ããŸãã
ååãŸãšããã³ã«ãŒãã³ãšããããŠèŠãããšãUnityã§ã®æéåŠçã®ããªãšãŒã·ã§ã³ãå å®ããŠãããšæããŸãã
Unityåå¿è åãã®èšäºãããŒãå¥ã«ãŸãšããŠããŸãã
⌠Unityåå¿è åãèšäºãŸãšãã¯ãã¡ã
ãã¡ãã®ãã¬ãžã³ãããã²ãŒã äœæè¬åº§ãå š8åã»ãããã§ãã·ãŒã³ã®åãæ¿ããªã©ã掻çšããŠãåå¿è ã§ãç¥èãŒãããäœããããã²ãŒã äœæè¬åº§ã玹ä»ããŠããŸãã

ããã«ã¹ãããã¢ããã®ãã¹ããã§éã¶ãžã£ã³ãã²ãŒã ã8åã»ãããã®ãã¬ãžã³ããã²ã掻çšãã ããã

ãã¡ã€ãããã¯ã¹ã§ã¯ãUnityã®å奿å°ãªã³ã©ã€ã³ã¬ãã¹ã³ãã²ãŒã äœæåç»é
ä¿¡ãã«ãªãã¥ã©ã 販売ãªã©ãè¡ã£ãŠãããŸãã
ãèå³ã®ããæ¹ã¯ããã¡ã€ãããã¯ã¹å
¬åŒããŒã ããŒãžããžã¢ã¯ã»ã¹ããŠã¿ãŠãã ããã
ãããªãšæã£ããå¿æŽãããïŒ
ãããããã°å¿æŽãé¡ãããŸãïŒ ããã ãããããã¯ã¯ãªãšã€ã¿ãŒãšããŠã®æŽ»åè²»ã«äœ¿ãããŠããã ããŸãïŒ