X버튼 or A 버튼?(아니면 옆에버튼)을 눌렀을 때 color picker이 나오도록 한다.
[그림 완성하기] 버튼을 넣는다
참고자료
먼저 3D그림 그리기 기능은 unity 의 ‘Trail Renderer’ 컴포넌트를 사용하였다.
Trail Renderer 란? 움직이는 게임 오브젝트 뒤에 폴리곤 트레일을 엔더링한다. 이동하는 물체의 움직임이나 이동하는 물체의 경로 또는 위치를 강조할 때 사용될 수 있다.
이것을 이용해 펜촉을 ‘Trail’ 로 두고 이 펜촉의 움직임에 따라 그림이 생성된다
일단 이 에셋은 팔레트가 아니라 말그대로 컬러를 추출하는 에셋이기때문에 외부에서 팔레트을 다운받은 후 집어넣어야한다. 그다음 팔레트에 있는 색을 pick할 수 있게 구현하면 될 거 같다
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);
}
}