4dad9e5d5b
- 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>
89 lines
2.9 KiB
C#
89 lines
2.9 KiB
C#
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 );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|