본문 바로가기
언리얼 최고/언리얼 구현

언리얼엔진(UE4)-- 특정 위치들에 랜덤으로 아이템 생성!

by Lee_story_.. 2022. 4. 5.
728x90

제가 만들고 있는 게임 맵입니다!

여기서 구역을 나눠서 코인을 생성해볼 건데요!

 

몇 가지 해보고 싶은 게

1. 캐릭터가 코인을 먹으면 그 자리를 제외하고 나머지 좌표 중에서 랜덤 생성

2. 코인 위치 맵에서 보이게

3. 구역별로 좌표들 나누어 관리

 

가있는데.. 좀 많아 보이지만 해보았습니다!

 

일단 코인들의 좌표를 적당히 찍어주었습니다.

 

그리고 레벨 프린트에 배열 변수를 만들고

위에서 만든 좌표들을 모아서 스테이지별로 배열에 입력해주었습니다. 

이제 위치도 받았으니 코인을 생성해봅시다!

 

그런데 여기서 무작정 생성하면 문제가 생겨요....

 

이게.... 랜덤으로 좌표를 받아 생성하게 되면  이미 코인이 있는 자리에도 생성될 수도 있어서...

그래서! 배열을 하나 더 만들어 줍시다! 지금 생성된 코인들의 위치가 저장될 배열 stagecoins를 만들어줍시다!

 

 

그러면 이제 랜덤을 돌리면서 그 좌표가  stagecoins에 들어 있는지 확인하는 걸로 그 자리는 랜덤이 안 돌아가겠죠

 

 

choicoin이라는 함수를 하나 만들어줍시다(랜덤으로 하나를 뽑고 그 자리에 코인이 있는지 확인하는 함수!)

입력에 배열 핀을 하나 더 넣어주고(랜덤으로 좌표를 뽑아줄 구역의 배열)

 

출력에는 bool핀(랜덤 좌표에 이미 코인이 있으면 true)과 vector핀(코인을 생성할 위치 값)을 넣어줍시다. 

 

 

위의 함수를 사용해서 블프를 구성하면 아래처럼 됩니다.

 

 

for--> 초기 생성 코인의 개수를 3개로 지정하기 위해 3번 반복

 

while--> 위의 함수에서 bool핀(랜덤 좌표에 이미 코인이 있으면 true)을 받았으니 그 변수를 while에 이어줍니다.

---> 그러면 랜덤좌표에 코인이 있다?--> 다시 랜덤 돌면서 코인이 없는 좌표를 찾아주겠죠!

---->안 겹치는 좌표를 찾았다?--> coincondition을 false로 변경될 거고  while문을 빠져나 올 수 있겠죠!

 

***(여기서 구해놓은 좌표값도 가지고 나와야 해서 new param변수를 만들어 여기에 저장해 줍시다.)

좌표를 stagecoins(중복 방지 배열)에 넣어주고

이제 좌표값도 구했겠다. 바로 spawnActor로 생성하고 싶은 에셋을 생성하시면 됩니다!

 

---여기서 spawnActor함수에 location이 없으시다면 transform이 있으실 거예요

이걸 우클릭하시고 핀 분할하시면 만들 수 있습니다!

 

여기까지가 특정구역에 초기 코인 3개를  랜덤으로 생성하기!

이렇게 4번 복붙 하면 구역 4개에 3개씩 랜덤으로 생성되겠네요!

 

 

 

 

 


여기부터는 코인을 캐릭터가 먹게 되면 다시 생성하게 만들기 위한 블프!

 

 

근데 위와 그렇게 막 다르진 않습니다.

 

일단 캐릭터 블루 플린트에 가봅시다!

캐릭터와 충돌하면 없어지게끔 만들어 보겠습니다.

 

그냥 없어지는 건 on component hit에 destroy actor 하면 끝나지만 여기서 점수도 올려주고

어떤 코인이 없어졌는지도 체크해주겠습니다....

 

캐릭터 블루 플린트에 변수명 coincolli(코인과 충돌했다는 걸 알려줄 변수)

                                 havecoin(가지고 있는 코인 개수를 알려줄 변수) 

                                 coinlocation(충돌한 코인의 위치를 저장할 변수)를 선언해줍시다.

 

 

그다음 코인 블루프린트에 와서

get player charater에서 형 변환을 해주고  캐릭터를 받아와 변수들을 변경해줍시다!

 

 

이제 캐릭터 블루 플린트로 돌아와 코인이 늘어나는지 확인해봅시다.

 

 

 

 

 

코인을 먹음---> 코인이 없어짐.....--> 코인 다시 생성!

 

해주기 위해

 

다음 레벨 프린트!

 

여기서도 캐릭터를 변수 My로 저장해 변수를 다 들고 와봅시다!

 

 

충돌한 코인의 위치를 nowcoin이라는 새 변수에 저장하고 contains로 어느 구역 코인인지 알아봅시다.

 

 

그다음 충돌 후 한 번만 실행해야 하니까 캐릭터의 충돌 별 수도 가져옵니다.

 

 

이어이어서 위에서 했던 코인 생성을 똑같이 해주시면 됩니다! 

 

다른 건 마지막에 그 좌표상에 코인이 사라진걸 stagecoins배열에서도 삭제해주는 거?

 

 

하시면 이제 다 끝났습니다!!!!

 

처음엔 3개 랜덤 생성, 코인을 획득하면 다른 위치에 다시 랜덤 생성!

 

 

 

전체사진...(맵4개)

 

 

끝!

 

 

 

 

 

틀린 점이 있다면 댓 달아주세요!

 

댓글