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

 

 

[ DAY 8 : 콘텐츠 병합 및 수정 ]

 

To Do List

  1. edit 모드
  2. 내려놓은 캐릭터 다시 들어올리고 내려놓을 수 있게
  3. edit 모드 해제하면 선택 해제
  4. 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();
        }
    }