[Unity2D] 8. 아이템 상자 랜덤 생성

2024. 1. 29. 02:32·Unity 개발일지/[Unity2D]졸업프로젝트
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
'Unity 개발일지/[Unity2D]졸업프로젝트' 카테고리의 다른 글
  • [Unity2D] 10. 플레이어 목숨, 게임 오버 추가
  • [Unity2D] 9. 공격받았을 때 피격 효과 적용(넉백, 무적모드)
  • [Unity2D] 7. 땅에 박히는 버그 수정
  • [Unity2D] 6. 점프 오류 개선
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (139)
      • Unity 개발일지 (1)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (115)
        • 부트캠프 (12)
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (36)
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    패널파워
    캐시워크
    앱테크
    C++
    unity2d
    c#
    Python
    머니워크
    백준
    비트버니
    unity
    야핏무브
    Cpp
    백준 #python
    오블완
    구간합
    자료구조
    티스토리챌린지
    til
    멋쟁이사자처럼후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[Unity2D] 8. 아이템 상자 랜덤 생성
상단으로

티스토리툴바