본문 바로가기
유니티

Replay 시스템

by SUGI_ 2023. 9. 6.

1) Replay_Record

https://www.youtube.com/watch?v=7MDmRpVkr1o&list=PLi9ggwioqRlZx7uO9HE3C1G3VLlJ9uKEF&index=6 

https://github.com/RehaStudio/Replay-System/blob/master/REplay%20sistem/Assets/ReplayRecord.cs

캐릭터의 움직임과 애니메이션 구성

프레임을 사용하면 모션과 애니메이션을 연속적으로 재생 가능

프레임들을 메모리에 저장하고 다시 재생

 

Frameler 캐릭터의 위치 회전, 크기 조정 및 애니메이션을 저장

 

비효율적인 방법? 더 좋은 방법은 키를 입력을 감지하고 사전 등에 저장

그러면 올바른 프레임에 있을 때 움직임을 재생 할 수 있음 -> 많은 공간을 절약하고 더 정확

: 동의. 하지만 애니메이터 동기화는 매 프레임마다 데이터를 수집하는 것이 필수.

최적화를 위해 x 프레임마다 변환을 수집하고 각 프레임마다 애니메이터 데이터를 수집하여 실제로 정확하도록 함.

이 방법을 사용하여 재생 중에 항목을 인스턴스화하느데 문제가 있음. 입력을 수집하는 것은 좋지만 인스턴스 메서드에 대한 더 자세한 정보를 실제로 전달할 수 없기에 약간의 오류가 발생. 예를 들면 인스턴스화 된 GameObject가 재생 중에 마우스 방향으로 이동하도록 지시할 수 없음.

 

중력, 마찰 등의 값이 활성화되어 있지만 이러한 값은 항상 캐릭터의 위치와 회전에 영향을 미침 

 

우리가 저장해야하는 값

Position

Rotation

Scale

Animation > animation record

 

총알. 수류탄이 있는 총게임은 사용하지 않음. 경기 리플레이

 

GameObject는 자체 기록을 갖게 됨 모든 프레임을 저장

애니메이션은 어떻게 저장? 애니메이션은 전환선으로 연결되어야 함

각 프레임에 매개변수를 기록하면 애니메이션 저장 가능

 

우리의 문제 : IK를 움직이게 된다면? 그 위치를 다 저장해야 할 텐데 

 

enum (play, pause, record) 열거형으로 구성을 사용하여 모드 전환을 조정

추가 ? 재생, 일시중지, 종료, 확대/축소, 카메라 변경 및 회전

 

Play-Pause

Time.timeScale = 1; play 0 : pause

 

Camera 변경 List<> 

사용자가 카메라를 제공하고 순서대로 변경

v 버튼을 클릭할 때마다 변경 -> 카메라를 직접 움직여서 변경해야 함

0.1.2 / 0.camera active

 

zoom camera (z, x 버튼)

active camera

field of view (카메라 시야 값)

카메라 회전에는 eularangle 사용

오류 : 카메라가 원하지 않을 때 카메라가 z축으로 회전하고 비정상적인 회전 발생

 

슬라이더는 재생 길이에 대한 정보를 제공 재생의 최대길이는 사용자에게 알려줌

슬라이더 최대값 = 녹화 길이

 

목표 : 한명의 플레이를 녹화하면 재생 되고 계속 플레이할 수 있게 만들어야 함.

 

2) https://github.com/JosepLleal/Replay-System-Tool

 

GitHub - JosepLleal/Replay-System-Tool: Development of a replay system for my final degree project

Development of a replay system for my final degree project - GitHub - JosepLleal/Replay-System-Tool: Development of a replay system for my final degree project

github.com

ACE Replay는 간단한 상태 기반 재생 시스템  

ACE Replay 시스템은 변환, 애니메이션, 오디오 및 입자의 기록과 인스턴스화되고 삭제된 개체의 처리만 지원합니다.

사용자는 재생 기간, 보간 최적화 사용 여부, 기록 간격 등을 사용자 정의

  • 시스템을 빠르고 쉽게 통합하기 위한 스크립트 및 프리팹입니다.
  • 별도의 프로그래밍 없이, 스크립트를 원하는 개체에 드래그 앤 드롭하여 녹화할 내용을 쉽게 지정할 수 있습니다.
  • 시스템 작동 방식과 유틸리티를 보여주는 예시 장면입니다.
  • 변환, 애니메이션, 입자 및 오디오 녹음.
  • 기록된 객체의 인스턴스화 및 삭제를 지원합니다.
  • 보간 덕분에 재생의 부드러움을 잃지 않고 낮은 프레임 속도로 녹화하도록 최적화되었습니다.
  • 즉시 재생을 제어하는 ​​간단한 UI입니다.
  • 플라이 어라운드 리플레이 카메라를 사용하여 다양한 카메라 각도에서 리플레이를 볼 수 있습니다. 리플레이는 게임플레이 카메라를 포함한 기존 장면 카메라에서도 볼 수 있습니다.
  • x0.25, x0.5, x1, x2, x4 등 다양한 속도로 재생을 지원합니다.
  • 프레임별 재생 및 역방향 재생을 지원합니다.
  • 시간여행 기계공으로 과거로 여행을 떠나보세요.
  • 필요에 따라 확장할 수 있는 완전 C# 주석 처리된 코드입니다.

3) https://www.kodeco.com/7728186-creating-a-replay-system-in-unity

 

Creating a Replay System in Unity

A replay system is a great way to let players relive their best (or worst) moments of gameplay, improve their strategy, and more! In this tutorial, you’ll build a simple state-based replay system and learn about how replay systems work.

www.kodeco.com

 

4) 고스트 플레이어

https://www.youtube.com/watch?v=c5G2jv7YCxM&list=PLi9ggwioqRlZx7uO9HE3C1G3VLlJ9uKEF&index=12&t=107s https://youtu.be/AD2W5EXex5Q?si=6jkccG9gwyvk90b8 

 

728x90

'유니티' 카테고리의 다른 글

Doxygen  (0) 2023.09.26
Replay 시스템 2  (0) 2023.09.11
[유니티] 흔들리는 로프 구현  (0) 2023.08.31
[유니티] BezierCurve  (0) 2023.08.31
[유니티] Scripting Define Symbol 스크립트로 제어하기  (0) 2023.08.29