전체 글 108

디스크 골프 [#5] - 디스크 골대 애니메이션

팀원과 회의한 결과 마그누스 자체는 수정할 부분이 없다고 보기 때문에 디스크 움직임은 차차 수정하는 걸로 하고 이 다음은 디스크 골대의 애니메이션을 만들기로 했다. 하이어라키에서 골대의 자식 오브젝트를 까서 체인 부분을 확인해봤는데 체인이 따로 나눠져 있는게 한 덩어리로 되있었다. 디스크가 골대와 접촉할 때 체인이 상호작용하면서 움직여야 하기 때문에 어떻게 해야 할지 고민하다가 절차적 애니메이션을 사용하기로 했다. https://youtu.be/aiuwSWYnqrU?si=Z-D0YwpY99_LC_OI 절차적 애니메이션( Procedural animation )이란 오브젝트가 다른 오브젝트의 움직임에 영향을 받는 애니메이션으로 디스크가 골대 체인과 상호작용 해야 하기 때문에 이 방법을 쓰는게 맞다고 생각했..

VR 콘텐츠 제작 2023.11.20

디스크 골프 [#4] - 프리스비 운동 R&D

팀원과 회의를 통해 다른 시뮬레이터를 사용해서 프리스비 R&D를 진행하기로 헀다. using OVR; using System; using UnityEditor; using UnityEngine; public class DiscController : MonoBehaviour { private float alpha = 0; private float RHO = 1.23f; // 공기 밀도 private float roll; private float spin; private float pitch; [SerializeField] bool isLift; [SerializeField] bool isDrag; [SerializeField] bool isGravity; [SerializeField] bool isTorq..

VR 콘텐츠 제작 2023.11.15

디스크 골프 [#3] - 프리스비 운동 R&D

저번 시간에 프리스비 시뮬레이터의 파이썬 코드를 유니티로 고쳐쓰는 작업을 했었는데 예상한만큼 프리스비가 움직이지 않았다. 그래서 어떤 부분이 생각처럼 안되는지 알기 위해서 먼저, Debug로 Drag와 Lift값을 찍어보기로 하였다. 당장 눈에 띄는건 Drag의 Y값이 크게 나온다는걸 알 수 있었다. AngleOfAttack의 값도 한번 찍어 보았다. 그리고 Frisbee 스크립트와 시뮬레이터를 같이 살펴보면서 문제가 될 것 같은 부분을 발견하였다. 시뮬레이터에서는 x,y축이 평면이고 z축이 상하인데 유니티에선 x,z축이 평면이고 y축이 상하를 나타낸다. 스크립트를 살펴보니 그 부분을 제대로 수정하지 않고 넣는 값만 바꿔서 넣었는데 아무래도 이 부분을 제대로 수정해야 할 것 같다. xyz축을 수정했는데도..

VR 콘텐츠 제작 2023.11.13

디스크 골프 [#2] - 프리스비 운동 R&D

프리스비 시뮬레이터의 파이썬 코드를 C#으로 바꾸고 전체적인 내용을 봤는데 Chat gpt로 바꾼 코드는 흐름을 파악하기엔 좋았지만 실제로 적용하기엔 좀 문제인 부분이 많았다. 그래서 C#의 코드를 참조하되 파이썬의 코드와 같이 R&D를 진행하기로 했다. 힘과 토크를 계산하는 메서드에서 가장 먼저 실행되는 코드는 Result의 딕셔너리를 만들고 ComputeAngleOfAttack메서드로 공기역학에서 사용되는 A각을 계산하는 메서드이다. public static (float, float, float, float, float, Matrix4x4, float, Vector3) ComputeAngleOfAttack(float phi, float theta, Vector3 velocity, bool return..

VR 콘텐츠 제작 2023.11.09

디스크 골프 [#1] - 프리스비 운동 R&D

디스크 골프는 플라스틱 원반을 던져서 바스켓에 넣는 게임이다. 규칙은 골프와 동일하며 구현할 것 자체는 많이 없지만 핵심이 되는 프리스비 운동이 곧 디스크 골프 게임의 퀄리티에 직결하므로 프리스비 운동을 신경써서 R&D하기로 했다. 가장 먼저 해본일은 프리스비가 어떻게 움직이는지 알아보는 것이었다. 유튜브에서 디스크 골프 대회 영상을 참고하였다. https://youtu.be/Ldgt7ZYxTcU?si=AK4Oq9DkA-AZsfSH 프리스비는 수평에서 살짝 각을 줘서 날리면 다음과 같이 곡선을 그리며 상승하다가 낙하한다. 이걸 보고 든 생각은 이걸 물리학을 적용해서 구현해야 할지 아니면 곡선을 그리는 방정식을 활용해서 구현해야 할지 고민이 되었다. 아무래도 물리학을 사용해서 구현하는게 좀 더 보람이 있고..

VR 콘텐츠 제작 2023.11.08

[Unity VR]애니메이션을 이용해서 커스텀 핸드포즈 만들기

오큘러스 SDK의 Interaction을 사용해서 커스텀 핸드포즈를 구현하려고 관련자료를 찾아봤는데 자료가 너무 적어서 찾을 수가 없었다. 그래서 코드를 까봤는데 애니메이션을 이용해서 핸드포즈를 만드려면 Interaction보다는 OVR Grabber를 사용하는게 구현이 더 용이하였다. 먼저 OVRCameraRig를 검색해서 하이어라키에 추가한다. MainCamera는 지워주자 LeftHandAnchor아래에 LeftControllerAnchor에 CustumHandLeft를 검색해서 추가해주자. 이 과정에서 쓰고 싶은 손 모델이 있다면 l_hand_skeletal_lowres를 비활성화하고 쓰고 싶은 핸드모델을 추가해주면 된다. GameDevHQ의 손 모델을 추가해서 사용하기로 했다. 그리고 LeftH..

VR 콘텐츠 제작 2023.11.02

[Unity VR]오큘러스 개발을 위한 초기 설정

먼저 에셋스토어에서 Oculus Intergration을 받아서 SDK를 추가해주자. 다운받은 버전은 v57.0 이다. Show Assets를 누르고 Clean Up을 선택한다. Restart누르고 Upgrade 재시작하면 Oculus가 추가된 것을 볼 수 있다. 메타 퀘스트의 타겟 플랫폼은 안드로이드이므로, Switch Platform을 눌러서 유니티의 플랫폼을 안드로이드로 바꿔주자 오큘러스를 PC와 연결했을때 Run Device에 Oculus Quest가 표시된다면 성공이다. 다 끝났다면 왼쪽 아래의 Player Settings를 클릭하자. Oculus탭에 들어가서 Fix All과 Apply All을 클릭하자, 발생할 수 있는 에러나 추천설정을 자동으로 수정해준다. 수동으로 설정을 수정하고 싶으면 다..

VR 콘텐츠 제작 2023.10.26

[Unity VR]오큘러스에서 DistanceGrab / GhostReticle 만들기

Distance Grab은 말 그대로 멀리 있는 개체를 잡기 위한 그랩이다. Distance Grab은 그랩과 마찬가지로 인터랙터와 잡을 개체에 인터랙터블을 추가함으로서 만들 수 있다. 먼저 DistanceHandGrabInteractor를 추가해보자 HandGrabInteractor와 마찬가지로 OVRHands의 양손에 HandInteractors부분에 추가해주면 된다. 그리고 HandInteractorsLeft/Right 양손에 인터렉터를 넣어준다. OVRControllerHands를 쓸 경우 마찬가지로 ControllerHandInteractors에 같은 과정을 반복하면 된다. 그 다음엔 Cube 오브젝트를 생성해서 DistanceGrab을 할 대상으로 사용하자. Cube에는 콜라이더와 리지드바디를..

VR 콘텐츠 제작 2023.10.25

[Unity VR]오큘러스에서 Grab / Throw / Input 하기

오큘러스 환경에서 유니티로 작업하기 위해서 오큘러스 SDK를 활용한다. 여기선 Integration SDK v57.0을 활용하여 작업을 하였다. 먼저 기존에 있던 메인카메라를 삭제하고 OVRCameraRig를 검색하여 가져 온다. 그 다음엔 OVRCameraRig에 LeftHandAnchor를 찾아서 OVRHandPrefab을 추가한다. 그리고 OVR Hand와 OVR Skeleton을 제외한 나머지 스크립트를 비활성화 한다. RightHand에도 똑같이 적용한다. 이때 OVR Hand의 Hand Type과 OVR Skeleton의 Skeleton타입은 각각 Left Right로 설정한다. 그리고 OVRInteraction을 검색해서 OVRCameraRig의 자식으로 추가한다. 이제 물건을 집기 위한 손..

VR 콘텐츠 제작 2023.10.23

[Unity VR]오큘러스 OVRCameraRig의 Tracking Origin Type 매개변수의 차이

오큘러스 SDK OVRCameraRig의 OVRManger스크립트의 Tracking Origin Type에는 3가지 매개변수가 있는데 Eye Level Floor Level Stage 로 구분된다. 유니티에서 오큘러스를 사용할때 오큘러스는 장치의 회전이나 위치정보를 유니티로 보내는데 이때 해당값은 유니티가 참조하는 매개변수에 따라 달라진다. Eye Level은 말 그대로 눈높이에서 위치와 회전정보를 탐색하는 매개변수로 오큘러스의 장치를 기준으로 값을 보낸다. Floor Level은 오큘러스의 바닥을 기준으로 위치와 회전정보를 전달한다. 높이는 가디언 설정을 통해 변경된다. Stage는 Floor Level과 마찬가지로 오큘러스의 지면을 참조하지만 오큘러스의 위치 재설정에 응하지 않는다. 이게 무슨 뜻이냐..

VR 콘텐츠 제작 2023.10.23