728x90
728x90
오브젝트 풀링(Object Pooling)와 가비지 콜렉션(Garbage Collection) 오브젝트 풀링은 총알을 미리 탄창에 넉넉하게 장전해 놓는 다는 개념으로 생각하면 된다. 오브젝트 풀의 핵심은 배열과 리스트로, 배열은 방의 크기가 정해져있고 자리가 고정되어 있기 때문에 추가와 삭제가 매우 어렵다. 반면 리스트는 추가와 삭제가 매우 쉽고 검색은 때에 따라 배열보다 쉽다. 오브젝트 풀링은 메모리 최적화에 매우 중요한 기능이다. 해당 내용을 이해하기 위해서는 먼저 가비지 콜렉터(Garbage Collector)의 개념을 이해해야 한다. 가비지 콜렉터가 수행하는 가비지 콜렉션(Garbage Collection)은 파편화된 메모리리를 정리해주는 기능이다. 시스템 상 메모리는 배열 형식으로 순서대로 저장..
클래스 상속을 이용한 CameraShake 구현 방법 using System.Collections; using System.Collections.Generic; using UnityEngine; // 카메라 셰이크를 위한 설정 정보를 기억할 구조체 [System.Serializable] public struct CameraShakeInfo { // 진폭 public float amplitude; // 사인파 진동 빠르기 public float sinSpeed; } // 모든 카메라 셰이크 클래스의 부모 클래스 public class CameraShakeBase { // 카메라 초기 위치 기억변수 protected Vector3 originPos; // 카메라 셰이크 초기화 함수 public virtual..
유니티 애니메이션 실행 오류 유니티에서 애니메이션을 실행하다보면 몇가지 문제가 발생한다. 가장 대표적으로 Enemy가 Player를 공격하는 애니메이션이 실행되고, 피격 시 데미지UI(빨강) 코루틴이 반복 실행되는 상황에서 정확한 피격 타이밍과 코루틴 함수 호출 시점이 다를 수 있다. 다시 말해, Enemy가 발차기 모션을 실행하기도 전에 피격UI 코루틴이 엇박자 타이밍으로 실행되는 것이다. 우리는 정확하 발차기가 실행되었을 때 UI 코루틴을 실행해야 어색하지 않은 애니메이션 동작 상황이 완성될 것이다. 이런 경우, 애니메이션 실행 key frame에서 event 함수를 호출해줌으로서 문제를 해결할 수 있는데 다음 2가지 방법을 주로 사용한다. 원본 애니메이션 데이터를 활용하여 오류 해결하기 애니메이션 ..
피격 시 데미지UI 활성/비활성화 방법 Enemy로부터 타격을 받았을 때 체력이 깎이면서 빨강색 DamageUI가 호출되었다가 비활성화되는 효과를 구현하고자 한다. 이런 경우 보통 Coroutine을 사용하지만 기본적인 로직을 고민해보았을 때 다음과 같은 아이디어를 떠올려 보았다. HP가 감소되면서 Damage UI가 호출되어야 하기 때문에 Get / Set 프로퍼티를 사용해주었다. 그리고 PlayerHealth 클래스를 싱글턴으로 가져와 Enemy 스크립트의 OndamageProcess() 에 PlayerHealth.Instance.hp--; 해주었다. 체력 감소와 관련된 기본 코드를 구현해 놓고, 이제는 피격 시 Damage UI가 호출되도록 한다. [SerializeField] int hp = 3;..
유니티 애니메이션 이동 오류 유니티 애셋 스토어나 믹사모에서 받은 애니메이션을 사용할 때 우리가 흔히 겪는 문제 중 하나는 이동 애니메이션이 원하는 목적지에서 멈추는 것이 아닌, 끝까지 실행되면서 이동하는 것이다. 애니메이션 이동 오류 발생 원인 이는 기본적으로 받아 온 이동 애니메이션이 좌표값까지 적용되었기 때문에 목적지를 넘어 계속 이동하는 것이다. 인스펙터 창에서 플레이해보면 제자리에서 애니메이션이 실행되는 경우와, 실제 좌표값의 이동까지 적용되는 경우가 있다. 이동 애니메이션에 관한 오류는 대부분 좌표값까지 적용되었기 때문이다. 즉, A에서 B 지점까지 이동은 스크립트로 실행하고 있는데, 애니메이션 좌표이동까지 중복해서 적용되는 의미이다. 이를 해결하는 방법은 다음과 같다. 애니메이션 이동 오류 ..
FPS에서 피격 시 KnockBack 넉백 피격효과 구현 Knock-Back은 게임에서 사용하는 단어로, 적을 공격할 때 뒤로 밀어내는 효과를 나타낸다. 보통 FPS 게임에서 총알에 맞을 때 살짝씩 뒤로 밀리는 동작을 일컫는다. 애니메이션 없이 넉백 시 약간의 위치값이 조정되는 기능을 구현해보았다. public float knockbackSpeed = 0.5f; m_State = EnemyState.Damage; transform.position += -Vector3.forward * KnockbackSpeed; 상태머신을 사용해 Enemy 상태가 Damage인 경우 Enemy Vector3.forward가 - 방향으로 kockbackSpeed 만큼 이동시켜 주었다. 여기서 Time.deltaTime을 ..