[Unity][2D-Game] Suika-Game (4)

suhan0304·2023년 11월 17일
0

유니티 - Suika Game

목록 보기
4/8
post-thumbnail

Review

  • 동글 충돌 로직을 작성하였다.
  • 아래에 있거나 왼쪽에 있는 동글의 물리 효과를 모두 중지한 후 합쳐질 동글에게 이동한다.
  • 이동이 완료될 때까지 기다렸다가 다음 레벨 애니메이션을 실행 시키고 실제 레벨을 1 증가시켰다.

강의영상 (4) - 이펙트 만들기


개발

파티클 꾸미기

동글이 합쳐졌을때 파티클 이펙트를 실행시키기 위해 하이어라키 창에서 Effects > Particle System 오브젝트를 하나 만들어준다.

  • Emission : 입자가 퍼지는 양
    - 한 번에 터지는 입자를 원하기 때문에 Rate Over Time을 0으로 설정하고 Burst에 새로운 효과를 추가한다.

  • Shape : 입자가 퍼지는 모양
    - 원 모양으로 퍼져야 하므로 Shape을 Circle로 수정해준다.
    - 입자가 정면에서 원모양으로 퍼지도록 Rotation X를 90으로 설정한다.
    - Radius를 동글 크기와 비슷하게 0.5로 설정한다.

  • Texture Sheet Animation : 입자를 스프라이트로 애니메이팅
    - Mode를 Sprite로 설정 후 Circle 스프라이트 선택

  • Particle System : 입자 속도, 거리 제어
    - Start LifeTime : 랜덤하게 생명 주기가 설정되도록 오른쪽 화살표를 눌러 Random Between Two Constatns로 설정해서 두 숫자 사이의 랜덤한 라이프타임을 갖도록 설정한다.
    • Start Speed : 시작 속도를 5로 설정한다.
    • Looping : 계속 반복시키는 옵션
    • Play On Awake : 파티클이 활성화 될 때 자동 플레이 옵션
      • Looping과 Play On Awake는 비활성화 시킨다.

  • Limit Velocity over LifeTime : 시간에 따른 속도 제어
    - Drag : 1초까지 속도가 완만하게 감소하도록 1로 설정

  • Size over LifeTime : 시간에 따른 입자 크기 변화
    - 커브를 눌러 크기가 완만하게 작아지는 커브를 선택한다.

  • Color over LifeTime : 시간에 따른 입자 색 변화

  • Trails : 입자에 꼬리 혹은 리본 효과 추가
    - Renderer에서 Trail Renderer을 Default-Line을 선택해준다.
    - Size affects LifeTime : 입자의 꼬리가 입자를 따라가게 해준다.
    - Width over Trail : 꼬리의 넓이를 설정해준다.
    • Curve를 선택한 후에 완만히 크기가 줄어드는 커브를 선택한다.

마지막으로 Renderer의 Order in Layer = 2로 설정해서 우선순위를 높여주고 이름을 Effect로 바꿔준 후 프리팹화 시켜준다.


이펙트 생성하기

이제 동글과 이펙트를 1대1로 만들어준 다음에 동글이 합쳐질 때 이펙트가 플레이되도록 로직을 구현해보자.

동글 스크립트에 파티클 오브젝트를 새로 선언해준 후 게임 매니저에서 동글을 생성할 때 동일하게 이펙트를 복사해서 자식으로 넣어준다. 따라서 동글과 동일하게 프리팹과 만들어질 그룹 오브젝트를 선언해준후 GetDongle에서 이펙트를 생성한다.

GameManager.cs

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;
}

동글과 이펙트 생성이 되었다면 생성한 이펙트를 생성했던 동글의 이펙트 변수에 넣어서 초기화 시켜주어야만 이후에 제어할 수 있다.


이펙트 실행

파티클 위치와 크기를 보정해주는 함수를 새로 생성한다.

Dongle.cs

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();
}

결과물

profile
Be Honest, Be Harder, Be Stronger

0개의 댓글