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:
2026-05-21 23:37:34 +09:00
commit 4dad9e5d5b
1068 changed files with 175146 additions and 0 deletions
@@ -0,0 +1,13 @@
using UnityEngine.Events;
namespace VRSDK.Events
{
/// <summary>
/// Event that gets called when a is dropped inside a DropZone, we extend from UnityEvent<GrabState> so we can see this onn the inspector and add some listeners by hand if we want
/// </summary>
[System.Serializable]
public class OnDropStateChangeEvent : UnityEvent<VR_Grabbable> { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 64983187cabf2b94483dfd88a068b3d5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnDropStateChangeEvent.cs
uploadId: 546658
@@ -0,0 +1,12 @@
using UnityEngine.Events;
namespace VRSDK.Events
{
/// <summary>
/// Event that gets called when the grab state change, we extend from UnityEvent<GrabState> so we can see this onn the inspector and add some listeners by hand if we want
/// </summary>
[System.Serializable]
public class OnGrabStateChangeEvent : UnityEvent<GrabState> { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 5ab1d6f3a50c5b24ca7ca0b8572cb516
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnGrabStateChangeEvent.cs
uploadId: 546658
@@ -0,0 +1,11 @@
using UnityEngine.Events;
namespace VRSDK.Events
{
/// <summary>
/// Event that gets called when we interact with a object, we extend from UnityEvent<GrabState> so we can see this onn the inspector and add some listeners by hand if we want
/// </summary>
[System.Serializable]
public class OnInteractEvent : UnityEvent<VR_Controller> { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 8a87b182fd447544ea040092d4eb1ca6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnInteractEvent.cs
uploadId: 546658
@@ -0,0 +1,29 @@
using UnityEngine;
using System;
namespace VRSDK
{
public class OnJointBreakListener : MonoBehaviour
{
private Action<float> onJointBreakCallback = null;
public void SetListener(Action<float> listener)
{
onJointBreakCallback = listener;
}
public void RemoveAllListeners()
{
onJointBreakCallback = null;
}
//method called by Unity when a joint gets break in the gameobject
private void OnJointBreak(float f)
{
if (onJointBreakCallback != null)
onJointBreakCallback( f );
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 08df66d83f0311447a27ba4679b3e234
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnJointBreakListener.cs
uploadId: 546658
@@ -0,0 +1,11 @@
using UnityEngine.Events;
namespace VRSDK.Events
{
/// <summary>
/// Event that gets called when a rotation gesture occurs, we extend from UnityEvent<GrabState> so we can see this onn the inspector and add some listeners by hand if we want
/// this is currently in use in the revolver Physical reload system, when we rotate our hand a certain speed and certain angle, the weapon gets a reload
/// </summary>
public class OnRotationGestureEvent : UnityEvent<RotationGestureInfo> { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: eb0d886b3f30cfd419578be849ea0078
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnRotationGestureEvent.cs
uploadId: 546658
@@ -0,0 +1,10 @@
using UnityEngine.Events;
namespace VRSDK.Events
{
/// <summary>
/// Event that gets called when some valud change, we extend from UnityEvent<GrabState> so we can see this onn the inspector and add some listeners by hand if we want
/// </summary>
[System.Serializable]
public class OnValueChangeEvent : UnityEvent<float> { }
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 4c9b6e78fee4f5845b50fccb994d56b9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/OnValueChangeEvent.cs
uploadId: 546658
@@ -0,0 +1,45 @@
using UnityEngine;
using System;
namespace VRSDK
{
public class TriggerCollisionListener : MonoBehaviour
{
public Action<Collider> OnTriggerEnterEvent = null;
public Action<Collider> OnTriggerExitEvent = null;
public Action<Collider> OnTriggerStayEvent = null;
private void Awake()
{
Collider c = GetComponent<Collider>();
if (c != null)
c.isTrigger = true;
else
Debug.LogError( "you add a trigger collision listener in a gameobject with no collider!" );
}
private void OnTriggerEnter(Collider other)
{
Debug.Log("trigger enter");
if (OnTriggerEnterEvent != null)
OnTriggerEnterEvent( other );
}
private void OnTriggerExit(Collider other)
{
Debug.Log("trigger stay");
if (OnTriggerExitEvent != null)
OnTriggerExitEvent( other );
}
private void OnTriggerStay(Collider other)
{
if (OnTriggerStayEvent != null)
OnTriggerStayEvent( other );
}
}
}
@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 0482451ce8f6d734695c8fbcc1041601
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 168243
packageName: VR Beats Kit
packageVersion: 2.0
assetPath: Assets/VRBeatsKit/Modules/VRSDK/Events/TriggerCollisionListener.cs
uploadId: 546658