Unity 47

Firebase SDK 임포트 후 발생한 중복 라이브러리 오류 해결 방법

A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnableSee the Console for details. 이 오류를 확인한 결과, 서로 다른 버전의 동일 라이브러리(예: AndroidX, Kotlin, Lifecycle 등)가 중복되어 포함되어 발생하는 문제임을 알게 되었습니다. 커밋 내역을 하나씩 롤백해 보면서 SDK 임포트 이후에 문제가 발생했다는 것을 확신하였습니다.오류 원인중복 라이브러리: 동일한 라이브러리가 서로 다른 버전 또는 .jar와 .aar 형태로 중복되어 있을 때, Gradle 빌드 시 Duplicate class 오류가 발생합니다.해결 방법중복 라이브러리 정리문제점..

Unity 2025.03.07

기본 프레임워크 제작

게임잼을 위한 프레임워크 제작을 시작하였습니다. 현재 진행한 작업파일 이름 정렬 (숫자 기준)파일 이름을 숫자 순으로 정렬하는 기능을 구현하였습니다. 이는 리소스 관리나 파일 로딩 시 일관성을 유지하는 데 도움이 됩니다.매니저 생성여러 기능을 효율적으로 관리하기 위해 아래와 같은 매니저들을 제작하였습니다.CharacterManagerCoroutineManagerDataManagerEventManagerGameManagerObjectPoolManagerResourceManagerSoundManagerUIManager이들 매니저를 총괄하는 Managers 클래스를 만들어, 각 매니저들을 한 곳에서 관리할 수 있도록 구성하였습니다.유틸리티 클래스 - Logger빌드 버전에서도 로그가 출력되지 않도록 설정한 L..

Unity 2025.02.20

간단한 횡스크롤 전투 구현하기 -(2)

1. 플레이어플레이어의 행동원리는 FSM을 이용하여 Attack, Walk, Idle상태를 조절하게한다.공격은 전략패턴을 사용하여 자동공격 및 수동공격으로 나누고자 했으나 시간관계상 수동공격은 구현하지 않았다. Player : 플레이어에게 필요한 Controller클래스에 접근할 수 있다.PlayerController : 플레이어를 조절하는 역할.    - PlayerAttackController : 어떤 전략을 가지고 공격할지를 결정하는 컴포넌트        - ProjectileController : 투사체를 관리한다.    -PlayerStateMachine : 행동원리를 관리하는 상태머신 2. 몬스터Monster : 몬스터는 추상클래스이며 몬스터가 공통적으로 해야할것들을 정의한다. 각 몬스터마다 ..

Unity 2025.02.18

간단한 횡스크롤 전투 구현하기 -(1)

5종류의 몬스터가 차례대로 소환됨플레이어는 1초마다 100의 데미지를 준다.-> 위 2가지 내용을 구현해본다. 1. 타일맵 만들기1. 에셋 최적화타일의 크기를보고 Pixels Per Unit을 맞추어준다.Filter Mode는 Point(no filter), Compression도 None으로 맞추어준다.Texture Type이 Sprite인지 확인한다. 2.. 타일 팔레트 만들기Windows - 2D - Tile Pallete로 타일팔레트 탭 열기타일들을 드래그하여 타일팔레트에 올려둔다. 3. 룰타일 만들기우클릭 - Create - 2D - Tiles - Rule Tiles로 룰타일을 생성한다.원하는 룰에 맞추어 위처럼 타일을 추가하고 타일팔레트에 추가한다. 4. 맵을 그려준다. 2. 몬스터 애니메이션..

Unity 2025.02.18

Git 오류 - CRLF will be replaced by LF, Filename too long

1. CRLF will be replaced by LF원인Git이 줄바꿈 형식을 자동으로 변환할 것이라고 알려주는 경고 메시지.윈도우에서는 기본적으로 CRLF(\r\n)형식을, Git은 LF(\n)형식을 선호.현재 Git이 "core.autocrlf"설정에 따라 CRLF -> LF 변환을 예고하는 것이다. 해결방법줄바꿈 변환을 Git 설정에 맞게 적용 후 경고 없에기git add --renormalize .git commit m "Normalize line endings"해당 명령어를 실행함으로써 모든 파일의 줄바꿈을 LF로 변환 후 Git에 반영. 2. Filename too long원인윈도우에서 기본적으로 파일 경로가 260자를 초과하면 Git이 해당 파일을 처리할 수 없음.해당 에셋 폴더 내에 경로..

Unity 2025.02.14

최적화 적용

최적화 전 : 배치 수가 2255로 지나치게 많은 배치가 생겨있다.   몬스터를 다 잡은 이후의 배치수이다. 604인걸로보아 몬스터가 추가된것으로 약 1600의 배치가 늘어났다는 걸 알수 있다. 그럼 GPU Instance와 그림자 옵션을 끄는것으로 차례대로 최적화를 진행해보도록 해보겠다. 우선 GPU Instace를 체크해보았다. 몬스터의 머터리얼을 GPU가 한번에 그려주게 해주는 옵션으로 이를통해 배치가 1700까지 내려간걸 알 수 있다. 그래도 너무 높으니 이제는 그림자 옵션을 꺼보도록 하겠다.  Skinned MeshRenderer에는 Light옵션이 있는데 여기에 Cast Shadow 옵션을 꺼줄 수 있다. 이 옵션을 체크 해제함으로써 빛에 의해 그림자는 생기지 않지만 배치수가 거의 1000 가..

Unity 2025.01.15

UI는 로직을 가지고 있지 않아야 한다.

UI에 로직을 포함하지 않아야 한다는 원칙은 소프트웨어 설계에서 중요한 원칙으로 코드의 유지보수성, 확장성, 테스트 용이성을 높이는데 크게 기여합니다. 1. 관심사의 분리UI는 사용자와 상호작용하는 책임을 가지고 있으므로 단일 책임 원칙에 따라 다른 책임을 갖지 않아야 합니다.만일 UI에 로직이 종속되어있다면 UI 코드와 로직 코드가 뒤섞이면서 코드가 복잡해지고 다른 UI에서는 동일한 로직이더라도 해당 코드를 사용할 수 없습니다. 2. 테스트 용이성 로직이 분리되어있다면 UI 표기가 잘못된 것인지, 로직이 잘못된 것인지를 빠르게 파악할 수 있습니다. 3. 유지보수성과 확장성UI나 로직 중 하나만 변경해도 나머지 부분에 영향을 주지 않아 코드 수정이 용이합니다.새 UI를 추가하거나 기존 로직을 확장할 때,..

Unity 2025.01.14

최적화 : 아틀라스 제작

스프라이트 아틀라스는 여러개의 텍스처를 단일 텍스처로 결합하는 에셋입니다. 위 이미지는 아틀라스를 적용하기 전입니다. 보면 UI를 그리는데 59단계를 거친다는것을 알 수 있습니다. HUD와 퀘스트, 그리고 테스트용 버튼들만 있는데말입니다. 아틀라스를 사용하면 개별 UI를 그리는데 하나의 텍스처만 가져다 사용하므로 굳이 여러번 나누어서 그릴필요가 없게됩니다. 이제 아틀라스를 만들어 사용해봅시다.먼저 프로젝트 세팅에서 Sprite Packer의 Mode를 Sprite Atlas V2 - Enabled로 변경해줍니다. 그다음 Sprite Atlas 에셋을 만들어줍니다. 마지막으로 Objects for Packing에 원하는 이미지들을 추가해줍니다. 내용이 너무 많아서 고민했는데 폴더를 통째로 넣어도 되더라구요..

Unity 2025.01.13

짐벌락(Gimbal Lock)문제

짐벌락은 3D 공간에서 회전을 표현할 때, 특정 조건에서 회전 자유도가 감소하는 문제를 말합니다. 오일러 각은 3개의 축을 기준으로 순차적으로 회전을 정의합니다. 그러나 특정 회전 상태에서 두 축이 정렬되어 서로 독립적이지 않게 되어버리며, 결과적으로 한 축의 회전이 다른 축의 회전에 영향을 끼치게 되어 회전자유도(3차원 회전에서 필요한 독립적 축의 개수)가 3에서 2로 줄어듭니다. 유니티에서는 Quaternion을 사용합니다. Q=w+xi+yj+zkw: 스칼라 값 (회전의 크기와 관련).(x,y,z): 벡터 값 (회전 축과 관련). 쿼터니언은 x, y, z에 이어 스칼라 값 w를 사용합니다. 행렬에 비해 계산이 더 간단하고 빨라 연산이 효율적이고 선형보간이 행렬보다 쉽습니다. (오일러 각의 회전은 행렬..

Unity 2025.01.10

StateMachineBehaviour

유니티의 애니메이션은 상태 머신으로 되어있다. 이때 이 StateMachineBehaviour를 상속받게되면 이 애니메이션 상태에 직접 컴포넌트로써 추가할 수 있고 추가동작을 만들어낼 수 있다. public 함수OnStateMachineEnter : 해당 상태머신으로 트랜지션이 일어난 첫 프레임에 불러집니다.OnStateMachineExit : 해당 상태머신이 다른 트랜지션으로 나갈 때 마지막 프레임에 불러집니다.위 두 함수는 StateMachine sub-state로의 트랜지션에는 불러지지 않습니다. 메시지OnStateEnterCalled on the first Update frame when a statemachine evaluate this state.OnStateExitCalled on the l..

Unity 2025.01.09