동글이 합쳐졌을때 파티클 이펙트를 실행시키기 위해 하이어라키 창에서 Effects > Particle System 오브젝트를 하나 만들어준다.
마지막으로 Renderer의 Order in Layer = 2로 설정해서 우선순위를 높여주고 이름을 Effect로 바꿔준 후 프리팹화 시켜준다.
이제 동글과 이펙트를 1대1로 만들어준 다음에 동글이 합쳐질 때 이펙트가 플레이되도록 로직을 구현해보자.
동글 스크립트에 파티클 오브젝트를 새로 선언해준 후 게임 매니저에서 동글을 생성할 때 동일하게 이펙트를 복사해서 자식으로 넣어준다. 따라서 동글과 동일하게 프리팹과 만들어질 그룹 오브젝트를 선언해준후 GetDongle에서 이펙트를 생성한다.
Dongle GetDongle()
{
//이펙트 생성
GameObject instantEffectObj = Instantiate(effectPrefab, effectGroup);
ParticleSystem instantEffect = instantEffectObj.GetComponent<ParticleSystem>();
//동글 프리팹 복사해서 가져옴, 이 때 부모는 동글 그룹으로 설정
GameObject instantDongleObj = Instantiate(donglePrefab, dongleGroup);
Dongle instantDongle = instantDongleObj.GetComponent<Dongle>();
instantDongle.effect = instantEffect;
return instantDongle;
}
동글과 이펙트 생성이 되었다면 생성한 이펙트를 생성했던 동글의 이펙트 변수에 넣어서 초기화 시켜주어야만 이후에 제어할 수 있다.
파티클 위치와 크기를 보정해주는 함수를 새로 생성한다.
IEnumerator LevelUpRoutine()
{
yield return new WaitForSeconds(0.2f);
anim.SetInteger("Level", level + 1); //레벨 올려서 애니메이션 실행
EffectPlay();
yield return new WaitForSeconds(0.3f); //애니메이션 실행 시간 대기
level++; //실제 레벨도 증가
manager.maxLevel = Mathf.Max(level, manager.maxLevel); // 더 높은 레벨을 반환시켜 최대 레벨을 유지시킨다.
isMerge = false; //잠금장치 해제
}
void EffectPlay()
{
effect.transform.position = transform.position; //이펙트의 위치는 동글의 위치
effect.transform.localScale = transform.localScale; //이펙트의 크기는 동글의 크기와 비례
effect.Play();
}