커맨드 패턴을 사용하여 나중에 "리플레이"의 움직임을 추적합니다. 이렇게하면 작업이 올바르게 재생되지만 속도는 느려집니다. 나는 coroutines와 Update()
두 가지를 모두 시도했지만 문제가 지속됩니다.Unity | 커맨드 패턴 플레이 백 타이밍 차이
먼저 호출자PlayerControl
이 있으며 ICommand
의 목록이 있습니다.
//Properties
private List<ICommand> oldCommands = new List<ICommand>();
private int updateIterationTracker = 0;
모든 호출 된 명령에 대해 명령을 목록에 추가합니다. 어떤 시점에 "재생"에서
//If Input moves up, invoke the move up command
if (dirVector.y > 0)
{
oldCommands.Add(dirUp); //Add the command to the list of commands
dirUp.Execute();
}
가 트리거되고 나는
oldCommands
의 명령을 반복.
이 기능이 작동합니다. 이동 입력이 수행하는 것처럼 이동 명령을 실행하면 실행됩니다.
private void IterateUpdateOnReplay(){
if(iteration < oldCommands.Count){
transform.position = replayStartPosition;
}
oldCommands[iteration].Execute();
iteration++;
}
나는 코 루틴에서도이 작업을 수행했다.
재생이 올바른 순서로 움직임을 실행할 수 있고 움직임이 발생할 수 있지만 전체 시퀀스를 실행하는 데 걸리는 시간이 초기 기록에서 걸린 시간보다 길다. 재생 시간이 더 깁니다.
질문 :
1) 올바른 속도로 재생하려면 너무 많은 명령을 추가 초기 캡처
oldCommands.Add(dirUp); //Add the command to the list of commands
는 실행 시간에 의해 속도가 느려졌,인가?
2) 내가 알지 못하는 지연의 원인이되는 또 다른 문제가 있습니까?
위치를 저장하려는 게임 개체에 대해 샘플링을 수행 한 다음 클래스에 데이터를 저장해야합니다. 초당 30 번? 그것은 당신이 얼마나 원할한지에 달려 있습니다. 그런 다음 나중에 반복하여 재생할 수 있으며 저장된 클래스에서 시간을 지연시킬 수 있습니다. [여기] (http://stackoverflow.com/a/40732139/3785314)에서 시작하십시오. – Programmer
커맨드 패턴의 포인트를 뒤집어 쓰지 않습니까? 클래스의 모든 데이터를 저장하는 대신 동일한 명령을 동일한 순서로 호출하면 재생이 동일해야합니다. – Ryanthehouse