전체 글70 [유니티] 디자인 패턴 : 오브젝트 풀링 (Object Pooling) 오브젝트 풀링 게임에서 오브젝트를 사용할 때마다 새로 생성(instantiate)하고,삭제(Destroy)하면 성능 저하가 발생한다.이를 해결하는 방법 중 하나가 오브젝트 풀링이다. 오브젝트 풀링은 오브젝트를 필요할 때마다 생성하는 것이 아니라,미리 생성해 두고 필요할 때 가져와 사용하는 방식이다.사용이 끝난 오브젝트는 삭제하지 않고 다시 풀로 반환하여 재사용할 수 있다. 이 패턴은 게임 플레이 전에 특정 순간에 필요한 모든 오브젝트를 미리 인스턴스화해야 한다.풀은 로딩 화면과 같이 플레이어가 끊김 현상을 알아차리지 못할 적절한 시기에 활성화한다. 원리 ① 초기화 단계게임이 시작될 때 미리 여러 개의 오브젝트를 생성해서 풀에 저장 ② 사용 단계오브젝트가 필요할 때 새로 생성하는 대신 풀에서 하나를 꺼.. 2025. 2. 15. [유니티] #18 광부 타이쿤 게임 만들기 (구름, 통화 시스템) 하늘을 떠다니는 구름이 게임을 더 생동감 있게 만들 것이다.Clouds와 CloudManaer 스크립트를 새로 만든다. Clouds 스크립트에서는 구름의 움직임을 정의하고, CloudManager에서는 게임이 시작할 때 구름이 생성되도록 한다.CloudManager에 스폰될 위치를 넣으면 Clouds의 프로퍼티에도 똑같이 들어가게 된다.이렇게 하는 이유는 구름이 프리팹으로 저장되어 있기 때문에 씬에 배치되어 있는 오브젝트의 위치값을 참조할 수 없기 때문이다. Cloud 오브젝트를 만들고 Box Collider 2D, Rigidbody 2D, Clouds 스크립트를 추가한다.Body Type은 Kinematic으로 설정하여 물리 엔진의 영향을 받지 않도록 했다. 대부분 Dynamic을 사용했었는데 K.. 2025. 2. 8. [유니티] #17 광부 타이쿤 게임 만들기 (샤프트 매니저 부스트) ShaftManagerLocation 스크립트를 만들고 Action을 선언한다.엘리베이터, 창고와 마찬가지로 오버라이드한 RunBoost 함수에서 호출한다. MineManager에서 SetupManager 함수를 만들고 매개변수로 받은 값을 location에 할당한다. Shaft 스크립트에서 변수를 만들고 Instantiate 메서드를 통해 객체를 만들고 변수에 저장한다. Shaft 스크립트에서 _shaftManagerLocation 변수를 만들고 Start 메서드에서 초기화한다. CreateManager 함수에서 shaftManager 변수를 통해 MineManager 스크립트를 가져오고,이를 통해 SetupManager 함수를 호출해 위치를 설정한다. ShaftUpgrade 스크립트.. 2025. 2. 8. [유니티] #16 광부 타이쿤 게임 만들기 (부스트) ManagersController 스크립트에 RestoreManagerCard 함수를 추가했다.위의 코드는 for 루프를 이용해 순환하며 해당 매니저를 찾는 것이고,아래 코드는 Find 함수를 이용해 최적화한 것이다. UnassignManager 함수를 이용해 방금 만든 함수를 호출하고 해당 위치에 매니저를 할당 해제한다. 이제 Unassign 버튼을 눌렀을 때 매니저가 할당 해제되고 다시 목록으로 돌아오게 된다.하지만 아직 패널에는 고용된 것으로 보이므로 수정해야 한다. UI 패널을 참조하기 위한 assignedManagerPanel 변수를 선언한다.UpdateAssignedManagerInfo 함수에 로직을 추가한다.managerLocation의 Manager가 비어있으면 값을 모두 nul.. 2025. 2. 7. [유니티] #15 광부 타이쿤 게임 만들기 (매니저, Mask, RayCast) Skinning Editor에서 뼈를 만들어서 Sprite Skin 컴포넌트를 추가했다.Depth를 입력하여 렌더링 순서도 맞춰야 한다. Idle 애니메이션을 만들어서 머리와 손 또는 발을 움직이도록 했다광부 3명을 만들 때 반복했던 작업이라 손쉽게 할 수 있다. Elevator 오브젝트 안에 Sprite Mask를 추가한다.이름은 ElevatorWindowMask로 변경했는데 빈 오브젝트에 Sprite Mask 컴포넌트만 추가해도 된다.컴포넌트의 Sprite로 ElevatorMask를 넣는다. Rosa 매니저의 Mask Interaction을 None → Visible Inside Mask로 변경한다. Mask Interaction을 사용하면 특정 영역(안개, 동굴, 그림자) 안에서만 .. 2025. 2. 5. [유니티] #14 광부 타이쿤 게임 만들기 (매니저 카드, Scriptable) 새로운 ManagerCard 스크립트를 만든다.새 매니저를 생성하고 관리하려면 프리팹으로 만들어야 한다.매니저 카드 안의 오브젝트를 변수에 드래그해서 참조한다. 매니저 패널의 오브젝트를 사용할 수 있도록 변수화를 모두 하면 프리팹으로 만든다. ManagersController 오브젝트와 스크립트를 새로 만든다.ManagerCard 프리팹을 참조하기 위한 변수와 HireManager 함수를 만든다. 매니저 카드의 정보를 입력하기 위해서는 변수값을 직접 입력해도 된다.하지만 10개의 다른 종류의 매니저를 수동으로 생성하는 것보다 더 효율적인 기능을 쓸 것이다. Manager 스크립트를 만들고 ScriptableObject를 상속받도록 한다.ScriptableObject는 여러 개의 게임 오브젝트에.. 2025. 2. 2. [유니티] #13 광부 타이쿤 게임 만들기 (창고 업그레이드, 매니저 UI) 창고 광부를 참조하기 위해서는 Warehouse 스크립트가 필요하다.BaseUpgrade에 protected로 선언한다. 지금은 문제가 없지만 부모 스크립트에서 모두 초기화 하기 때문에 null 체크를 위한 코드를 넣어도 좋을 것 같다. Warehouse 스크립트에서 miners 리스트를 프로퍼티로 선언한다.업그레이드 스크립트에서 사용하려 한다. 새로운 WarehouseUpgrade 스크립트를 만들었다.BaseUpgrade를 상속하도록 하고 RunUpgrade 함수를 오버라이드 한다.foreach는 _warehouse.Miners 리스트에 있는 WarehouseMiner 타입의 객체를 하나씩 꺼내서 miner 변수에 할당하고,꺼낸 miner 변수에 대해 업그레이드를 실행한다. 창고에는 Ware.. 2025. 2. 1. [유니티] #12 광부 타이쿤 게임 만들기 (엘리베이터 업그레이드) ElevatorUI 스크립트에서 Action을 선언한다.샤프트 때와 마찬가지로 UI 스크립트에 만들고, 로직은 업그레이드 스크립트에서 처리한다.RequestUpgrade 함수를 선언하고 매개 변수로 ElevatorUpgrade 객체를 전달해 메서드를 실행할 것이다. UpgradeManager 스크립트에서 Action에 이벤트를 구독한다.OnUpgradeRequest는 static으로 선언되어 있기 때문에 클래스의 인스턴스를 생성하지 않아도 해당 멤버에 접근할 수 있다.대신 정적 멤버는 전역적 성격을 가지므로, 필요할 때만 사용하는 것이 좋다. 이제 샤프트 패널을 눌렀을 때처럼 엘리베이터 패널이라고 뜨게 해야 한다.UpdateElevatorPanel 함수를 만들고 패널에 Elevator와 레벨이 뜨.. 2025. 1. 26. [유니티] #11 광부 타이쿤 게임 만들기 (업그레이드 버튼) UpgradeManager에서 버튼의 Color 변수와 버튼 배열을 선언한다.x1, x10,x 50, Max 버튼을 모두 이 배열에 넣는다. ActivateButton 함수를 선언한다.인스펙터에서 Disabled 컬러는 그레이로 하고 Enabled 컬러는 FFFFFF의 흰색으로 했다. 버튼 클릭 이벤트에 넣어줄 함수다.버튼이 눌릴 때마다 ActiveButton 함수가 호출돼서 버튼 상태가 업데이트 된다.예를 들어 X1을 클릭하면 그 버튼 컬러만 하얗고 나머지는 비활성화된듯한 그레이 컬러가 된다. 여기에 Dotween의 DoPunchPosition을 추가한다.0.5초 동안 -5만큼 아래로 내려갔다가 올라오는데 버튼 누를 때 생동감이 느껴진다. 업그레이드 가능 횟수를 계산하는 함수를 만들려고.. 2025. 1. 24. 이전 1 2 3 4 5 6 ··· 8 다음 728x90