Untitled

노드 사이 간선을 생성한다.

    public void SetTarget(GameObject _obj)
    {
        if (firstSpot == null)
        {
            firstSpot = _obj;
            Debug.Log("첫 번째 영역 지정 완료");
            _obj.GetComponent<Node>().SelectedWayMode(true);
        }
        else if (secondSpot == null)
        {
            secondSpot = _obj;
            Debug.Log("두 번째 영역 지정 완료");
            _obj.GetComponent<Node>().SelectedWayMode(true);
        }
        else
        {
            Debug.Log("더 이상 지정할 수 없습니다.");
            return;
        }
    }

SetTarget 함수는 간선을 생성하기 위해 양 끝 노드를 선택하는 함수이다.

InputMange로부터 호출되어 매개변수로 넘겨받은 GameObject를 기반으로 첫번째 지점, 두번째 지점을 탐색하여 비어있을 경우 넘겨받은 GameObject를 할당한다.

노드 오브젝트가 클릭이 되었을 경우 시각적 표현으로 노드 스크립트의 SelectedWayMode를 실행한다. 이 함수는 노드 오브젝트를 일시적으로 녹색으로 보이게 한다.

만약 두 변수가 모두 할당되어 있을 경우 위의 단계를 진행하지 않는다.

    void WayCreate()
    {
        Vector3 fsPosition = firstSpot.transform.position;
        Vector3 ssPosition = secondSpot.transform.position;

        float dist;     //거리
        float angle;    //각도
        Vector3 wayPos; //생성될 위치

        dist = Vector3.Distance(fsPosition, ssPosition);    //두 지점 사이 거리
        Vector3 v3 = ssPosition - fsPosition;               //각도 계산에 필요한 수치
        angle = Quaternion.FromToRotation(Vector3.up, v3).eulerAngles.y;    //두 지점의 연결선과 x축 간의 각도
        wayPos = new Vector3((fsPosition.x + ssPosition.x) / 2, (fsPosition.y + ssPosition.y) / 2, (fsPosition.z + ssPosition.z) / 2);

        //way 오브젝트 생성
        GameObject way = Instantiate(wayObj, wayPos, Quaternion.Euler(0, angle, 0));

        //생성된 way 오브젝트 크기 설정
        way.transform.localScale = new Vector3(dist, 0.2f, way.transform.localScale.z);

        way.GetComponent<Way>().NodeA = firstSpot;
        way.GetComponent<Way>().NodeB = secondSpot;

        //각 노드에 인접노드와 간선을 전달
        firstSpot.GetComponent<Node>().AddAdjNodeWay(secondSpot, way);
        secondSpot.GetComponent<Node>().AddAdjNodeWay(firstSpot, way);

        // //각 노드에 상대노드의 정보를 전달
        // firstSpot.GetComponent<Node>().AddNearNode(secondSpot);
        // secondSpot.GetComponent<Node>().AddNearNode(firstSpot);

        //선택됨을 나타내는 가시적 표현을 초기화
        firstSpot.GetComponent<Node>().SelectedWayMode(false);
        secondSpot.GetComponent<Node>().SelectedWayMode(false);

        //선택된 노드를 선택해제
        firstSpot = null;
        secondSpot = null;
    }

WayCreate 함수는 양 끝 노드가 설정되었을 때 간선을 생성하는 함수이다.