이번에 한 구현 한것은 갔던길을 다시 돌아오는 기능을 구현 해보았습니다.
먼저 돌아가는 기능은 갔던길을 되돌아가도록 저장을 담당하는 오브젝트를 추가합니다. 그리고 스크립트를 작성을 합니다.
private List<Vector3> currentPath = new List<Vector3>();
public void saveingRoot(Vector3 root)
{
currentPath.Add(root);
}
//플레이어 쪽 이동
if(timeDl >=0.1f)
{
rootSave.saveingRoot(transform.position);
timeDl = 0;
}
저장을 담당하는 스크립트에는 리스트를 추가 하여 add를 이용하여 추가 하였습니다.
private Stack<Stack<Vector3>> stackPath = new Stack<Stack<Vector3>>();
public void endRoot(Vector3 root)
{
currentPath.Add(root);
currentRootSave();
}
void currentRootSave()
{
var copy = new Stack<Vector3>(currentPath);
stackPath.Push(copy);
// 원본 초기화
currentPath.Clear();
}
이동이 완료 되면 endRoot를 호출하여 stack 배열에 추가를 합니다.
public Stack<Vector3> GetPath()
{
if (stackPath.Count != 0)
{
return stackPath.Peek();
}
return null;
}
이제 되돌리기가 필요할때 마지막으로 이동했을때를 불러올수 있도록 Peek를 이용합니다.

이렇게 정상 출력이 됩니다.
부록
var copy = new Stack<Vector3>(currentPath);
stackPath.Push(copy);
currentPath.Clear();
여기에서 처음부터 Stack으로 저장하면 이 과정이 빠저도 될거 같지만
클래스 타입을 중첩해서 쓰는 경우 안에 있는 값 들이 들어가지 않고 주소 값만 가져오게 됩니다.
그런대 밑에서 Clear를 하기 때문에 currentPath안에는 주소는 있지만 안에 아무것도 없는 상태가 됩니다.
안전하고 값을 추가 하기위해서는 따로 복사하고 Push하는것이 안전하게 사용할수 있습니다.
'유니티 개발 > 계륵' 카테고리의 다른 글
| Unity - A* (3) | 2025.08.12 |
|---|---|
| Unity - 유닛 클릭 이동 (1) | 2025.08.05 |
| Unity - 발소리 구현 (0) | 2025.08.04 |
| Unity - 파쿠르 수정 버전 (0) | 2025.07.24 |
| Unity - 파쿠르 첫 구현 (0) | 2025.07.23 |