rollback_sync_on_frame 함수는 모든 플레이어가 현재 프레임에서 동기화되어 있는지를 확인합니다. 이는 플레이어의 상태가 예측에 기반하지 않고 실제로 수신된 데이터에 기반하고 있음을 의미합니다. 모든 플레이어가 동기화되어 있다면 true를 반환하고, 그렇지 않다면 false를 반환하며 모든 플레이어를 동기화하려고 시도합니다. 이 함수를 사용하여 플레이어를 동기화하려고 하면 프레임이 멈출 수 있으므로, 이 함수는 Step 이벤트에서 지속적으로 호출되지 않도록 해야 합니다. 대신 토글로 사용해야 합니다. 아래 예제를 참조하세요.
문법
rollback_sync_on_frame();
반환값
- Boolean: 동기화 상태에 따라
true 또는 false를 반환합니다.
예제
if (obj_game.winning_player == -1 && points >= obj_game.points_required_for_win) {
if (rollback_sync_on_frame()) {
obj_game.winning_player = player_id;
}
}
위 코드는 플레이어 객체의 Step 이벤트에서 실행됩니다. 이 코드는 승리하는 플레이어가 없고 현재 플레이어가 승리에 필요한 점수를 가지고 있는지를 확인합니다. 두 조건이 모두 참이라면, 플레이어가 승리해야 함을 의미합니다. 그러나 그 전에 모든 플레이어가 동기화되어 있는지를 확인하여 상태가 올바른지 확인합니다. 모든 플레이어가 동기화되어 있다면 winning_player 변수를 설정합니다. 이로 인해 첫 번째 조건이 거짓이 되어 rollback_sync_on_frame()이 다시 호출되지 않도록 합니다. 즉, 이 함수는 매 프레임마다 지속적으로 실행되는 것이 아니라 토글로 사용됩니다.
활용 예제
| 예제 번호 |
설명 |
| 1 |
플레이어의 점수를 업데이트하고 승리 조건을 확인하는 코드 |
if (rollback_sync_on_frame()) {
player_score += points;
if (player_score >= win_score) {
obj_game.winning_player = player_id;
}
}
if (rollback_sync_on_frame()) {
save_game_state();
}
| 3 |
특정 이벤트 발생 시 동기화를 확인하는 코드 |
|
|
if (event_occurred && rollback_sync_on_frame()) {
trigger_event();
}
if (rollback_sync_on_frame()) {
if (all_players_ready()) {
end_game();
}
}
if (rollback_sync_on_frame()) {
synchronize_player_actions();
}
이와 같은 예제들은 rollback_sync_on_frame 함수를 다양한 상황에서 어떻게 활용할 수 있는지를 보여줍니다.