혼자 개발하기/AR 다뤄보기
[Unity] [AR] Day 8
nanalyee
2021. 7. 27. 03:29
- 글쓴이는 배워가는 학생이며 업무 내용을 스스로 관리하기 위해 관련 티스토리를 작성, 운영 중입니다.
- 글 내용이 모두 정확하다고 보장할 수 없으며 글쓴이의 개인적인 생각이 담긴 글입니다.
- 제작할 때 참고한 글은 링크를 남겼으며, 남기지 않은 내용은 주변 지인들에게 얻은 팁입니다.
- 조언, 지적, 개선사항 등은 둥글게 부탁드립니다.
[ DAY 8 : 콘텐츠 병합 및 수정 ]
To Do List
- edit 모드
- 내려놓은 캐릭터 다시 들어올리고 내려놓을 수 있게
- edit 모드 해제하면 선택 해제
- play 모드 시에만 edit 제외한 기능 사용
1. edit mode
public void EditMode()
{
if (!editMode)
{
Debug.Log("Edit Mode");
editMode = true;
}
else
{
Debug.Log("End Edit Mode");
editMode = false;
}
}
editMode를 false로 초기화 해준 상태로 시작
버튼 누를때마다 true/false 전환하여 해당 상태마다 버튼 및 스크립트 활성화/비활성화
→ 마지막에 선택 된 플랫폼이 해제가 되지 않은 상태로 play 모드로 전환되는 문제
→ 다른 곳을 터치 했을 때 선택 해제하는 기능, play 모드 들어가면 자동으로 선택 해제 되는 기능 필요
스크립트를 활성화/비활성화 하는 것은 한계가 있어서 PlaceController 스크립트를 다음과 같이 수정
void Update()
{
if (TouchHelper.editMode)
{
Edit();
}
else
{
EditEnd();
}
}
2. 내려놓은 박스도 다시 드는 건 가능하나 다시 내려놓을 수도 있도록
#ResetChar스크립트
private void OnPut(Vector3 pos)
{
HoldingObject.GetComponent<Rigidbody>().useGravity = true;
HoldingObject.transform.SetParent(null);
//characterPick = false;
}
해당 부분만 주석처리해준다. 초기화는 하지 않고 진행한다.
#Bomb 스크립트
if (HoldingObject)
{
// 터치 안할 때
if (TouchHelper.IsUp && bombPick)
{
OnThrow(InputPosition);
HoldingObject = null;
return;
}
Move(InputPosition);
return;
}
캐릭터의 선택 상태는 중요하지 않게 됐기 때문에 조건을 다음과 같이 수정한다.
3. play 모드로 돌아가면 (edit 모드 해제하면) 선택되어있는 플랫폼 해제
private void EditEnd()
{
placementIndicator.SetActive(false);
if (Physics.Raycast(mainCamera.ScreenPointToRay(TouchHelper.TouchPosition),
out var raycastHit, mainCamera.farClipPlane))
{
if (!raycastHit.transform.gameObject.tag.Equals("Platform"))
{
RefreshSelection(raycastHit.transform.gameObject);
}
return;
}
}
정답은 아니지만 고민 끝에 이 방법을 선택했다.
4. edit 모드가 아닐 때만 캐릭터 이동/ 폭발물 던지기
void Update()
{
#if !UNITY_EDITOR// 유니티 에디터가 아닐때만 동작하도록 설정
// 두 손가락을 터치했을 때 오브젝트 생성
// if (Input.touchCount == 0) return;
#endif
if (!TouchHelper.editMode)
{
Input();
}
}