[Unity] [AR] Day 3
- 글쓴이는 배워가는 학생이며 업무 내용을 스스로 관리하기 위해 관련 티스토리를 작성, 운영 중입니다.
- 글 내용이 모두 정확하다고 보장할 수 없으며 글쓴이의 개인적인 생각이 담긴 글입니다.
- 제작할 때 참고한 글은 링크를 남겼으며, 남기지 않은 내용은 주변 지인들에게 얻은 팁입니다.
- 조언, 지적, 개선사항 등은 둥글게 부탁드립니다.
[ DAY 3 : 캐릭터 들어 이동 (2), 폭발물 던지기 ]
1. Touch Helper 스크립트
터치 헬퍼 스크립트를 통해 총 두 가지 기능을 완성한다.
- 터치 이벤트를 작성
- AR 잘 빌드됐는지 유니티 에디터에서 확인하기 위함
- 스크립트 작성 중 #if #else #endif 가 등장해 추가로 공부했다.
#if 참고 사이트 : https://jhnyang.tistory.com/299
예제 코드 중 public static bool 이름 => Input.실행함수; 이런 느낌의 코드가 여러 줄 나왔는데
=> 관련 자료는 찾지 못했다.. 어케 써먹는 걸까..
- C# 6.0부터 =>는 람다 연산자로 쓰일 수 있다고 한다. {}를 줄여서 표현할 수 있다.
람다 연산자 참고 사이트 : https://blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=cdw0424&logNo=221722624325&proxyReferer=
2. 터치 이벤트 구현
두 개 터치 시 박스를 생성한다. (유니티 에디터 상에서는 우클로 대체)
* 원래는 가만히 있지만 박스가 원래 있던 자리 위에 생성되어 충돌되어서 날아다니는 것처럼 보이게 됨
3. 터치한 곳을 따라오는 (오브젝트를 잡는) 이벤트 구현
박스 터치를 유지하면 박스가 터치한 위치를 따라간다. (유니티 에디터 상에서는 좌클로 대체)
원리는 SetParent를 활용해 오브젝트를 메인 카메라의 자식으로 설정한다.
4. 잡았던 오브젝트 내려놓는 이벤트 구현
마우스 버튼 누르던걸 떼서 박스를 내려놓는다.
원리는 SetParent(null)을 사용해 상속을 해제한다.
5. 그림자 구현
arkit mobile shader를 추가해 Plane에 그림자를 구현한다.
강좌에서는 어떤 shader종류이던 상관이 없다고 했다.
우선 강좌와 동일한 unlit으로 생성했다. 이름은 MobileARShadow로 한다.
6. 빌드 테스트 (1)
빌드 중 오류가 발생했는데 대략 스크립트 안에 해당 변수를 찾을 수 없다는 내용이었다.
이상하다 싶어 확인해보니 #else 안에 변수 철자 오타가 있었다!
#else 안에 있으면 회색으로 다 바뀌어서 주석도 구분이 안되고 오타도 더 안보이는 것 같다. 주의 깊게 살피자!
7. 클래스 상속해 던지기 기능 구현
기본적으로 MonoBehavior를 상속받고 있는 C# 스크립트.
이번엔 BallController 스크립트를 생성해 BoxController 스크립트를 상속받도록 한다.
public class BallController : BoxController
protected Vector3 InputPosition;
- protected : 상속 클래스 및 선언 클래스에서만 접근 가능
( 접근 한정자 참고 사이트 : https://slaner.tistory.com/69 )
// 스크립트 : 상위 클래스
// 하위 클래스에서 접근 가능한 상위 클래스의 함수
protected virtual void OnHold()
- virtual 선언 : 하위 클래스에서 상위 클래스의 함수를 재정의 가능
// 스크립트 : 하위 클래스
// 하위 클래스에서 상위 클래스 함수 재정의
protected override void OnHold()
- 하위 클래스에서 상위 클래스 함수 재정의 시 아래와 같이 override 명시
8. 충돌 효과 구현
터치하는 도중에 충돌이 발생하지 않도록 다음 코드를 추가하는 것 잊지 말기!
if (collision.gameObject.tag.Equals("(던지는 Ball의 태그)")) return;
10. 빌드 테스트 (2)
11. 추가 해야하는 부분
[ ball (비눗방울 등 폭발물로 쓰일 오브젝트) ]
- 충돌 파티클
- 던지는 공의 모델링 파일
- 뒤에 계속될 플랫폼 관련 충돌 시 플랫폼 destroy
- 캐릭터와 충돌 시 캐릭터와 폭발물 모두 destroy
- 버튼을 눌러야 폭발물 생성
- 일정 시간 지나면 삭제
[ box (주인공 캐릭터) ]
- 모델링 파일 연동
- 대롱대롱 애니메이션 연동
- 주인공 캐릭터 하나만 생성되도록 제한
→ 캐릭터가 생성되었는데 떨어져 보이지 않는다면? - 캐릭터 생성(리셋) 버튼 (생성 시키면 기존의 오브젝트 삭제)