본문 바로가기

Starters 부트캠프/B - log

유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 17주차 학습 일지

꿀같던 연휴들이 모두 지나간 10월, 다시 긴 일주일이 찾아왔다. ㅠ

그동안 제대로 못 해왔던 2주 프로젝트나, 코딩테스트 공부 등등 이제는 다시 열심히 해야될 시간.

특히 RPG 게임을 만들기로 했던 계획에 대해 차근차근 개발 계획을 잡아가고 있다.

 

시작하기에 앞서 어제 일찍이 쓴 학습 일지 내용이 (티스토리가 먹통이 되어서..) 다 날아가버렸다.

그래서 오늘 다시 글을 쓰기 시작했는데 이 때문에 글 분량이 조금 적어질 수 있을 것 같다. ㅠ

다음부터는 임시저장은 틈틈히 해서 이런 일 없도록 해야겠다...

(더불어 어제오늘처럼 카카오가 다시 먹통이 되는 일이 없도록 기도해야겠다.)

 


 

Starters 17주차 -  '파티클 시스템과 VFX'

 

파티클 시스템 개요

이전에도 한 번 다뤄본 적 있는 파티클 시스템, 복습한다는 차워에서 다시 강의를 해주셨다.

그럼에도 새롭게 알아가거나 잘못 알고 있던 부분들이 많았다.

 

파티클 시스템 - Main 모듈

Scale Mode : 크기 설정을 어떤 식으로 처리할지 설정하는 속성이다.

local : 평소와 같이 transform에서 로컬 스케일을 만지는 것으로 스케일을 설정한다.
hierarchy : 위와 같으나 부모 오브젝트의 영향을 받게 된다.
shape : shape 모듈에서의 shpae 크기가 조절된다.

 

Culling Mode : 파티클이 화면에 비칠 때에 어떻게 재생할지 설정하는 속성이다.

automatic : 화면에 보이지 않으면, 멈추었다가 다시 화면에 보였을 때에 재생한다.
pause and catch up : 안 보이면 멈추지만, 파티클 이동은 계속 계산해서 다시 화면에 비쳤을 때에 계산된 위치에 파티클을 생성한다.

 

Ring Buffer Distance : 파티클을 재활용하는 것에 대한 속성인 듯하다.

pose untill replaced : 생성 주기가 다 된 파티클을 생성하는 파티클로 재활용한다.

 

파티클 시스템 - Shape 모듈

Radius Thickness : shape의 중심으로부터 어느 위치에서 파티클을 생성할지 설정하는 속성이다. 작을수록 더 안에서 생성된다.

 

Align To Direction : 퍼져나가는 방향으로 각도를 트는 옵션이다.

 

파티클 시스템 - Rotation Over Lifetime 모듈

Angular Velocity : 한 주기동안 파티클이 돌아가는 각도를 설정하는 속성이다. 위에 Separate Axes를 체크하면, x, y, z 별로 다르게 적용할 수 있다.

 

파티클 시스템 - Noise 모듈

파티클의 움직임을 왜곡시키는 모듈이다. 아래 preview를 통해서 얼마나 왜곡되는지 볼 수 있다. (움직임이 격해질수록 색이 더 진해진다.)

 

Strength : 얼마나 더 강하게 흔들리고 왜곡되는지 설정하는 옵션이다.

 

Frequency : 얼마나 더 자주 흔들릴지 설정하는 옵션이다.

 

Scroll Speed : 이 값을 늘리면, preview의 그림이 움직이는데 랜덤한 왜곡 효과를 줄 수 있다.

 

파티클 시스템 - Collision 모듈

하위 오브젝트로 collision을 생성해서 파티클에 튕기는 효과를 준다.

 

Plane 콜라이더를 하나 생성한 모습

 

Type : 콜라이더에 대한 설정이다.

planes : 평면
world : 실제 월드 상에 콜라이더와 충돌

 

Dampen : 해당 콜라이더에 부딫힐 때에 파티클의 속도를 얼마나 줄일지 설정하는 속성이다.

 

Bounce : 크면 클수록 더 좁은 각도로 튕긴다.

 

Lifetime Loss : 부딫히는 순간 lifetime을 줄인다. (0 ~ 1)

 

파티클 시스템 - Sub Emitters 모듈

파티클 하나하나에 하위 파티클이 따라가도록 설정하는 모듈이다.

실제로 생성을 하면, 하위 오브젝트로 emitters 파티클이 생긴다.

실제로 그 파티클을 수정하면, 따라다니는 emitters의 모양도 자유자제로 바꿀 수 있다.

 

birth : 본 파티클이 생성될 때에 같이 따라 생성된다.
death : 본 파티클이 사라질 때에 생성된다.
collision : 본 파티클이 collision에 부딫힐 때에 생성된다.

 

파티클 시스템 - Trail 모듈

궤적 혹은 흔적을 만드는 모듈이다.

 

Mode : trail의 타입을 지정한다.

ribbon : 파티클끼리 끈으로 연결한다.
particles : 파티클 하나하나 따로 trail이 생긴다.

 

Ratio : trail이 생길 확률로 1이면, 모든 파티클에 생성되고, 0이면, 아무 파티클에도 생성되지 않는다.

 

World Space : trail을 월드에 남길지 설정하는 속성이다.

 

파티클 시스템 - Renderer 모듈

Render Mode : 파티클을 어떤 식으로 그릴지 설정하는 속성이다.

billboard : 평면을 카메라 방향으로 해서 그린다.
stretched billboard : 나아가는 방향대로 늘어남다. (noise와 같이 설정하면, 늘어나는 부분도 같이 왜곡된다.)
horizontal billboard : 항상 위를 향하여 생성된다. (낙엽 등을 파티클로 생성할 때에 유용할 것 같다.)
vertical billboard : 항상 세워져 있는 방향으로 생성된다.
mesh : 원하는 3d, 2d 오브젝트로 파티클을 생성한다. (이 경우에는 render allignment를 local로 하는 편이 좋다.)
none : 아무것도 보이지 않는다. (다만, trail 등의 경우는 나오기 때문에 trail만 생성하고 싶은 경우 사용할 수 있다.)

 

Sorting Fudge : 파티클이 곂쳐있을 때에 파티클이 보이는 순서를 설정한다. (작을수록 더 앞에 나온다.)

 

파티클 시스템 - 스크립트

스크립트로도 당연히 파티클을 조절할 수 있다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParticleControl : MonoBehaviour
{
    public ParticleSystem part;

    void Awake()
    {
        part = GetComponent<ParticleSystem>();
        StartCoroutine("PartAction");
    }

    IEnumerator PartAction()
    {
        // 모듈 접근 
        var emissionMod = part.emission;
        var noiseMod = part.noise;
        var shapeMod = part.shape;
        var rotateMod = part.rotationOverLifetime;
        // 필요할 때에 유니티 문서 찾아보기 

        shapeMod.enabled = false;   // 쉐이프 모듈 비활성화 
        yield return new WaitForSeconds(2f);
        emissionMod.rateOverTime = 100;
        noiseMod.enabled = true;
        noiseMod.strength = 5;
        // part.Pause();   // 일시정지
        yield return new WaitForSeconds(2f);
        emissionMod.rateOverTime = 0;   // rateOverTime으로 키고 끄기 
        // part.Play();    // 재생 
        yield return new WaitForSeconds(2f);
        emissionMod.rateOverTime = 10;
        // part.Stop();    // 정지 
        yield return new WaitForSeconds(2f);
        emissionMod.rateOverTime = 100;
        noiseMod.enabled = false;
        shapeMod.enabled = true;
    }

    void Update()
    {

    }
}

 

 

아래는 해당 코드의 예시이다.

 

화염 효과 예시

 

 

VFX

예전에 사용한 적 있는 비주얼 스크립트 등처럼 파티클을 만들 수 있는게 바로 VFX이다.

역시나 사용하기 위해서는 패키지 메니져에서 VFX(visual effect graph)와 shader graph를 import 해야 한다.

아 그리고, URP 프로젝트에서만 사용할 수 있으니 프로젝트를 생성할 때에 URP로 생성해야 한다.

 

설치가 되었다면, 에셋에 새롭게 vfx를 만들고, 인스펙터 상에서 open을 누르면 VFX를 시작할 수 있다.

(혹여나 생성한 VFX에 오류가 있다면, 아래 사진처럼 rebuild를 해보도록 하자.)

 

 

VFX 역시 새로웠던 것 위주로 작성하겠다.

 

Set Position (Sphere) : 구 형태로 파티클을 생성한다.

position value에서..
- surface : 표면에서 생성하기
- volume : 내부까지 채워서 생성하기

 

Vector Field Force : 방향으로 뻗어나가는 것을 제한한다.

intensity : 특정 방향으로 뻗어나가는 정도
drag : 갇히는 정도

 

Turbulence : 난류를 생성해서 울렁거리는 효과를 준다.

 

Collide With Sphere : 가상의 구체를 생성해서 충돌처리를 한다.

 

transform 프로퍼티로 설정하는 것도 가능하다.

 

Orient - Along Velocity : 나아가는 방향대로 회전한다.

 

그리고, 컴포넌트 중에 VFX Property Binder라는 컴포넌트가 있는데 VFX 안에 프로퍼티를 실제 오브젝트와 연동시키도록 해준다.

 

실제 오브젝트를 collide sphere로 설정한 모습

 

나는 collider with sphere의 position과 radius를 지정하는 transform 프로퍼티를 월드 상에 한 구체에 적용했고, 다음 영상과 같이 해당 구체를 이동시키면, 정상적으로 파티클과 충돌이 되는 것을 볼 수 있다.

 

정상적으로 구체와 부딫히는 파티클

 

 

TMI

 

사실 이번주에는 파티클 외에도 terrain을 배우기도 했고, 개인 프로젝트도 조금씩 하고 있었다.

다만, 카카오 사태(?)에 때문에 작성한 부분이 날아가기도 하고, 다른 일정이 있어서 이 정도로 마무리 하려고 한다.

영상이나 사진이라도 좀 올리고 싶었는데 아직까지도 영상이나 사진이 잘 올라가지 않아서 그냥 다음번 학습 일지에 같이 올리도록 하겠다.

 

 

 

유데미 코리아 바로가기 : 

 

Udemy Korea - 실용적인 온라인 강의, 글로벌 전문가에게 배워보세요. | Udemy Korea

유데미코리아 AI, 파이썬, 리엑트, 자바, 노션, 디자인, UI, UIX, 기획 등 전문가의 온라인 강의를 제공하고 있습니다.

www.udemykorea.com

 

💡 본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.