공부 조금 오래해서 그런지 머리가 안굴러가서..
현재 로그라이크 게임 만드는 강의를 보고 있는데
Vector3 RandomPosition()
{
int randomIndex = Random.Range(0,gridPositions.Count);
Vector3 randomPosition = gridPositions[randomIndex];
gridPositions.RemoveAt(randomIndex);
return randomPosition;
}
위 코드가 랜덤한 위치를 받고 그걸 랜덤 포지션에 넣은 다음
겹침을 방지하기 위해 gridPositions.RemoveAt(randomIndex); 을 사용해서 제거해준다고 하는데
Random을 쓰면 또 이 위치가 나올 수 있는거 아닌가요?
결과로 봐야알겠지만 randomIndex 자체가 이미 해당 스크립트 내에서 루프 하나를 다 돌기전엔 같은 변수이기에 결과적으로 똑같은 위치가 또 나오겠죵
만약 저걸 다르게 해주고싶다면 함수 안에 randomIndex를 하나 더만들면 되지 않을까 싶네요. (randomIndex2 라던가)
반환하기 전에 randomIndex에 있는 것들을 제거한다는 뜻이죠
randomIndex에 출력될 수 있는 결과값들이 들어있고, randomIndex의 길이 안에서 랜덤돌려서 Index 상의 결과를 획득함. 그리고 획득한 값을 Index로부터 지워준다. 그럼 다시는 해당 값을 획득하지 못하지. 왜냐하면 Index에서 4번값을 가져가면 5번이 4번으로 오고, 6번이 5번으로 오고... 반복하니까
for문을 돌리는 것도 아닌데 랜덤 인덱스를 지운다면 결국 다시 나올 수도 있는 거 아닌가요 ? 오늘 다시 봐도 모르겠네요 ㅜㅜ
randomIndex에 중복되는 값이 없다면 전부 다른값만 나오겠지. 서로 다른 숫자가 적힌 쪽지를 나열시킨 뒤에, 랜덤 위치에서 쪽지를 집어드는 행위니까. RandomPosition()이라는 함수를 다른곳에서 호출할 때마다 다른 값을 줄 수 있지.