게임에서 "빨리 감기"기능을 어떻게 구현할 수 있습니까?


15

http://fieldrunners.com/ 및 기타 TD 게임과 같은 타워 방어 게임에 대한 빨리 감기 기능을 어떻게 구현할 수 있습니까?

Unity 3D를 사용하고 있습니다. 초당 프레임 수를 줄이거 나 수동으로 설정 한 적의 빠른 움직임과 탑 발사 속도 등을 관리 할 수있는 것이 있습니까?


업데이트 빈도를 높이려고 했습니까?
concept3d

답변:


7

게임에 독립적 인 업데이트 타임 라인으로 분리해야하는 복잡하거나 계산 비용이 많이 드는 시뮬레이션이없는 경우 코드 Update()를 Unity의 Time.time 값을 기준으로하고 코드에서 Time 값을 설정 하는 간단한 방법을 사용할 수 있습니다 .timeScale은 원하는대로됩니다. 0 == 일시 중지, 1 = 정상, 테스터는 timeScale> 1을 설정하여 작업을 더 빠르게 수행하는 것을 좋아합니다.

http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html


18

접근법 : 더 높은 시뮬레이션 속도

사용자 인터페이스의 타이밍은 렌더링과 마찬가지로 실제 게임 루프에서 분리되어야합니다. 예를 들어 세계가 4 배속으로 달리고 있다고 가정 해보십시오. 기본 (1x) 속도로 게임이 초당 30 개의 업데이트를 실행한다고 가정 해 보겠습니다.

그런 다음 빨리 감기 모드에있을 때 다음과 같은 내용이 나타납니다.

  • 월드 로직은 모든 ​​UI 및 렌더러 업데이트마다 4 개의 업데이트를 실행합니다. 즉, 초당 120 개의 업데이트를 실행해야합니다. 따라서 월드 모델 (데이터)이이 속도로 업데이트됩니다.
  • 렌더러와 UI 로직은 모두 초당 30 번의 업데이트로 계속 폴링합니다.

다시 말해, 게임 전체가 더 빨리 실행되지 않습니다. 시뮬레이션 부분이다.

이로부터 두 가지를 추론 할 수 있습니다.

  1. 대상 플랫폼에서 쉽게 4 배 빠르게 실행할 있도록 게임 로직을 단순하게 유지하거나 게임 플레이의 다양한 측면을 더 빨리 외삽 할 수있는 방법을 도입해야합니다. 보다 빠른 속도의 시뮬레이션을 사용한 경우와는 다릅니다. 따라서 절충은 정확성을위한 처리 비용이됩니다. 아래의 접근법 2를 참조하십시오.

  2. 모델, 뷰 및 컨트롤러 ( MVC ) 인 분리를 통해 세계 시뮬레이션 속도를 쉽게 높일 수 있습니다 . 월드 데이터 (M), 렌더 로직 (V) 및 게임 로직 (C)이 모두 혼재되어 있다면 적어도 대규모 편두통이 없다면 절대 그렇게 할 수 없습니다.

접근 방식 : 시간 델타를 기반으로 한 외삽

위에서 언급했듯이 주어진 시간 동안 물체가 얼마나 멀리 이동했는지에 따라 모션을 계산해야합니다. 이것은 게임 물리가 시뮬레이션에서 본질적으로 더 현실적이라고 가정하지만, 그렇지 않을 수도 있습니다. 이것은 다소 큰 주제이며 상당히 더 복잡합니다. 알고 싶다면 더 많은 질문을해야합니다. 본질적으로, 당신은 일을 올바르게하기 위해 미적분학을 할 것입니다. 충돌의 상호 침투와 여기서 다루지 않을 다른 많은 문제를 처리해야합니다.

결론적으로

이것은 당신에게 일반적인 개요를 제공합니다. 당신의 언어 선택은 당신 자신의 것입니다, 아마도 당신은 Unity에서 그것을하는 방법을 알고 있거나하지 않을 것입니다. 어떤 언어로든 타이밍을 잡으려면 세부 사항을 이해해야합니다. Gaffer의 기사 부터 Unity API 문서를 확인하는 것이 좋습니다 .


당신이 사용하려는 경우 더 높은 시뮬레이션 속도 접근을하고 지원하려는 둔화 , 당신은 아마 실제로 가질 필요가 매우 느린 기본 시뮬레이션 속도를 다음 100와 같은 시뮬레이션 단계 / 프레임에서 기본적으로 실행되는.
bobobobo

9

일반적으로 게임 로직 업데이트는 게임 그래픽 업데이트와 분리되어야합니다. 즉, 게임 플레이 시뮬레이션, AI, 단위 이동 등은 게임이 렌더링되는 속도와 관련이 없어야합니다. . 일반적으로 주 게임 루프는 마지막 게임 업데이트 이후에 경과 한 실시간 시간을 계산하고 해당 델타 시간 단계를 각 개별 게임 논리 객체의 업데이트 루틴으로 보냅니다.

이러한 시나리오에서는 게임에서 시간 스케일링 (빨리 감기 포함)을 구현하는 것이 간단 해집니다. 게임 로직 시간 단계에 스칼라 값을 미리 곱하면 시간이 얼마나 빨리 "빨리 감기"또는 느려질지를 제어합니다. 기본적으로이 값은 1입니다. 예를 들어 사용자가 "빨리 감기"키를 누르면 1.5로 설정하고 모든 시뮬레이션이 50 % 더 빠른 것으로 나타납니다. 그러나 여전히 같은 속도로 렌더링합니다.

나는 Unity에 매우 익숙하지 않으므로 다음 제안에서 잘못 될 수 있지만 Unity에는이 를 구현하는 데 유용한 시간 관리 구성 요소 가 있습니다. 실제로 이미 타임 스케일 속성이 있습니다. 구성 요소에 대한 설명은 클래스가 물리 객체 용으로 설계되었지만 해당 시나리오에도 적용될 수 있음을 의미합니다.


1
그의 scenerio에 확실히 적용 가능합니다. 그가해야 할 일은 Time.timeScale을 일부 승수로 설정하면 모든 것이 더 빨라집니다. 전반적으로 바뀌 었으므로 메뉴 상호 작용과 같은 것이 있으면 더 빠릅니다.
Tetrad

thnx 다시 Tetrad :)
Syed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.