일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Post Processing
- Abstract Factory Pattern
- 플러그인
- Boxing
- 포스트 프로세싱
- Reflection
- addressable
- sprite atlas
- Unity
- ReferenceEquals
- 게임 개발
- Addressable System
- ScriptableObject
- Unboxing
- 디자인 패턴
- 1인 개발
- ==
- Android Plugin
- 최적화
- UniRx
- Zenject
- 스프라이트 아틀라스
- design pattern
- 인앱 결제
- equals
- c#
- Strategy Pattern
- Today
- Total
목록분류 전체보기 (40)
One_KWS
Asset Bundle과 Addressable 에셋 번들은 앱 컨텐츠를 분리하여 앱 초기 다운로드 크기를 작게 유지할 수 있으며 동적으로 에셋들을 로드하기 때문에 추가적으로 업데이트시 앱을 재설치할 필요 없이 컨텐츠만 수정, 추가, 삭제하여 앱을 업데이트할 수 있는 장점이 있다. 하지만 이러한 장점들에도 불구하고 에셋 번들은 구현하기가 어렵고 많은 리팩터링과 커스텀이 필요하다는 단점이 있다. 이 단점들을 해결하기 위해서 나온 것이 Addressable System이다. Addressable 설치 어드레서블을 설치하는 것은 간단하다. Package Manager에서 어드레서블을 찾아서 설치하면 끝난다. 어드레서블을 설치하면 Window - AssetManagement- Addressables 메뉴가 만들어..
Reflection 리플렉션은 객체의 Type 정보를 들여다보는 기능이다. Reflection을 이용하면 런타임중 객체의 Type, 이름부터 프로퍼티, 메소드, 이벤트, 필드 목록까지 모두 확인할 수 있다. 또한 동적으로 인스턴스를 생성할 수도 있고 메소드를 호출할 수도 있다. 새로운 데이터 형식을 동적으로 생성하는 것도 가능하다. C#의 모든 데이터는 Object를 상속받고 있다. 즉, 모든 데이터 형식은 Object 형식이 갖고 있는 다음의 메소드를 물려받아 갖고 있다. Equals() GetHashCode() GetType() ReferenceEquals() ToString() 위의 다섯 개 메소드 중에 GetType() 메소는 객체의 Type 정보를 반환하는 기능을 한다. 모든 데이터 형식이 Ge..
대미지 표시 플레이어 또는 몬스터가 공격 받았을 때 대미지 표시를 해주는 기능을 추가했다. Text는 Text Mesh Pro(TMP)를 사용했고 텍스트 애니메이션은 DOTween을 이용해 구현했다. Scene에 Text Mesh Pro를 생성해주고 위치와 크기를 조절해주었고 FloatingText라는 클래스를 만들어 붙여주었다. 텍스트가 위로 튀어 오르는 모습을 구현하고 싶어서 DOTween의 DOJump를 이용했다. 거기에 DOShakeScale을 붙여 텍스트가 튀어오르면서 출렁거리는 듯한 느낌을 주었다. 이 두가지의 Tween들을 합쳐서 보여지게 하기 위해 Sequence를 이용했다. public class FloatingText : MonoBehaviour { private readonly Vec..
일주일에 하나는 쓰려고 했는데 저번주에 쓰지 못했다.. 짧더라도 매주 꾸준히 글 하나씩은 쓰도록 노력해야겠다. 일지가 아니더라도 공부한 내용들도 정리해서 올려야겠다. (Velog랑 Notion에 정리했던 것들도 옮겨야되는데 언제 옮기지 ..) 플레이어 공격 수정 기존에 구현했던 플레이어의 공격이 다른 행동들(이동, 대쉬)과 이어질 때 자연스럽게 이어지지 않은 문제와 간혹 공격 중에 공격이 먹통되는 문제가 있어서 이것을 수정하는 작업을 진행했다. 수정하는 김에 공격 애니메이션 모션과 이펙트도 수정했다. PlayerCombat 공격 부분 로직은 전부 수정했다. AnimatorStateInfo를 이용하여 현재 애니메이션 상태를 체크하여 다음 공격으로 넘어가게 했다. currentCombo 값이 0이라면 att..
Enemy 몬스터의 클래스 구조도 플레이어와 비슷하다. 각 행동들은 IBehaviour 인터페이스를 구현하고 있고 EnemyController에서 행동들을 제어한다. EnemyController PlayerController와 마찬가지로 몬스터의 공격과 이동을 제어한다. 몬스터는 일정 범위 내에 플레이어가 들어오면 공격을 해야 하기 때문에 Physics.SphereCastAll를 이용하여 범위 내에 플레이어가 들어오는지 체크하도록 했다. [SerializeField] private float sightRange; ... private Transform FindTarget() { var hits = Physics.SphereCastAll(transform.position, sightRange, Vector..
몬스터에게 데미지 주기 공격 범위 내에 몬스터가 있는지 판단하기 위해 Physics.OverlapBox 함수를 사용했다. 플레이어의 앞에 직사각형 범위의 몬스터들을 감지하고 몬스터의 Health 클래스의 TakeDamage 함수를 통해 데미지를 전달해 주도록 구현했다. public class PlayerCombat : MonoBehaviour, IBehaviour { ... private readonly Vector3 HALF_EXTENTS = new Vector3(1f, 0.5f, 1f); ... private void TakeDamageToEnemies() { var center = transform.position + transform.forward.normalized + Vector3.up; va..