꿀같던 연휴들이 모두 지나간 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을 생성해서 파티클에 튕기는 효과를 준다.
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 : 가상의 구체를 생성해서 충돌처리를 한다.
Orient - Along Velocity : 나아가는 방향대로 회전한다.
그리고, 컴포넌트 중에 VFX Property Binder라는 컴포넌트가 있는데 VFX 안에 프로퍼티를 실제 오브젝트와 연동시키도록 해준다.
나는 collider with sphere의 position과 radius를 지정하는 transform 프로퍼티를 월드 상에 한 구체에 적용했고, 다음 영상과 같이 해당 구체를 이동시키면, 정상적으로 파티클과 충돌이 되는 것을 볼 수 있다.
TMI
사실 이번주에는 파티클 외에도 terrain을 배우기도 했고, 개인 프로젝트도 조금씩 하고 있었다.
다만, 카카오 사태(?)에 때문에 작성한 부분이 날아가기도 하고, 다른 일정이 있어서 이 정도로 마무리 하려고 한다.
영상이나 사진이라도 좀 올리고 싶었는데 아직까지도 영상이나 사진이 잘 올라가지 않아서 그냥 다음번 학습 일지에 같이 올리도록 하겠다.
유데미 코리아 바로가기 :
Udemy Korea - 실용적인 온라인 강의, 글로벌 전문가에게 배워보세요. | Udemy Korea
유데미코리아 AI, 파이썬, 리엑트, 자바, 노션, 디자인, UI, UIX, 기획 등 전문가의 온라인 강의를 제공하고 있습니다.
www.udemykorea.com
💡 본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.
'Starters 부트캠프 > B - log' 카테고리의 다른 글
유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 19주차 학습 일지 (0) | 2022.10.30 |
---|---|
유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 18주차 학습 일지 (0) | 2022.10.23 |
유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 16주차 학습 일지 (0) | 2022.10.08 |
유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 15주차 학습 일지 (0) | 2022.10.01 |
유데미 스타터스 유니티 개발자 취업 부트캠프 1기 - 14주차 학습 일지 (1) | 2022.09.25 |