nanalyee 2021. 7. 21. 20:56
  • 글쓴이는 배워가는 학생이며 업무 내용을 스스로 관리하기 위해 관련 티스토리를 작성, 운영 중입니다.
  • 글 내용이 모두 정확하다고 보장할 수 없으며 글쓴이의 개인적인 생각이 담긴 글입니다.
  • 제작할 때 참고한 글은 링크를 남겼으며, 남기지 않은 내용은 주변 지인들에게 얻은 팁입니다.
  • 조언, 지적, 개선사항 등은 둥글게 부탁드립니다.

 

 

[ DAY 3 : 캐릭터 들어 이동 (2),  폭발물 던지기 ]

 

 

1. Touch Helper 스크립트

터치 헬퍼 스크립트를 통해 총 두 가지 기능을 완성한다.

- 터치 이벤트를 작성
- AR 잘 빌드됐는지 유니티 에디터에서 확인하기 위함

 

예제 코드 중 public static bool 이름 => Input.실행함수; 이런 느낌의 코드가 여러 줄 나왔는데

=> 관련 자료는 찾지 못했다.. 어케 써먹는 걸까..

 

 

 

 

2. 터치 이벤트 구현

두 개 터치 시 박스를 생성한다. (유니티 에디터 상에서는 우클로 대체)

scene view / game view

* 원래는 가만히 있지만 박스가 원래 있던 자리 위에 생성되어 충돌되어서 날아다니는 것처럼 보이게 됨

 

 

 

 

3. 터치한 곳을 따라오는 (오브젝트를 잡는) 이벤트 구현

박스 터치를 유지하면 박스가 터치한 위치를 따라간다. (유니티 에디터 상에서는 좌클로 대체)

원리는 SetParent를 활용해 오브젝트를 메인 카메라의 자식으로 설정한다.

유니티 에디터 상에서 테스트

 

 

 

 

4. 잡았던 오브젝트 내려놓는 이벤트 구현

마우스 버튼 누르던걸 떼서 박스를 내려놓는다.

원리는 SetParent(null)을 사용해 상속을 해제한다.

 유니티 에디터 상에서 테스트 (지면 X)
유니티 에디터 상에서 테스트 (지면 O)

 

 

 

 

5. 그림자 구현

 

arkit mobile shader를 추가해 Plane에 그림자를 구현한다.

https://github.com/HippoAR/Unity-Technologies-unity-arkit-plugin/blob/master/Assets/UnityARKitPlugin/Examples/Common/Shaders/MobileARShadow.shader

 

강좌에서는 어떤 shader종류이던 상관이 없다고 했다.

우선 강좌와 동일한 unlit으로 생성했다. 이름은 MobileARShadow로 한다.

사용할 매터리얼 설정

 

 

 

 

6. 빌드 테스트 (1)

빌드 중 오류가 발생했는데 대략 스크립트 안에 해당 변수를 찾을 수 없다는 내용이었다.

이상하다 싶어 확인해보니 #else 안에 변수 철자 오타가 있었다!

#else 안에 있으면 회색으로 다 바뀌어서 주석도 구분이 안되고 오타도 더 안보이는 것 같다. 주의 깊게 살피자!

apk 테스트

 

 

 

 

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)

apk 테스트

 

 

 

 

11. 추가 해야하는 부분

 

[ ball (비눗방울 등 폭발물로 쓰일 오브젝트) ]

  • 충돌 파티클
  • 던지는 공의 모델링 파일
  • 뒤에 계속될 플랫폼 관련 충돌 시 플랫폼 destroy
  • 캐릭터와 충돌 시 캐릭터와 폭발물 모두 destroy
  • 버튼을 눌러야 폭발물 생성
  • 일정 시간 지나면 삭제

[ box (주인공 캐릭터) ]

  • 모델링 파일 연동
  • 대롱대롱 애니메이션 연동
  • 주인공 캐릭터 하나만 생성되도록 제한
    → 캐릭터가 생성되었는데 떨어져 보이지 않는다면?
  • 캐릭터 생성(리셋) 버튼 (생성 시키면 기존의 오브젝트 삭제)