리스트를 전달하다가 값이 날라가는 경우...

Unity3D/Problems 2015. 10. 23. 12:10
반응형

http://hidingzz.tistory.com/m/post/635




상황: 


페스파인더 (길을 찾아줌)

컨트롤러 (게스트를 움직임)

게스트(그냥 뷰)



탐색 완료 콜백으로 리스트를 컨트롤러에게 보내줌 


컨트롤러는 리스트를 다시 게스트에게 보내줌 


게스트는 리스트에 담긴 경로로 이동 




컨트롤러

 private List<Vector2> pathNodes = new List<Vector2>();

    private void OnSearchComplete(List<Tile> list)

    {

        pathNodes.Clear();   

        foreach (var tile in list)

        {

            var point = helper.convertIsoTo2D(tile.coord);

            pathNodes.Add(point.GetVector2());

        }


        character.MoveTo(pathNodes);

    }




게스트

 private List<Vector2> pathNodes = new List<Vector2>();

public void MoveTo(List<Vector2> nodes)

    {

        currNode = 0;


2. 클리어 하는 것을 의심해봄 

        pathNodes.Clear();


3. 결국 컨트롤러의 pathNodes와 인자로들어온 ndoes가 같은 주소를 가리켰음 

깊은 복사를 의도 했지만 얕은 복사가 일어나는 상황이 되어 버림 그래서 아래와 같이 복사 해줌 

        foreach(var n in nodes){

            pathNodes.Add(n);

        }


1. 이상황에서 인자로 받은 nodes의 값들이 사라짐

        //pathNodes = nodes;


        var node = pathNodes[currNode];

        var point = controller.helper.convert2dToIso( new ISO.Point( node.x, node.y ) );

        

        Debug.Log("<color=red>" + point + "</color>");


        Move(node);


    }



디버깅 하면서 F9 브레이크 포인트의 사용은 매우 중요함 log로 찾아 내지 또는 찾아 낼수는 있지만 시간이 오래 걸릴수 있는 작업들을 해결 해줌, 비주얼스튜디오에 익숙하지 않다보니 몰랐던 기능이었는데 Immediate Window를 함께 사용하면 좋을듯 





참고: http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1289&page=29

반응형
: