목표


먼저 3D그림 그리기 기능은 unity 의 ‘Trail Renderer’ 컴포넌트를 사용하였다.


일단 이 에셋은 팔레트가 아니라 말그대로 컬러를 추출하는 에셋이기때문에 외부에서 팔레트을 다운받은 후 집어넣어야한다. 그다음 팔레트에 있는 색을 pick할 수 있게 구현하면 될 거 같다

  1. 색상선택으로 사용하고자 하는 UI에 Colorpicker_HSV 프리팹을 캔버스에 끌어다 놓는다
  2. Trail Renderer을 가지고있는 오브젝트에 colorpicker 컴포넌트를 추가한다. 이렇게하면 해당 오브젝트의 Tril Renderer색상을 선택한 색상으로 바꿀 수 있다.
  3. ColorPicker 컴포넌트에서 newColor속성을 사용하여 선택한 색상 값을 가져올 수 있다. 이 값으로 Trail Renderer의 색상을 변경할 수 있다.

Vr의 특정 버튼을 누르고있을 때 ui창이 뜨고 손을 떼면 ui창이 사라지게할것이다. 또한 팔레트의 Canvas 는 world space가 아닌 Screen space이다 근데 오버레이로 해야할지 카메라로 해야할지는 아직 고민이다

근데 VR에서 될까?..

⇒ 안됨

using UnityEngine;

public class VRColorPicker : MonoBehaviour
{
    public GameObject colorPickerUI;
    public Transform vrCameraTransform; // VR 카메라의 Transform

    private bool isUIActive = false;
    private float minDistanceToShowUI = 2f; // UI가 띄워지는 최소 거리

    private void Start()
    {
        // Color Picker UI를 비활성화
        colorPickerUI.SetActive(false);
    }

    private void Update()
    {
        // 사용자와 UI의 거리를 계산
        float distanceToUI = Vector3.Distance(vrCameraTransform.position, colorPickerUI.transform.position);

        // 버튼에서 손을 떼면 UI를 닫음
        if (isUIActive && OVRInput.GetUp(OVRInput.Button.Three)) // Oculus Quest의 X 버튼
        {
            CloseUI();
        }

        // 사용자와 UI의 거리가 일정 거리보다 가까우면 UI를 열고, 그렇지 않으면 닫음
        if (distanceToUI < minDistanceToShowUI)
        {
            OpenUI();
        }
        else
        {
            CloseUI();
        }
    }

    private void OpenUI()
    {
        // UI를 열고 UI가 활성화된 상태에서는 Trail Renderer 색상 변경
        if (!isUIActive)
        {
            isUIActive = true;
            colorPickerUI.SetActive(true);

            // 사용자가 선택한 색상을 Trail Renderer의 색상으로 설정
            Color selectedColor = colorPickerUI.GetComponent<ColorPicker>().newColor;
            // Trail Renderer를 사용하고 있다면 다음과 같이 설정합니다.
            //TrailRenderer trailRenderer = GetComponent<TrailRenderer>();
            //trailRenderer.startColor = selectedColor;
        }
    }

    private void CloseUI()
    {
        // UI를 닫음
        isUIActive = false;
        colorPickerUI.SetActive(false);
    }
}