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,80 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
namespace VRSDK
|
||||
{
|
||||
public class VR_UIHighlight : VR_Highlight
|
||||
{
|
||||
#region INSPECTOR
|
||||
[SerializeField] private Canvas canvas = null;
|
||||
[SerializeField] private Transform grabbableMarker = null;
|
||||
[SerializeField] private float scaleTime = 0.2f;
|
||||
[SerializeField] private float radius = 0.2f;
|
||||
#endregion
|
||||
|
||||
private Coroutine scaleCoroutine = null;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
LookAtCamera();
|
||||
|
||||
|
||||
if (CanHighlight())
|
||||
{
|
||||
if (!canvas.gameObject.activeInHierarchy)
|
||||
canvas.gameObject.SetActive( true );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (canvas.gameObject.activeInHierarchy)
|
||||
canvas.gameObject.SetActive( false );
|
||||
|
||||
grabbableMarker.localScale = Vector3.one;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void LookAtCamera()
|
||||
{
|
||||
canvas.transform.position = canvas.transform.parent.position + ( ( Camera.main.transform.position - transform.position ).normalized * radius );
|
||||
}
|
||||
|
||||
public override void Highlight(VR_Controller controller)
|
||||
{
|
||||
ScaleTween( 1.2f );
|
||||
}
|
||||
|
||||
public override void UnHighlight(VR_Controller controller)
|
||||
{
|
||||
ScaleTween( 1.0f );
|
||||
}
|
||||
|
||||
private void ScaleTween(float scale)
|
||||
{
|
||||
if (scaleCoroutine != null)
|
||||
StopCoroutine( scaleCoroutine );
|
||||
|
||||
scaleCoroutine = StartCoroutine( ScaleRoutine( scale ) );
|
||||
|
||||
}
|
||||
|
||||
private IEnumerator ScaleRoutine(float scale)
|
||||
{
|
||||
float currentTime = 0.0f;
|
||||
|
||||
while (currentTime <= scaleTime)
|
||||
{
|
||||
currentTime += Time.deltaTime;
|
||||
grabbableMarker.transform.localScale = Vector3.Lerp( grabbableMarker.transform.localScale , Vector3.one * scale , currentTime / scaleTime );
|
||||
|
||||
yield return new WaitForEndOfFrame();
|
||||
}
|
||||
|
||||
grabbableMarker.transform.localScale = Vector3.one * scale;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user