728x90
2023.11.24 아이템 랜덤 생성
아이템 상자도 랜덤한 위치에 생성되어야 한다.
1. 아이템 상자로 사용할 프리펩을 생성
2. 기존에 작성한 MapGenerator 스크립트에
아이템 생성 함수를 추가해주었다.
(이전글)
https://knhoo.tistory.com/entry/Unity2D-4-%EA%B4%91%EB%AC%BC-%EB%9E%9C%EB%8D%A4-%EC%83%9D%EC%84%B1
[Unity2D] 4. 광물 랜덤 생성
로그라이크 장르 특성에 맞게 플레이 할 때 마다 광물의 위치도 랜덤하게 조정해야한다. 기존에 작성한 MapGenerator스크립트에 추가했다. (이전 글) https://knhoo.tistory.com/entry/Unity2D-3-%EB%9E%9C%EB%8D%A4-%E
knhoo.tistory.com
[SerializeField] private GameObject chest; //아이템 상자
private RectInt GenerateRoom(Node tree,int n)
{
RectInt rect;
if (n == maximumDepth) //해당 노드가 리프노드라면 방을 만들어 줄 것이다.
{
rect = tree.nodeRect;
int width = Random.Range(rect.width/2,rect.width-1);
//방의 가로 최소 크기는 노드의 가로길이의 절반, 최대 크기는 가로길이보다 1 작게 설정한 후 그 사이 값중 랜덤한 값을 구해준다.
int height=Random.Range(rect.height / 2,rect.height - 1);
int x = rect.x + Random.Range(1, rect.width - width);
//방의 x좌표이다. 만약 0이 된다면 붙어 있는 방과 합쳐지기 때문에,최솟값은 1로 해주고, 최댓값은 기존 노드의 가로에서 방의 가로길이를 빼 준 값이다.
int y = rect.y + Random.Range(1, rect.height - height);
rect = new RectInt(x, y, width, height);
FillRoom(rect);
//추가된 부분!!
int item_per = Random.Range(1, 10);
if (item_per > 5)
SpawnItem(rect);
}
else
{
tree.leftNode.roomRect = GenerateRoom(tree.leftNode,n+1);
tree.rightNode.roomRect = GenerateRoom(tree.rightNode, n + 1);
rect = tree.leftNode.roomRect;
}
return rect;
}
//추가된 함수!!
private void SpawnItem(RectInt rect)
{ int chest_x = Random.Range(rect.x, rect.x + rect.width);
int chest_y = Random.Range(rect.y, rect.y + rect.height);
Vector3 vec = new Vector3Int(chest_x - mapSize.x / 2, chest_y - mapSize.y / 2, 0);
//아이템 상자 생성
Instantiate(chest, vec, transform.rotation);
}
기존의 코드에서 방을 만들 때
방의 좌표값을 받아와
방의 좌표값 내의 랜덤한 위치에서
아이템상자가 생성되는 방식이다.
아이템 상자에는 중력을 부여하여
게임이 실행되면 방 안의 랜덤 위치에(공중에) 생성되었다가
바닥으로 떨어지게 된다.
추후에는 처음부터 방의 바닥에서만
아이템 상자가 생성되도록 수정해볼 계획이다.
결과 화면
728x90
'Unity 개발일지 > [Unity2D]졸업프로젝트' 카테고리의 다른 글
[Unity2D] 10. 플레이어 목숨, 게임 오버 추가 (1) | 2024.01.30 |
---|---|
[Unity2D] 9. 공격받았을 때 피격 효과 적용(넉백, 무적모드) (2) | 2024.01.30 |
[Unity2D] 7. 땅에 박히는 버그 수정 (0) | 2024.01.29 |
[Unity2D] 6. 점프 오류 개선 (0) | 2024.01.29 |
[Unity2D] 5. 광물 랜덤 생성 (1) | 2024.01.29 |