feat: SongCreator 씬 완성 — Beat Sage URL 지원, info.dat 메타데이터 자동 추출
- BeatSageUploader: audio_url 지원(UploadFromUrl), PollAndDownload 공통화, ZIP 500 오류 3회 재시도 - BeatSageConverter: info.dat 파싱(SongMetadata), BPM 자동 감지 → 노트 타이밍 변환에 적용 - SongCreatorManager: title/BPM 필수 입력 제거, 난이도 4개 자동 선택, GenerateFlowFromUrl 버그 수정 - NasPublisher: audioPath null 허용(URL 흐름에서 로컬 파일 없는 경우 스킵) - .gitignore/.gitattributes 초기 설정 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using UnityEngine;
|
||||
using VRSDK.Collections;
|
||||
|
||||
namespace VRSDK
|
||||
{
|
||||
public class HistoryBuffer : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private int bufferSize = 10;
|
||||
|
||||
private Buffer<Vector3> velocityHistory;
|
||||
private Buffer<Vector3> angularVelocityHistory;
|
||||
private Buffer<Vector3> localPositionHistory;
|
||||
private Buffer<Vector3> positionHistory;
|
||||
private Buffer<Quaternion> rotationHistory;
|
||||
private Vector3 lastLocalPosition = Vector3.zero;
|
||||
|
||||
|
||||
public Buffer<Vector3> PositionHistory { get { return positionHistory; } }
|
||||
public Buffer<Vector3> LocalPositionHistory { get { return localPositionHistory; } }
|
||||
public Buffer<Vector3> AngularVelocityHistory { get { return angularVelocityHistory; } }
|
||||
public Buffer<Quaternion> RotationHistory { get { return rotationHistory; } }
|
||||
public Buffer<Vector3> VelocityHistory { get { return velocityHistory; } }
|
||||
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
velocityHistory = new Buffer<Vector3>( bufferSize );
|
||||
angularVelocityHistory = new Buffer<Vector3>( bufferSize );
|
||||
localPositionHistory = new Buffer<Vector3>( bufferSize );
|
||||
positionHistory = new Buffer<Vector3>( bufferSize );
|
||||
rotationHistory = new Buffer<Quaternion>(bufferSize);
|
||||
|
||||
lastLocalPosition = transform.localPosition;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
UpdateVelocityHistory();
|
||||
UpdateAngularVelocityHistory();
|
||||
UpdateLocalPositionHistory();
|
||||
UpdatePositionHistory();
|
||||
UpdateRotationHistory();
|
||||
}
|
||||
|
||||
private void UpdateVelocityHistory()
|
||||
{
|
||||
velocityHistory.Add( (lastLocalPosition - transform.localPosition) / Time.deltaTime );
|
||||
lastLocalPosition = transform.localPosition;
|
||||
}
|
||||
|
||||
private void UpdateRotationHistory()
|
||||
{
|
||||
rotationHistory.Add( transform.rotation );
|
||||
}
|
||||
|
||||
private void UpdateAngularVelocityHistory()
|
||||
{
|
||||
if (rotationHistory.Count < 2)
|
||||
return;
|
||||
|
||||
float delta = Time.deltaTime;
|
||||
float angleDegrees = 0.0f;
|
||||
Vector3 unitAxis = Vector3.zero;
|
||||
Quaternion rotation = Quaternion.identity;
|
||||
|
||||
rotation = ( rotationHistory[rotationHistory.Count - 1] ) * Quaternion.Inverse( rotationHistory[rotationHistory.Count - 2] );
|
||||
|
||||
rotation.ToAngleAxis( out angleDegrees, out unitAxis );
|
||||
Vector3 angular = unitAxis * ( ( angleDegrees * Mathf.Deg2Rad ) / delta );
|
||||
|
||||
angularVelocityHistory.Add( angular);
|
||||
|
||||
}
|
||||
private void UpdateLocalPositionHistory()
|
||||
{
|
||||
localPositionHistory.Add(transform.localPosition);
|
||||
}
|
||||
|
||||
private void UpdatePositionHistory()
|
||||
{
|
||||
positionHistory.Add( transform.position );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user