Unity TPS2

장현태입니다·2025년 5월 18일

Animation

upper와 lower layer를 나눠서 애니메이션을 설정하고, blendTree를 사용해서 X,Y 값이 변경될 때 자연스러운 움직임을 설정 해주었다.

오디오(Object Pool)

오디오 생성은 싱글턴을 사용해서 저장 후 빼내서 사용할 것이므로 공용 싱글턴을 생성해준다.

먼저 오브젝트 풀에 저장할 PooledObject를 추상클래스로 만든다.


ObjectPool : PooledObject를 담을 Queue를 선언하고, PooledObject는 targetPrefab, PoolObject의 부모객체(GameObject) poolObject를 선언한다(지저분하게 보이기 때문에 정리)

원할 때 사용할 수 있게 생성자로 만들고, Init을 통해 생성자에 접근 할 수 있도록 설정하겠다.

큐를 빼서 사용할경우 DequePool을 사용해서 활성화 시키고, 빼내주고 반환해서 빼낸 PooledObject를 사용할 것이다.
만약 빈 큐가 없을경우 새로운 큐를 생성 할 CreatePool을 가져온다

CreatePool에서 PooledObject를 Instantiate를 사용해서 생성하고, 해당 PooledObject의 속한 형식이 해당 오브젝트 풀로 정하고, EnquePool을 실행해서 부모객체를 지정, 비활성화, 큐에 넣어준다.

SFXController : PooledObject를 상속받고,
소리를 담을 오브젝트를 생성하고 해당 오브젝트의 재생 시간만큼 변수에 저장하고 그 변수의 시간을 빼줘서 0이하가 된다면 PooledObject의 ReturnPool을 실행 시키도록 하였다.

싱글톤을 상속받아 Audio 자식객체인 AudioManager를 GetComponentInChildren을 통해 오브젝트를 참조한다.

AudioSource를 참조하고, 오디오 파일을 저장할 리스트를 인스턴스화,SFXController(실행할 파일)를 직렬화한다.
오브젝트 풀을 사용하기 위해 부모객체는 현재 객체, 실행파일, 크기를 지정해주고, BgmPlay를 통해 index가 바뀔경우 즉 다른 파일을 실행할경우 이전의 파일은 정지한 후 bgmList의 해당 인덱스 파일을 실행한다.

GetSFX : SFXController의경우 PooledObject에 오브젝트 풀에서 Deque를 실행하는 함수를 저장하고 그 객체를 하위클래스인 SFXController에 다운캐스팅을 실행한것을 반환한다.

Update에서 count의 시간에 따라 canShoot의 true,false를 정하고,

총의 방향은 총을 기준으로 나가는게 아니라 Camer를 기준으로 나가야 하기 때문에 Ray를 cam.transform.position(카메라 위치)
cam.transform.forward(앞방향)으로 나가도록 설정하였다.

ShootSount는 GameManager의 Audio.GetSFX를 통해 PooledObject를 다운캐스팅한 SFXController를 가져와서 저장하고, 오브젝트에 직렬화해서 저장한 파일을 실행한다.

ShootImpulseEffect : 시네머신에서 제공하는 카메라에 반동을 주는 효과이다.

gun에 impulse source를 넣고,

AimCamera에 impulse Listener를 넣어서 shoot이 있을경우 반동을 사용할것이다.

Shoot :
canShoot일경우 false를 반환
두 함수를 Shoot에 넣고, canShoot이 true일경우 함수를 지나 count가 delayTime으로 할당되고, ShootRay GameObject를 target에 할당, 그리고 raycast에 물체가 맞지 않아도 Shoot을 진행 했기때문에 true, 맞을경우 target의 이름이 출력 되도록 설정하였다.

PlayerController Class추가)

Handle Shoot:
PlayerStatus의 IsAiming상태 + 마우스 왼쪽을 누를경우 PlayerStatus의 IsAttacking상태를 Gun의 Shoot함수의 true,false를 할당한다.

다음과같이 소리를 출력하면서 pool에 오브젝트가 활성화 한 것을 볼 수 있다.

0개의 댓글