Unity에서 게임을 일시 중지하고 싶습니다.
이 기사에 대하여
이 기사는 자신의 비망록적인 내용입니다.
하고 싶은 일
Unity에서 일시정지를 할 수 있게 되고 싶다.
그 중에서 TimeScale=0;이라는 방법에 대해 정리해 둡니다.
결론
Unity에서 일시정지를 할 수 있게 되고 싶다.
그 중에서 TimeScale=0;이라는 방법에 대해 정리해 둡니다.
결론
TimeScale이란?
Unity 공식
Time.timeScale은 시간 경과 속도입니다.
1이 기준이 되고, 1보다 작으면 시간 경과가 느려지고, 1보다 크면 시간 경과가 빨라집니다.
시험에 좌우의 벽에 부딪히는 공을 준비해 그 속도를 바꾸는 버튼을 준비해 보았습니다.
실제로 움직여 본 동영상입니다.
과연 이것으로 일시 정지를 만들 수 있군요! ! !
그렇게하지 않았습니다.
불완전한 점
우선, 이 시간을 정지시키는 방법입니다만 Update 함수는 살아 있습니다.
모든 것이 동작 불가가 되면 아무것도 할 수 없게 되니까요 (메뉴 화면을 열거나 되돌리거나 할 수 없게 되면 의미가 없다).
이로 인해 움직이지 않는 것은 시간이 관련된 처리입니다.
* FixedUpdate 함수 내의 처리(정의된 시간 간격으로 실행되는 Update 함수)
* Rigidbody를 이용한 처리 전반
* 애니메이션 (회피 방법 있음)
그래서 Update 함수내에서 position을 조작하는 것으로 이동하고 있는 경우, timeScale=0으로 해도 움직이는 것이 가능한 상태가 되어 버립니다.
CubeMoveManager.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMoveManager : MonoBehaviour
{
public float speed;
// Update is called once per frame
void Update()
{
var pos = transform.position;
if (Input.GetKey("right"))
{
pos = new Vector3(pos.x + speed,pos.y,pos.z);
}
if (Input.GetKey("left"))
{
pos = new Vector3(pos.x - speed,pos.y,pos.z);
}
transform.position = pos;
}
}
동영상
이 상태를 피하는 방법은 우선 두 가지를 든다.
* FixedUpdate로 변경
* 이동 속도에 deltaTime을 적용
주의점
timeScale의 설정은 씬을 로드해도 그대로의 상태가 되므로, 씬을 천이할 때에는 반드시 timeScale=1로 재설정하는 것.
우선, 이 시간을 정지시키는 방법입니다만 Update 함수는 살아 있습니다.
모든 것이 동작 불가가 되면 아무것도 할 수 없게 되니까요 (메뉴 화면을 열거나 되돌리거나 할 수 없게 되면 의미가 없다).
이로 인해 움직이지 않는 것은 시간이 관련된 처리입니다.
* FixedUpdate 함수 내의 처리(정의된 시간 간격으로 실행되는 Update 함수)
* Rigidbody를 이용한 처리 전반
* 애니메이션 (회피 방법 있음)
그래서 Update 함수내에서 position을 조작하는 것으로 이동하고 있는 경우, timeScale=0으로 해도 움직이는 것이 가능한 상태가 되어 버립니다.
CubeMoveManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMoveManager : MonoBehaviour
{
public float speed;
// Update is called once per frame
void Update()
{
var pos = transform.position;
if (Input.GetKey("right"))
{
pos = new Vector3(pos.x + speed,pos.y,pos.z);
}
if (Input.GetKey("left"))
{
pos = new Vector3(pos.x - speed,pos.y,pos.z);
}
transform.position = pos;
}
}
동영상
이 상태를 피하는 방법은 우선 두 가지를 든다.
* FixedUpdate로 변경
* 이동 속도에 deltaTime을 적용
주의점
timeScale의 설정은 씬을 로드해도 그대로의 상태가 되므로, 씬을 천이할 때에는 반드시 timeScale=1로 재설정하는 것.
Reference
이 문제에 관하여(Unity에서 게임을 일시 중지하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yokotate/items/adcb307fd4635246e441텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)