테스트를 위해 지형을 임의로 생성하고 생성된 지형끼리 이어지는 선을 만들 수 있는 기능을 구현

Untitled

지형이 생성 될 수 있도록 기반을 생성한다.

Untitled

지형이 생성되면 일괄적으로 관리할 수 있도록 Ground란는 이름의 빈 오브젝트를 생성한다. 이 오브젝트는 노드 및 간선 생성을 담당하는 스크립트가 포함된다.

또한 입력감지를 담당할 빈 오브젝트로 InputManger를 생성한다.

생성될 노드

생성될 노드

스크립트는 1.Floor를 클릭 2.생성모드 활성화 2-1.해당 좌표에 노드를 생성 2-2.좌클릭시에는 생성되었던 노드를 삭제

3.생성모드를 끄고 선택모드로 전환 3-1.최대 두개의 노드를 선택 3-2.길 생성을 선택하면 노드 사이에 간선이 생성

의 순서로 구현

Input Manger

먼저 입력을 받아들이기 위해 Input Manager 스크립트를 아래와 같이 작성

private void Update()
    {
        CheckKey();
    }

    private void CheckKey()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            {
                if (GroundMaker.instance.nodeActivateMode)
                {
                    if (hit.collider.gameObject.layer == 6)
                    {
                        //감지된 부분이 지형(Floor)일 경우
                        GroundMaker.instance.CreateNode(hit);
                    }
                    else
                    {
                        //지형이 아닌 다른 부분을 클릭했을 경우
                        Debug.Log("해당 지역에 노드를 생성할 수 없습니다.");
                    }
                }
                else if (GroundMaker.instance.wayActivateMode)
                {
                    GameObject scanObj = hit.collider.gameObject.transform.parent?.gameObject;
                    if (scanObj && scanObj.layer == 7)
                        GroundMaker.instance.SetTarget(scanObj);
                    else
                        Debug.Log("노드를 지정해 주세요.");
                }
            }
        }
        if (Input.GetMouseButtonUp(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            {
                if (GroundMaker.instance.nodeActivateMode)
                {
                    GroundMaker.instance.RemoveNode(hit);
                }
                else if (GroundMaker.instance.wayActivateMode)
                {

                }
            }
        }
    }

클릭한 지점에 Ray를 생성하여 RayHit된 오브젝트의 collider를 활용하여 정보를 수집, 좌클릭시 지형을 생성할 수 있는 레이어만 감지하도록 했으며 우클릭시 생성된 노드의 경우만 삭제할 수 있도록 구현

Ground Maker