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,80 @@
using UnityEngine;
namespace VRSDK
{
//this is the basic class for highlight grabbables
//in used by the VR_OutlineHighlight and the VR_UIHighlight
public abstract class VR_Highlight : MonoBehaviour
{
private VR_Interactable interact = null;
public Transform HighlightPointRightHand { get { return interact.HighlightPointRightHand; } }
public Transform HighlightPointLeftHand { get { return interact.HighlightPointLeftHand; } }
public float HighlightDistance { get { return interact.InteractDistance; } }
public bool IsHighlight { get; private set; }
public VR_Interactable Interactable
{
get { return interact; }
}
protected virtual void Awake()
{
interact = GetComponent<VR_Interactable>();
if (interact == null)
{
Debug.LogError( "VR_Hightlight attached to " + gameObject.name + " needs a interactable script in order to work" );
}
VR_Manager.instance.RegisterHighlight( this );
}
protected virtual void OnDestroy()
{
//this object can be destroyed for 2 reasons
//the programmer calling destroy on the gameobject
// and the UnityEngine closing the game, so if Unity is closing the game
//dont do nothing the game is just closing
if (!VR_Manager.ApplicationIsQuitting)
VR_Manager.instance.RemoveHighlight( this );
}
protected virtual void OnEnable()
{
VR_Manager.instance.RegisterHighlight( this );
}
protected virtual void OnDisable()
{
//this object can be disable for 2 reasons
//the programmer calling destroy on the gameobject
// and the UnityEngine closing the game, so if Unity is closing the game
//dont do nothing the game is just closing
if (!VR_Manager.ApplicationIsQuitting)
VR_Manager.instance.RemoveHighlight( this );
}
public bool CanHighlight()
{
return interact == null || interact.CanInteract;
}
public bool CanHighlightUsingController(VR_Controller controller)
{
return interact == null || interact.CanInteractUsingController( controller );
}
public virtual void Highlight(VR_Controller controller)
{
IsHighlight = true;
}
public virtual void UnHighlight(VR_Controller controller)
{
IsHighlight = false;
}
}
}