본문 바로가기

카테고리 없음

유니티 :: 파티클 적용하기

< 절대 강좌 유니티 5 > 위키북스, 이재현 지음 


파티클은 Particle System 이라는 컴포넌트를 가지고 있는데, 이를 이용하기 위해서는


빈 오브젝트를 생성하고 파티클이 발생하기 원하는 위치에 Transform을 수정해준 뒤,


스크립트에서 ParticleSystem 변수로 선언해주고 연결해 준 뒤에 particleSystem.Play()를 해주면 파티클이 발생한다.


만약 파티클의 크기가 너무 크거나 작은 경우, 파티클 프리팹의 ParticleSystem 컴포넌트의 Start Size를 조절해주면 된다.




총구 화염의 경우 Point Light와 함께 조명 효과를 적용하여 시각적 효과를 높일 수 있지만 성능 저하가 걱정스럽다면


Particle System의 Lights 속성을 체크해제해주면 된다.




총알이 벽에 맞아 스파크가 발생하는 파티클을 적용시키고 싶다면, 먼저 충돌 지점의 정보를 알아야 한다.


OnCollisionEnter에서 인자로 받아오는 Collision에 있는 속성 중 하나인 contacts를 통해 충돌 지점을 알 수 있다.


가장 먼저 충돌된 부분을 가져오려면 contacts[0]을 이용하면 된다.


1
2
3
4
5
6
7
8
9
// 충돌 지점의 정보 추출
        ContactPoint contact = coll.contacts[0];
        // 법선 벡터가 이루는 회전각도를 추출
        Quaternion rot = Quaternion.FromToRotation(-Vector3.forward, contact.normal);
 
        // 스파크 효과를 생성
        ParticleSystem spark = Instantiate(sparkEffect, contact.point + (-contact.normal * 0.05f), rot);
        // 스파크 효과의 부모를 드럼통 또는 벽으로 설정
        spark.transform.SetParent(this.transform);

cs

ContactPoint 변수에 충돌 지점을 저장해주고, 법선 벡터가 이루는 회전 각도를 추출해준다.


Quaternion.FromToRotation( 기준 벡터, Target 벡터 ) 기준 벡터를 Target 벡터로 일치시키는 것으로, Target 벡터가 바라보는 방향으로


회전시켜주는 것이다.


인자에 Vector3.forward를 음수로 넣어준 이유는, 현재 OnCollisionEnter 이벤트 함수가 발생한 것은 벽으로, 총알에 대한 정보들이 저장된 것이다.


파티클은 벽에서 총알의 진행방향의 반대 방향으로 튀어야 하므로 -Vector3.forward를 인자로 넣어준 것이다.


만약 음수가 아닌 Vector3.forward였다면 총알의 진행방향으로 파티클이 튀므로 벽 속에 묻힐 수 있다.


spark.transform.SetParent(this.transfom) 은 총알에 충돌된 오브젝트가 움직일 경우 스파크도 따라가야 하므로 SetParent를 해준 것이다.