리스트를 전달하다가 값이 날라가는 경우...
Unity3D/Problems 2015. 10. 23. 12:10http://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
'Unity3D > Problems' 카테고리의 다른 글
특정폰에서 2MB가 잡히는데 문제는 유니티 에디터에서 똑같이 해도 프로파일러에 해당 텍스쳐가 2MB가 잡힙니다. (0) | 2016.01.08 |
---|---|
슬라이딩 도어를 이용하는 케릭터 구현 (0) | 2015.11.11 |
Capturing local variables from Coroutine's for-loop woes (0) | 2015.10.06 |
아이폰 빌드 jit , aot exceptions (linq) (0) | 2015.07.13 |
LINQ: How to perform .Max() on a property of all objects in a collection and return the object with maximum value (0) | 2015.07.10 |