목록Unity/Unity 개발 일지 (16)
skyf의 게임 개발기

1. Player 하위에 OVRCameraRig와 모델들을 자식으로 둔다. 2. 각 모델에 VRIK 컴포넌트를 추가한다. 3. 해당 모델에 설정할 Tracking 타겟을 OVRCameraRig 하위에 있는 CenterEyeAnchor , LeftHandAnchor, RightHandAnchor 각각에 자식으로 만들어줘야 한다.(순서대로 머리, 왼손 손목, 오른손 손목이 위치할 타겟) 4. 타겟으로 지정할 오브젝트를 만들었으면 IK Target Setter를 컴포넌트로 추가한 뒤 하나하나 설정해준다. (모델타입, 본타입, 타겟 모델, 타겟 본, 위치 등등) Is Set By Editor는 타겟을 설정해주고 위치 같은 정보를 다듬었을 경우 체크해준다.(체크가 안되있는건 스크립트상에서 해준다. 5. 해당 모델..

VRIK를 이용해 모델의 손을 컨트롤러의 위치에 시키고 회전 시켜주는 기능을 구현 중에 난관이 있었지만 해결 되었다. 원인은 모델마다 팔을 벌린 정도도 다르다 보니 기존 T포즈 형태의 모델 기준에서 했던 방식이 안통했던 것이다. 그래서 위와 같이 핸드의 월드Rotation을 0,0,0으로 돌린 뒤에(위 사진 처럼) 그 기준에서 왼손 오른손이 돌아가야할 방향을 코드상에서 직접 돌려주었다. case IKBoneType.LeftHand: { if(modelType == ModelType.Mixamo) transform.localRotation = (Quaternion.Euler(offset_handWrist_vertical, offset_handWrist_horizontal, 0)) * (Quaternion...
이동 시 걷는 모션 구현(IK 이용) 핸드 애니메이션 + 팔꿈치 애니메이션 적용 칼리브레이션은 일단 전체적인 크기로 적용해보기 *MVR 구현 *유니티 멀티플레이 RD Behaviour AI RD 해보기 이동 시 네브메시 이용했는지 체크하기 + 3D Astar RD해보기(스터디추천) 폴리곤 최적화 에셋 RD해보기 부트캠프 스토어 HUD + Curved UI RD UI시스템(RayCast처리) - OculusRaycaster쪽 참고 Final IK쪽 RD - VRIK, IKSolver
public static Thread Thread.CurrentThread 를 통해 현재 실행중인 Thread 객체를 얻을 수 있다. Thread:: public string GetHashCode() 를 통해 해당 쓰레드의 id를 얻을 수가 있다. Thread:: public bool IsBackGround {get; set;}을 이용해서 주 Thread로 실행할지, 부 Thread로 실행할지 여부를 정할 수 있다. 가령, 주 Thread로 설정한 경우 상위 Thread가 종료되도 실행이 지속되고, 부 Thread로 설정한 경우에는 상위 Thread가 종료 시에 함께 종료 된다.(추측) Thread:: public void Joint() 을 호출한 경우 해당 Thread가 종료될때까지 대기한다. Thre..
오큘러스쪽에 SampleFramework를 보면 참고할만한 내용들이 많다. 일단 Locomotion 폴더쪽에 있는 내용들 중 Teleport 관련한 것들을 적용해볼 예정이다. 프리팹에 있는 와 등등을 참고해보자 에 대한 연구가 필요하다. 팔목쪽이 회전되는 IK를 구현해야 한다. 손이 상하,좌우 일땐 영향이 거의 없어야하고 z축을 기준으로 회전할때 손목쪽 팔이 같이 회전이 되어야한다. (단, 팔꿈치쪽 팔은 회전이 거의 안되야 한다.) Twist 효과 https://www.programmersought.com/article/29655194036/ 【FinalIK】Full Body Biped IK - Programmer Sought Full Body Biped IK analysis: Final IK inclu..
var q1 = Quaternion.Euler(0, -90, 0); var q2 = Quaternion.Euler(45, 0, 0); Debug.Log("q1 : " + q1.eulerAngles); Debug.Log("q2 : " + q2.eulerAngles); var r1 = q1 * q2; var r2 = q2 * q1; Debug.Log("q1 * q2 : " + r1.eulerAngles); Debug.Log("q2 * q1 : " + r2.eulerAngles); //정리 //앞쪽에 곱해주는 쿼터니언이 그 뒤쪽의 쿼터니언의 월드좌표 기준으로 회전이 되는 쿼터니언이 된다. //가령, (20,30,20)인 회전을 월드기준 (0,90,0)으로 돌려주고 싶다면, (0,90,0) * (20,30,20..

믹사모 방식의 아바타(마야)는 모든 본 지 점들의 z축이 앞을 향하고 있는 반면, 3DMax방식의 아바타는 x축의 골반기준의 부모 본을 향한다. (여기서 y축과 z축의 규칙성을 찾기가 힘들다) 신기하게도 씬에서 월드좌표로는 마야든, 3DMax든 같은 방향을 바라보고 있다. (월드 좌표 기준 Z축을 바라본다.) Quaternion local = boneTr.localRotation; worldQ = boneTr.rotation; switch (boneType) { case IKBoneType.Head: { transform.localRotation = worldQ * Quaternion.identity; } break; case IKBoneType.LeftHand: { transform.localRotat..
현재 IK를 이용한 풀바디 VR 게임을 제작중이고, 아바타는 다 같은 줄 알았는데, 모델을 뽑아내는 툴에 따라 좌표가 다르다는 사실을 알게 되었다.. 마야는 믹사모스타일(모든 본들의 좌표 z축이 바라보는 방향을 향한다) 3DMax의 경우는 z축이 이상하다(아래를 향했던것 같다..) 근데 현재 회사는 3DMax 기준인거 같아서 그 기준에 맞추는 작업이 필요하다. 오프라인 로컬 통신 기능을 만들어야 하는데 일단 C#으로 만들어야 할것 같다. 나우캠퍼스 강의 + C#으로 온라인게임 서버 만들기를 참고해서 완성해보려고 한다. * 추가하고 싶은 요소 . 텔레포트, 타워 텔레포트 . UI기능 * 번외 요소 . 장착 기능 . 장치 다루는 기능(스위치에 손 달라붙게 하는 느낌) . 양손잡이 그랩(스냅포인트 이용하기) ..