Unduck 게임의 패스스루환경과 사물 인식은 완료해서 MR 환경을 맞추었다.
그래서 이를 이용한 MR 게임을 만드려 보려고 했다.
이럴수가.. Depth API를 활용한 모습을 보고 당연하게 MR 스테이지에 있는 종이학을 쉐이더를 넣으면 적용 될 줄 알았다.
Meta Quest2가 구 하드웨어라 이용할 수 없었다.............
그래도 포기 할 수 없어서 여러 방법을 찾아보았다.
비슷하게나마 구현 할 수 있도록 나는 생각했다. 결국에 얼추 비슷한 기능을 만들 수 밖에...
1. 가구 뒤에 오브젝트가 안보이면 된다.
2. 가구에 뭔가 설정을 해줘야 한다.
3. 종이학의 렌더러를 껐다 켜야한다.
이런 식으로 진행하려고 한다.
먼저 Quest2가 바라보는 화면은 카메라 시점이기 때문에 종이학(단서)가 가구 뒤에 있으면 안보이게 해야 했기때문에
카메라에 방향에 맞는 레이캐스트를 활용해줬다. 이때 레이캐스트는 "Wall" 이라는 태그를 가진 collider와 충돌하게 되면 그 종이학의 렌더러를 꺼주면 되는것이다.
그나저나 왜 Wall이냐.. 원래 벽만 설정하면 되는줄 알았지만 Wall로 가구들의 태그를 퉁쳐버리자... 그랬더니 확실하게 앞에 가구가 있으면 오브젝트는 보이지 않게 된다.. Depth API처럼 손가락 사이사이로 안보이게 하고 싶었지만 아직은 능력부족이다. 얼추 비슷하게나마 이 문제를 해결하여 몰입감을 더 느끼게 할 수 있었다..
만든 소스 코드는 아래와 같다.
using UnityEngine;
public class ObjectVisibilityController : MonoBehaviour
{
public GameObject danseo;
private Transform cameraTransform;
void Start()
{
cameraTransform = GameObject.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor").transform;
}
void Update()
{
RaycastHit hit;
Vector3 directionToObject = (danseo.transform.position - cameraTransform.position).normalized;
if (Physics.Raycast(cameraTransform.position, directionToObject, out hit))
{
if (hit.collider.CompareTag("Wall"))
{
MeshRenderer renderer = danseo.GetComponentInChildren<MeshRenderer>();
if (renderer != null)
{
renderer.enabled = false;
}
}
else
{
MeshRenderer renderer = danseo.GetComponentInChildren<MeshRenderer>();
if (renderer != null)
{
renderer.enabled = true;
}
}
}
}
}
'게임개발 > Unduck' 카테고리의 다른 글
Unity 와 Oculus Quest2 개발 환경 만들기 (1) | 2024.05.07 |
---|