2022/12/31

노윤수·2022년 12월 31일

아무런 이유 없이 vscode에서 start나 update문에 void에러가 뜨면 설정창에 들어가서 debugger for Unity를 재설정하면 됩니다

3시 알바라 급하게 밥 먹으면서 씁니다. 진짜 안쓰면 까먹을 것 같아서 기록 남김니다.

싱글톤으로 구현되어있는 GameManager에

public Dictionary<int, bool> TimeLineTalkable = new Dictionary<int, bool>();

를 선언했습니다.

TimeLineTalkable.Add(0, true);
TimeLineTalkable.Add(1, false);

이런식으로 딕셔너리를 추가해주었는데, 이걸 언제쓰느냐? 시네마틱 화면으로 전환되는 상황에서 대화를 못하도록 처리하기 위해서 선언했습니다. mainCamera나 Crowd스크립트에서
(mainCamera)

            if (GameManager.instance.TimeLineTalkable[GameManager.instance.timeLine]==true)
            {
                if (!EventSystem.current.IsPointerOverGameObject())
                {
                    if (Physics.Raycast(ray, out hit, 17.5f))
                    {
                        if (hit.collider.gameObject.tag == "Crowd")
                        {
                            i++;
                            youchose = true;
                            chosenEnemy = hit.collider.gameObject;
                            Debug.Log("닿아서 바뀜");
                            hit.collider.gameObject.GetComponentInChildren<SkinnedMeshRenderer>().material.color = Color.red;
                        }
                    }
                }
            }

(crowd)

    private void OnMouseEnter()
    {
        if (GameManager.instance.TimeLineTalkable[GameManager.instance.timeLine] == false)
        {
            return;
        }
        GetComponentInChildren<SkinnedMeshRenderer>().material.color = hoverColor;
        WannaText.SetActive(true);
    }

이런식으로 true상황일 경우, hover일 때 색이 변경하는 것이나, 대화가 가능하며, false일 때는 둘다 불가능하도록 만들었습니다.

또한 여러가지 기능 구현을 많이 했는데, 첫번째는 힌트 조합 기능입니다. combiWord와 WordSlot 스크립트 2개로 구현했습니다. 드래그앤 드롭은 이전 일지에서 설명했고, 이번에 설명할 것은 다른 내용입니다.

예를 들어, 키워드 한개를 테이블에 올려놓으면, 정가운데 배치가 되어야하고, 두개를 올려놓으면 삼등분한 위치의 1,2에 올려져 있어야합니다. 5개월전에 블록 프로그래밍 게임을 개발하다가 포기했는데 이때 구현 못했던 기능을 지금은 구현 할 수 있어서 꽤 뿌듯했습니다. 내분점을 잡는 것은 어렵지 않았습니다. for문에서는 transform.childcount로 transform.getchild를 모두 잡아줍니다. 그리고 anchoeredPositionArray라는 List를 설정해서, OnDrop()이 일어날 때 마다(테이블에 힌트가 올라갈 때 마다) .clear를 통해서 모든 포지션을 초기화 한 후, 각각의 내분점 위치를 리스트에 저장하고 getchild 로 anchoredPosition을 옮겨서 저장하면 기능 구현이 가능합니다.

각각의 힌트에는 각각의 index가 있으며, index는 테이블 위로 올라간 순간 checkIndex.add로 또 다른 배열에 들어갑니다. 이전시간에 배웠던 sort로 index를 차례대로 맞춘 뒤, sequenceEqual로 배열 두개가 같으면 힌트가 setActive되는 방식을 이용했습니다.

profile
코딩조아

0개의 댓글