728x90
반응형
안녕하세요 유니티 관련 포스팅은 처음이네요.
오늘 해볼것은 타워디펜스나 자동전투를 하는 게임에서 많이 사용되는 게임 일시정지, 배속입니다.
핵심으로 사용되는 코드는 Time.timescale 입니다.
단 이 방법은 속도에 관련된 코드들에 Time.deltaTime이 사용되어야합니다.
- 일시정지
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Time_Pause : MonoBehaviour
{
public Sprite pause;
public Sprite unpause;
Controller_Time ct;
SpriteRenderer spriteRenderer;
void Start()
{
ct = GameObject.Find("TimeController").GetComponent<Controller_Time>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
void OnMouseUp()
{
// pause
if(ct.isPause == false)
{
ct.isPause = true;
Time.timeScale = 0f;
spriteRenderer.sprite = unpause;
}
// un-pause
else
{
ct.isPause = false;
Time.timeScale = 1f;
spriteRenderer.sprite = pause;
}
}
}
Pause_Time 스크립트를 사용하실 일시정지 버튼에 넣어주면 됩니다.
저는 배속과 함께 구현하느라 isPause 값을 다른 스크립트로 빼놨지만 일시정지만 사용할거라면 해당 스크립트에 선언하면 됩니다.
- n배속
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Time_x2 : MonoBehaviour
{
public Sprite x1;
public Sprite x2;
Controller_Time ct;
SpriteRenderer spriteRenderer;
void Start()
{
ct = GameObject.Find("TimeController").GetComponent<Controller_Time>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
void OnMouseUp()
{
if(ct.isPause == false)
{
// 2배속
if(ct.isFastSpeed == false)
{
ct.isFastSpeed = true;
Time.timeScale = 2f;
spriteRenderer.sprite = x2;
}
// 1배속
else
{
ct.isFastSpeed = false;
Time.timeScale = 1f;
spriteRenderer.sprite = x1;
}
}
}
}
마찬가지로 스크립트를 사용하실 버튼에 넣어주면 됩니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Controller_Time : MonoBehaviour
{
public bool isPause = false;
public bool isFastSpeed = false;
}
728x90
반응형
'Programming > Unity' 카테고리의 다른 글
유니티 테마 변경 방법 (0) | 2020.08.15 |
---|---|
[개발일지_00] 타워디펜스 (0) | 2020.08.15 |