컨트롤러를 이용한 상호 작용
- 일반 오브젝트와 컨트롤러는 물리엔진 적용X (기본적으로 상호작용에 반응X)
-> 컨트롤러는 주변 객체 관통(터치, 잡기X)
- 컨트롤러와 상호 작용이 가능한 객체가 되기 위해서는?
-> 충돌체크, grab이벤트 감지 기능 필요
1. 컨트롤러
1) InteractTouch 컴포넌트 추가 ( 충돌 체크 )
2) InteractGrab 컴포넌트 추가 ( grab 액션 처리 ) - grab button 설정 필요 ( default = grip버튼 )
3) Left, Right 컨트롤러에 각각 추가
2. 객체
1) Rigidbody 객체 추가 // 물리 엔진 적용
2) InteractableObject 객체 추가
3) Is grabbable : true면 grab 가능
4) Hold Button To grab : false면 grip 버튼이 toggle 형태로 동작
5) 컨트롤러가 객체와 충돌 시 touch highlight color 색으로 변경 ( 충돌을 알기 위해 )
-> Outline Highlighter로 외곽선만 강조 ( 전체를 바꾸는 건 문제가 발생할 수 있음)
-> Thickness로 outline 굵기조절 (VRTK_Outline Object Copy Highlighter 컴포넌트 효과 추가해야함)
Grab Attach Mechanic : grab후 상호작용 가능한 객체와 어떤 관계를 가제는지에따라 다양한 grab 관게 지원
1) Fixed Joint Grab Attach
- Fixed Joint로 컨트롤러와 객체 연결 ( 기본은물체의 중심 )
- Interactable Object가 다른 충돌체와 충동하면 관절이 끊어 질 수 있다.
- Grab Attach Mechanic의 기본값
2) Spring Joint Grab Attach
- 상호 작용 가능한 객체를 스프링 조인트를 통해 컨틀롤러에 연결
- 컨트롤러와 객체 사이를 눈에 보이지 않는 스프링으로 연결
3) Track Object Grab Attach
- 상호 작용 가능한 객체에 컨트롤러 속도를 적용하여 객체의 위치를 추적
- 컨트롤러와 객체 사이 다른 물체를 놓을 수 있다.
- 다른 오브젝트와 충돌해도 grab 상황에서는 추적 계속 유지
4) Rotator Track Grab Attach
- 상호 작용 가능한 객체에 회전력 적용
- 객체는 컨트롤러에 부착되지 않고 컨트롤러 회전에 따라 회전력을 가진다.
5) Child of Controller Grab Attach
- 설정한 객체를 컨트롤러 자식으로 설정
- 사용자가 설정한 위치에 객체 위치에 컨트롤러 부착
상호 작용 가능한 객체의 사용(Use) 이벤트 : InteractUse 컴포넌트 추가(컨트롤러에)
- 일반적으로 trigger버튼으로 사용 (Use Button)
- InteractableObject객체를 상속받아 -> StartUsing, StopUsing 함수 재정의
- Is Usable : check하면 Use 관련 이벤트 동작
- Hold Button To Use : check하면 trigger 버튼 누르고 있는 동안 발생
- Use Only If Grabbed : grab하는 동안 use 이벤트 발생
Automatic grab
- 컨트롤러에 ObjectAutoGrab 컴포넌트 부착 -> 자동으로 특정 객체를 부착
- Object To Grab : 상호작용 가능한 객체 지정
- Object is prefab : 상호작용 가능한 prefab 지정
- Clone Grabbed Object : 복제해서 컨트롤러 부착
사과나무
- Gravity true : 나무에 매달려 있지 못함 //중력 적용
- Gravity false : 나무에 매달려 있음 //중력 없음
- Is Kinematic false : 중력만 X 물리엔진 적용 => 우주처럼 둥둥 떠다님
(사과)-> Gravity false, Is Kinematic true => 사과를 나무에 매달려 있게 한다.(중력X 물리엔진 적용)
(컨트롤러)release 후 -> 중력 true, Is Kinematic false => 사과가 아래로 떨어짐
(사과나무)OncollisionEnter를 통해 다시 부착 구현 (중력 false, Is Kinematic true)
'학교수업' 카테고리의 다른 글
웹개발 기초 7주차 (0) | 2021.10.30 |
---|---|
<시험정리> 가상현실프로그래밍 (0) | 2021.10.23 |
임베디드기초 7주차 (0) | 2021.10.23 |
<시험 정리>정보보호개론 (0) | 2021.10.20 |
<시험정리>사물인터넷개론 (0) | 2021.10.19 |