์๋งํ Particle System์ ์ด์ฉํ์ฌ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ง์ ๋ฐ์ฌํด๋ณด์.
2์ค ์์ฝ
- ํํฐํด ์์คํ ์ ์คํฌ๋ฆฝํธ ์์์ ๋ถ๋ฌ์ ๊ธฐ์ด ์ค์ ์ํจ
- ๊ทธ ๋ค ๋ถ๋ฌ์จ <ParticleSystem> ๋ณ์์ .Emit(<ParticleSystem.EmitParams>, Amount)๋ก ๋ฐฉ์ถ
์ด๋ป๊ฒ ๋ฐ์ฌํ์ง?
๊ฒ์ ์ค๋ธ์ ํธ์ ๋ฌ๋ฆฐ Particle System์ ๋ณ์๋ฅผ ์ผ์ผํ ์กฐ์ ํ๋ฉฐ ๋ชจ๋ ์ํฉ์ ๋ง๋ ํน์ ๋ชจ๋ ๋ฐ๋ฆฌ์์ด์ ์ ํ๋ง์ ๋ง๋๋๊ฒ์ ์๋นํ ๊ท์ฐฎ์ ์์ ์ด ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ํฉ์ ๋์ํ๊ฑฐ๋ ํด์ผํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ํ๋ง์ ๋ฐ์ฌํด ๋ณด๊ฒ ๋ค.
๋๋ฅผ ์๋๊ฒ๋ ์ค์ํ์ง๋ง ์ ์ ์๋๊ฒ๋ ์ค์ํ๋ฒ ์ด๋ฒ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ํํฐํด ์์คํ ์ ์ธ๋ถ ๋ชฉ๋ก์ ์ด์ง๋ง ๋ณด๊ณ ๊ฐ์ผ๊ฒ ๋ค.
๋ง์ฝ ํํฐํด ์์คํ ์ ์์ธํ ์ค๋ช ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ๊ตฌ๊ธ๋ง์ ํ๋ํธ์ด ์ข์๊ฒ ๊ฐ๋ค.
์ฐ์ ๊ฐ์ฅ ๋์ ๋์ด๋ ๋งจ ์์ ํญ๋ชฉ๋ถํฐ ๋ณด๊ณ ๊ฐ๊ฒ ๋ค.
์ฐ๋ฆฐ ํํฐํด์ ์ฝ๋์์ Emitํ์ฌ ์ฌ์ฉํ ๊บผ๊ธฐ ๋๋ฌธ์ ๋ช๋ช ํญ๋ชฉ์ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
Start Lifetime - ๋ฐ์ฌํ ๋ ์๋ช ์ฃผ๊ธฐ์ด๋ค.
Start Speed - ๋ฐ์ฌํ ๋์ ์ด๊ธฐ ์๋์ด๋ค.
Start Size - ์์ํ ๋ ์ฌ์ด์ฆ์ด๋ค.
Gravity Modifier - ์ค๋ ฅ ์์น๋ฅผ ์ผ๋ง๋ ๋ฐ์์ง์ด๋ค.
Simulation Space - ์๋ฎฌ๋ ์ด์ ๋๋ ๊ณต๊ฐ์ด๋ค. Local, World, Custom์ด ์กด์ฌํ๋ฉฐ Local์ ๋ก์ปฌ ์์ญ์์์ ์๋ฎฌ๋ ์ด์ Emit๋๋ ๊ณผ์ ์ค์ ํํฐํด ์์คํ ์ด ๋ถ์ด์๋ ๊ฒ์ ์ค๋ธ์ ํธ์ ํฌ์ง์ ์ ๋ฐ๊พธ๋ฉด ํํฐํด๋ ๋ฐ๋ผ๋ค๋๋ค. World๋ WorldSpace์์ ์๋ฎฌ๋ ์ด์ ํ๋๊ฒ์ผ๋ก ๊ฒ์ ์ค๋ธ์ ํธ์ ํฌ์ง์ ์ ๋ฐ๊ฟ๋ ํํฐํด์ ๊ทธ๋๋ก ์๊ธฐ ๊ฐ๊ธธ์ ๊ฐ๋ค.
Simulation Speed - ์๋ฎฌ๋ ์ด์ ๋๋ ์๋์ด๋ค. ๋ฐฐ์๊ฐ์๊ฑฐ๋ผ ๋ณด๋ฉด ๋๋ค.
Emitter Velocity - ํํฐํด์ ์๋๋ฅผ ๊ณ์ฐํ๋๋ฐ์ Rigidbody๋ฅผ ์ฌ์ฉํ ์ง Transform์ ์ฌ์ฉํ ์ง๋ฅผ ์ ํํ ์ ์๋ค.
Max Particles - ์ต๋ ํํฐํด์ ๊ฐฏ์์ด๋ค ํ์ฝ ํ๋ง์ ์๋๋ ์ ํ์ ๊ฑธ๋ ค ์๋ํ ํจํด์ ๋ชป ๋ณด์ฌ์ค ์ ๋ ์์ผ๋ ์ ์ฒดํฌํ๋๊ฒ์ด ์ข๋ค.
...
์์ฐธ 4๊ฐ์ง์ ์ ํ ์ต์ ์ด ์๋ ์น๊ตฌ๋ค์ด ์๋ค. ํญ๋ชฉ์ ์ฐ์ธก ์๋ ์ผ๊ฐํ์ ๋๋ฅด๋ฉด 4๊ฐ์ง ์ต์ ์ด ๋ฌ๋ค.
Constant ํ๋์ ๊ฐ
Curve AnimationCurve ์๋๋ฉ์ด์ ์ปค๋ธ๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
Random Between Two Constants ๋๊ฐ์ ๊ฐ์ค ์ฌ์ด์ ๊ฐ์ ๋๋ค์ผ๋ก ์ถ๋ ฅํ๋ค
Random Between Two Curves ์ดํ ๋๋ฌธ
ํ๋ฒ์ฉ ๋๋ฌ๋ณด๊ณ ๊ฐ์ ๋ฃ์ด๊ฐ๋ฉฐ ํ ์คํธ ํด๋ณด๋๊ฒ๋ ์ข๋ค.
์ฐ๋ฆฌ๊ฐ ์๋์ผ๋ก ์ฌ์ถํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์์ ์น๊ตฌ๋ค
ํ์ง๋ง ์ฌ๋ฌ ์์น๋ฅผ ๋ฃ์ด๋ณด๊ณ ํ ์คํธํ๊ธฐ ์ํด์ Emission์ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
ย
Shape๋ ๋ถ์ฌ๊ตฌ์ย ๋ชจํ?์ ์ ํํ๋ ๊ฒ์ด๋ค.
๋ณธ์ธ์ Edge์ Radius๋ฅผ 0์ผ๋ก ์ ๋ ฅ(0.0001)ํ์๋ค.
Align To direction์ ์ฒดํฌํด์ฃผ์๋ค.ย
Velocity over Lifetime ๋ง๊ทธ๋๋ก ์ด์์๋๋์ Velocity๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์น๊ตฌ๋ค
์ด๋ฒ์ Speed Modifier๋ง ์ฌ์ฉํ ๊ฒ์ด๋ฉฐ ๊ธฐ๋ฅ์ ์ด๋ฆ ๊ทธ๋๋ก์ด๋ค.
Force Field์ ์ผ๋ง๋ ์ํฅ์ ๋ฐ์์ง๋ ๋ง์คํฌ๋ฑ์ ์ค์ ๊ฐ๋ฅํ๋ค.
๋ค์์ ๋์ฌ ํญ๋ชฉ์ ๋ณด๊ธฐ์ ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๋งํ ํํฐํดํ๊ณ ํ๋ ์ด์ด์ ์ํธ์์ฉ์ ์ด๋์ด๋ผ์ง์ ๋ํ ๋ถ๋ถ์ด๋ค.
์ฌ์ค Triggers๋ง ๋ดฃ์๋๋ฐ ๊ธ์ฐ๋ค ๋ณด๋ Collision์๋ ๋ช๋ช ๊ธฐ๋ฅ์ด ์์ด ํธ๋ค๋ฅ ๋ด์ฉ์ ์ถ๊ฐํ๋ค
์ผ์ง๋ ์ ์ด์ผ
Collision๊ณผ Triggers...
์ฐ์ Collision์ ์ฐ๋ฆฌ๊ฐ ์๋ ๊ทธ Collision์ด๋ค.
์ด๋์ ์๋ฎฌํ ๊ฑด์ง ๋ชจ๋๋ฑ์ ์ ํ๊ฐ๋ฅํ๊ณ ๋ค์ํ ์ต์ ์ด ์๋๋ฐ ๋ช๋ช ๊ธฐ๋ฅ์ ์ง์คํด๋ณด๊ฒ ๋ค.
>>Lifetime Loss<< ์ด ํญ๋ชฉ์ ์ถฉ๋์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ผ๋ง๋ ๊น์ผ์ง์ด๋ค. 0~1๊น์ง์ ๊ฐ์ด ์๊ณ 0์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ ์ ํ ๊น์ด์ง ์์ผ๋ฉฐ 1๋ก ์ค์ ํ ๊ฒฝ์ฐ ๋จ์ ์๋ช ์ฃผ๊ธฐ์ธ์ง ๊ทธ๋ฅ ์๋ช ์ฃผ๊ธฐ์ธ์ง๊ฐย ์ ๋ถ ๊น์ธ๋ค
ํํฐํด์ ํ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ค์ํ ๋ถ๋ถ์ด๋ผ ์๊ฐํ๋ค.
Radius Scale ์ด๊ฑด ํํฐํด์ ๋ถ์ ์ฝ๋ฆฌ์ ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ ํด์ฃผ๋ ๋ ์์ด๋ค. ์ค์ง์ ์ผ๋ก ๋ณด์ด๋ ํํฐํด์ ๋ง์ถฐ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
Gollision Quality๋ High Middle Low๊ฐ ์๋๋ฐ ์ํฉ์ ๋ง์ถฐ ์ค์ ํ๋ฉด ๋์ง๋ง ์ฌ๊ธฐ์ High๋ก ์ค์ ํ๊ฒ ๋ค.
์ฝ๋ฆฌ์ ๋ ์ด์ด๋ ์ค์ ํด์ฃผ๊ณ ๊ฐ์ฅ ์ค์ํ์์๋ ๋งจ ์๋ ์ ์๋ค.
Send Collision Messages์ Visualize Bounds๋ค.
Visualize Bounds๋ ์ฝ๋ฆฌ์ ์ ํฌ๊ธฐ๋ฅผ ์ฌ ์์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
Send Collision Messages๋ ๋ฌผ๋ฆฌ ์ถฉ๋์์ย ํด๋น ํํฐํด ์์คํ ์ ๋ฌ๋ฆฐ ์คํฌ๋ฆฝํธ์์ย OnParticleCollision(GameObject ~~~)๋ฅผ ํธ์ถํด์ค๋ค.
์ค์ํ๊ฑด ์ถฉ๋ํ ์ค๋ธ์ ํธ์ ์ ๋ณด๋ฅผ ์ ๋ฌํด ์ค๋ค๋๊ฒ์ด ๊ฐ์ฅ ํฐ ์์ ์ด๋ค.
์ด๋ฅผ ํตํ์ฌ ๋ค๋ฅธ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ค์์ผ๋ก ์์๋ณผ๊ฑด Triggers์ด๋ค.
์ด๋ป๊ฒ ๋ณด๋ฉด ํต์ฌ์ด์๋ย ๋ถ๋ถ์ธ Triggers ๋ถ๋ถ์ด๋ค.
๊ท์น์ ์๋ฌธ๋ช ๊ทธ๋๋ก์ด๋ฉฐ 3๊ฐ์ง ์ต์ ์ด ์๋ค. Kill,ย Ignore, Callback.
Kill์ ํด๋น ํํฐํด์ ์ฃฝ์ฌ๋ฒ๋ฆฐ๋ค.
Ignore์ ๋ง๊ทธ๋๋ก ์๋ฌด์ผ๋ ์๋ค.
>> Callback << ์ฐ๋ฆฌ๊ฐ Callback ์ค์ ์ ํตํ์ฌ ํํฐํด์ด ํ๋ ์ด์ด์ ํด๋นํ๋ ์ค๋ธ์ ํธ์๊ฒ ๋ฟ์๋์ง๋ฅผ ๊ฒ์ถํ ๊ฒ์ด๋ค.
๋ณธ์ธ์ด ์ง์์ด๋ ๊ตฌ๊ธ๋ง ์ค๋ ฅ์ด ๋ถ์กฑํด์ ๊ทธ๋ฐ์ง ๋ชฐ๋ผ๋ ํํฐํด์ ์ถฉ๋๋ ์ค๋ธ์ ํธ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง๋ฅผ ๋ชปํ์๋ค.
์ด๋ถ๋ถ์ Collision์ ์ฌ์ฉํ๋ฉด ๋๋ ์ง๊ธ์ ๋ด๋ค ๋ฒ๋ฆด๋๊ฐ ๋๊ฒ๊ฐ๋ค.
Inside,ย OutSide,ย Enter,ย Exit ํด๋น ์กฐ๊ฑด๋ค์ 3๊ฐ์ง ์ต์ ์ ์ค์ ํ์ฌ ์ ๋ง๋๋ก ์ฌ์ฉํ ์ ์๋ค.
Radius Scale - ํธ๋ฆฌ๊ฑฐ ์ฝ๋ผ์ด๋์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ค๋ค.
Visualize Bounds - ํธ๋ฆฌ๊ฑฐ ์ฝ๋ผ์ด๋?์ ์ย ๋ฒ์๋ฅผ ๋ณด์ฌ์ค๋ค.
์ด๋ฐ์์ผ๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
Callback์ Collision์์ ์ค๋ช ํ๊ฑฐ์ ๋น์ทํ๊ฒย OnParticleTrigger()๋ฅผ ํธ์ถํด์ค๋ค.
์ถฉ๋๋ ์ค๋ธ์ ํธ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋๋ฒ...์ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ๊ฐ๋จํ๊ฒ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์งค๋งํ ์ฝ๋๋ฅผ ๋ฃ๊ฒ ๋ค.
ParticleSystem ps = GetComponent<ParticleSystem>();
ย ย ย ย List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
ย ย ย ย int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
ย ย ย ย if (numEnter > 0)
ย ย ย ย {
ย ย ย ย ย ย Debug.Log("Enter");
ย ย ย ย }
์ด๋ฐ์์ผ๋ก enter๋ ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉด Debug.Log("Enter");๋ฅผ ์ฐ์ ์ ์๊ฒ ํ ์ฝ๋์ด๋ค.
ํํฐํด์ ์ ๋ณด๋ฅผ ์ ๋ถ ๊ฐ์ ธ์์ ๋ญ ํ๋๊ฒ ๊ฐ์๋ฐ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋ ๋ง์ ์ ๋ณด๋ ๊ตฌ๊ธ๋ง์ผ๋ก ์์๋ณด๋ฉด ์ข์๊ฒ ๊ฐ๋ค.
๋ ๋๋ฌ ๋ถ๋ถ์ด๋ค.
๋ณธ์ธ์ ๋ค๋ฅธ ๋ถ๋ถ์ ํฌ๊ฒ ์ค์ ํ์ง ์์๊ณ Render Mode๋ฅผ Stretched Billboard๋ก Length Scale์ 1๋ก ์ค์ ํ๋ค.
์ด ์ต์ ์ ํํฐํด์ ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ง์ถฐ ๋ ๋ํด์ฃผ๋ ์ต์ ์ด๋ค.
ํํฐํด์ ์ฌ๋ฌ ์ต์ ์ ์ค์ ํ๋ฉฐ ๋ง์ง์ ๊ฑฐ๋ฆฌ๋ค๋ณด๋ ์ด์ ๊ณผ ๋ฌ๋ผ์ง ์ต์ ๋ค์ด ์กด์ฌํ๋ค.
์ฐ์ ๋ชจ์ฒด GameObject์ Rotation์ Y๋ฅผ 90์ผ๋ก ๋๋จธ์ง 0์ผ๋ก ์ค์ ํ๋ค.
์คํฌ๋ฆฝํธ์์ ํํฐํด์ ๋ํ ๊ธฐ๋ณธ ์ค์ ์ ํด์ค ๋ค ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ParticleSystem ๋ณ์์ย (GetComponentํ๋ ์ธ์คํํฐ์์ ๋ฃ๋) ์ฐธ์กฐ Emit(<EmitParams> , Amount)ํ๋ฉด ํํฐํด์ด ์ฌ์ถ๋๋ค.
์๋ฐ์์ผ๋ก ๋ฐฉ์ถ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฐ์์ผ๋ก ๋๋ฒ๊ทธ ๋ก๊ทธ๋ ์ ์ฐํ๊ณ
ํผํฌ๋จผ์ค๋ ๋ฌด๋ํ๊ฒ ์ ๋์ค๋๊ฒ ๊ฐ๋ค
๊ทผ๋ฐ ๋ถ๋ช ์๊น๋ ์ด๋ ๊ฒ๊น์ง ๋์ค์ง ์์๋๋ฐ 16ms์ ๋์๋๋ฐ ๊ฐ์๊ธฐ ์ ํผํฌ๋จผ์ค๊ฐ ์ข์์ง๊ฑด์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค
์ํผ ์ค๋์ ์คํฌ๋ฆฝํธ์์ Emit() ํ๋๊ฒ ๊น์ง ๊ฒช์๋ ์ํ์ฐฉ์ค๋ ์ฒ์ ์ ๊ทผํ ๋ ๋ณด๋ฉด ์ข์๊ฒ ๊ฐ์๊ฒ์ ์ข ์ ์๋ค.
์คํฌ๋ฆฝํธ ๊ด๋ จํด์๋ ๊ณ์ ์ ์ด๋๊ฐ๋ฉฐ ๋ฐ๋๋๊ฑธ ๋ณด์ฌ์ค๋ ค ํ๋๋ฐ ์ฌ๊ฐ ๊ท์ฐฎ์๊ฒ ์๋์ฌ์ ์ฌ๊ธฐ์ ์ด ์คํฌ๋ฆฝํธ ์ฌ๋ ค๋๊ณ ๋ฐ์ ํด์ผํ ๊ฒ ๊ฐ๋ค
ํํฐํด ๊ด๋ จํด์ ์๋๊ฒ ์ด๊ฒ๋ฐ์ ์์ด์ ๊ฐ๋ฌธ์ ๋น๋ฐ๊ฐ์ ๋๋์ธ๋ฐ ์ด์ชฝ์ผ๋ก ๋์ ํ ์ฌ๋์๊ฒ ๋์์ด ๋๋ฉด ์ข์๊ฒ ๊ฐ๊ณ ย ๋๋ ์ฒ์ ์ด๊ฑธ๋ก ๋์ ํ ๋ ์ง์ง ์ ๋ณด ์๋์์ ใ ๊ฐ์๋๋ฐ
ํด๋ณด๊ณ ์๋๋ฉด ๋ ๋ค๋ฅธ ์ฌ๋์ ๋์์ฃผ์ธ์ฉ
๋ญ ์ํผ ์ด๋ฒ ์ผ์ง์ ์์ง๋ ํํฐํด์ ์คํฌ๋ฆฝํธ๋ก ๋ฐ์ฌํ๊ณ ํ๋ง์ฒ๋ผ ๋ค๋ฅธ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ํธ์์ฉํ๋๊ฒ ๊น์ง ํ๋ค.
=========================
๋ชฉํ ์ง์ < ๋ณ๋๋ ์ ์์ >
1. ํํฐํด ์์คํ ์ ์ค์ ย
2. ํํฐํด ์์คํ ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ ย <-- ํ์ ์์น
3. ๊ฐ๋จํ ํจํด์ ๋ง๋ค์ด๋ณด๊ธฐย <-- ํ์ ์์น
4. ์ฌ๋ฌ ํจํด์ ์ด์ด ์ฐ์์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋์์ ๋ค์ํ ํจํด์ ๋ถ์ฌํ ์ ์๋๋ก ํ๊ธฐ
5. ๋ณตํฉ์ ์ธ ํจํด์ ๋ง๋ค์ด ๋ณด๊ธฐ
6. ์ฝ๋์์ผ๋ก ๋ฏธ๋ฆฌ ์ ์๋ ํจํด์ ScriptAbleObject ํน์ Excel๋ฑ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํ์ฌ ํ ์ธ์๋ ์ฝ๊ฒ ํจํด์ ์ ์ํ ์ ์๋๋ก ํ๊ธฐ
7. ์ง์ฅ์ ํด๋ฆฌ์ฑ ์์
=========================
๋ค์์ ํ ์์ ์ ์ข ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ์์ ์ด๋ผ ์ธ์ ๋ค์ ์ฌ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ค์์ ๋ ์ฌ๊ป์
๊ธด๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
<Script>
ํ๋จ์ ์ฝ๋๋ ๊ฐ๋ ์ฑ๋ ์๋ง์ด๊ณ ๋ณ๋ก์ง๋งย ํน์ ์ฐธ๊ณ ํ ์ฌ๋์ ์ฐธ๊ณ ํด์ฃผ์ญ์ผ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//using UnityEngine.ParticleSystemJobs;
public class ParticleSetup : MonoBehaviour
{
ย ย [SerializeField] private int BulletWay;
ย ย [SerializeField] private Collider2D TestCollider2D;
ย ย [SerializeField] private float EmitTime;
ย ย [SerializeField] public bool EMIT_END = false;
ย ย [SerializeField] private bool earlySpeedSet;
ย ย [SerializeField] private bool earlySpeedCurve;
ย ย [Tooltip("False << True >>")]
ย ย [SerializeField] private bool RotationDirection;
ย ย [SerializeField] protected ParticleSystem system;ย ย ย ย ย ย ย ย //๋ฉ์ธ์ผ๋ก ์ฌ์ฉํ ๋ ์
ย ย [SerializeField] protected ParticleSystem.EmitParams emitparam;
ย ย [SerializeField] protected ParticleSystem.ShapeModule Moduleshape;
ย ย protected Vector3 vParticleRotation;ย ย ย ย //ํํฐํด์ ๋๋ฆด๋ ์ธ ๋ฒก3
ย ย protected Vector3 vTmpParticleRotation;ย ย ย //์์๋ก ํ์ ๊ฐ์ ๊ฐ์ง ๋ฒก3
ย ย [SerializeField] protected float fStartSize;ย ย ย ย //์์ ์ฌ์ด์ฆ
ย ย [SerializeField] protected float fBulletStartSpeed; //์์ ์๋
ย ย [SerializeField] protected float fLifeTime;ย ย ย ย ย //์๋ช ์ฃผ๊ธฐ
ย ย [SerializeField] protected AnimationCurve StartSpeedCurve;
ย ย [SerializeField] private bool EnableVOL;
ย ย [SerializeField] protected AnimationCurve VeloOverTimeCurve;
ย ย class cStartSpeed
ย ย {
ย ย ย ย TypeStartSpeed Select;
ย ย ย ย public float fStartSpeed;
ย ย ย ย ย
ย ย }
ย ย enum TypeStartSpeed
ย ย {
ย ย ย ย Constant,
ย ย ย ย Curve,
ย ย }
ย ย private void Awake()
ย ย {
ย ย ย ย Initialize();
ย ย ย ย TestEmit();
ย ย }
ย ย private void TestEmit()
ย ย {
ย ย ย ย Debug.Log("Emit Start by CorFunc...");
ย ย ย ย StartCoroutine(corFunc_TestEmit());
ย ย }
ย ย /// <summary>
ย ย /// ํ ์คํธ Emit์ ๊ฝ๋ชจ์์ ๊ทธ๋ฆฌ๋ฉฐ ๋ฐ์ฌํ๊ฒ ํ ์์ .
ย ย /// </summary>
ย ย /// <returns></returns>
ย ย private IEnumerator corFunc_TestEmit()
ย ย {
ย ย ย ย //ํ๋น ํ์ ๋ฅ
ย ย ย ย //1๋์ฉ ํ์ ...
ย ย ย ย WaitForSeconds wfs = new WaitForSeconds(EmitTime);
ย ย ย ย WaitForSeconds wfs2 = new WaitForSeconds(3f);
ย ย ย ย if (BulletWay <= 0) { BulletWay = 1; }
ย ย ย ย //x์ถ์ ๋ณ๊ฒฝํ๋ฉด ํ์ + ๋๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์
ย ย ย ย while (true)
ย ย ย ย {
ย ย ย ย ย ย //30ํ ์ฌ์ดํด
ย ย ย ย ย ย for (int j = 0; j < 30; j++)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย //30ํ ์ฌ์ดํด ์ค 1ํ๋น BulletWay ๋งํผ์ ํ๋ง์ ์ฌ๋ฐฉ์ ๋ฐ์ฌ
ย ย ย ย ย ย ย ย if(RotationDirection) vParticleRotation.x -= 0.5f;
ย ย ย ย ย ย ย ย else vParticleRotation.x += 0.5f;
ย ย ย ย ย ย ย ย for (int i = 0; i < BulletWay; i++)
ย ย ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย ย ย vTmpParticleRotation.x = ((360f / (float)BulletWay) * i) + vParticleRotation.x;//๊ฐ๋...
ย ย ย ย ย ย ย ย ย ย Moduleshape.rotation = vTmpParticleRotation;
ย ย ย ย ย ย ย ย ย ย system.Emit(emitparam, 1);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย ย ย yield return wfs;
ย ย ย ย ย ย }
ย ย ย ย ย ย yield return wfs2;
ย ย ย ย ย ย if (EMIT_END)
ย ย ย ย ย ย ย ย break;
ย ย ย ย }
ย ย }
ย ย private void Initialize()
ย ย {
#if UNITY_EDITOR
ย ย ย ย if (system == null)
ย ย ย ย {
ย ย ย ย ย ย if (!TryGetComponent<ParticleSystem>(out system))
ย ย ย ย ย ย ย ย system = this.gameObject.AddComponent<ParticleSystem>();
ย ย ย ย ย ย Debug.LogError("PARTICLE SYSTEM IS NULL ADDCOMPONET PARTICLE SYSTEM : " + this.gameObject);
ย ย ย ย }
#endifย
ย ย ย ย ParticleInitialize();
ย ย }
ย ย /// <summary>
ย ย /// Particle Init...
ย ย /// </summary>
ย ย private void ParticleInitialize()
ย ย {
ย ย ย ย vParticleRotation = new Vector3();
ย ย ย ย vParticleRotation = Vector3.zero;
ย ย ย ย vTmpParticleRotation = new Vector3();
ย ย ย ย vTmpParticleRotation = Vector3.zero;
ย ย ย ย emitparam = new ParticleSystem.EmitParams();
ย ย ย ย emitparam.startColor = Color.white;
ย ย ย ย emitparam.startSize = fStartSize;
ย ย ย ย //๋ ๋๋ฌ ์ ํ
ย ย ย ย //์์ ํฌ๊ธฐ ๋ฐ ์ด๊ธฐ ์คํผ๋ ์ค์
ย ย ย ย var MainModule = system.main;
ย ย ย ย MainModule.maxParticles = 20000;ย ย //ํ์ ์ต๋ ๊ฐฏ์ ์ค์
ย ย ย ย //MainModule.startColor = bulletColor;
ย ย ย ย MainModule.startSize = fStartSize;ย ย //์์ ์ฌ์ด์ฆ
ย ย ย ย ย
ย ย ย ย //if (!earlySpeedSet)
ย ย ย ย //ย ย MainModule.startSpeed = fBulletStartSpeed;ย //์์ ์๋
ย ย ย ย //var mainSpeed = MainModule.startSpeed;// = ParticleSystemCurveMode.Curve;
ย ย ย ย ย
ย ย ย ย var mainSpeed = MainModule.startSpeed;
ย ย ย ย mainSpeed.mode = ParticleSystemCurveMode.Curve;
ย ย ย ย for(int i = mainSpeed.curve.keys.Length - 1; i > 0; i--)
ย ย ย ย {
ย ย ย ย ย ย mainSpeed.curve.RemoveKey(i);
ย ย ย ย ย ย Debug.Log("REMOVE KEY");
ย ย ย ย }
ย ย ย ย if (earlySpeedCurve)
ย ย ย ย {
ย ย ย ย ย ย mainSpeed.curve = StartSpeedCurve;
ย ย ย ย ย ย mainSpeed.curveMultiplier = fBulletStartSpeed;
ย ย ย ย }
ย ย ย ย else if(earlySpeedSet)
ย ย ย ย {
ย ย ย ย ย ย mainSpeed = fBulletStartSpeed;
ย ย ย ย }
ย ย ย ย MainModule.startSpeed = mainSpeed;
ย ย ย ย MainModule.startLifetime = fLifeTime;
ย ย ย ย MainModule.simulationSpace = ParticleSystemSimulationSpace.World;ย ย //์๋ฎฌ ์คํ์ด์ค
ย ย ย ย //Velocity over lifetime
ย ย ย ย var VOL = system.velocityOverLifetime;
ย ย ย ย if (EnableVOL)
ย ย ย ย {
ย ย ย ย ย ย VOL.enabled = true;
ย ย ย ย ย ย var VeloLifeCurve = system.velocityOverLifetime.speedModifier;ย //๋ฐ๋ก ๋นผ๋๊ณ
ย ย ย ย ย ย VeloLifeCurve.curve = VeloOverTimeCurve;
ย ย ย ย ย ย VOL.speedModifier = VeloLifeCurve;ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย //๋ค์ ๋ฃ์ด์ฃผ๊ธฐ
ย ย ย ย }
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย VOL.enabled = false;
ย ย ย ย }
ย ย ย ย //Emit ํ ๋ ์ฌ์ฉ๋ Param ์ค์ ํ์...
ย ย ย ย //ParticleSystem.EmitParams EmitParams = system.EmitParams;
ย ย ย ย //EmitParams
ย ย ย ย Moduleshape = system.shape;
ย ย ย ย Moduleshape.alignToDirection = true;ย //ํํฐํด์ด ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ด.
ย ย ย ย //์ด๋ฏธ์ ์ค์
ย ย ย ย var Emition = system.emission;
ย ย ย ย Emition.enabled = false;
ย ย ย ย var collision = system.collision;
ย ย ย ย collision.enabled = true;
ย ย ย ย collision.type = ParticleSystemCollisionType.World;
ย ย ย ย collision.mode = ParticleSystemCollisionMode.Collision2D;
ย ย ย ย collision.bounce = 0f;
ย ย ย ย collision.maxKillSpeed = 20000;
ย ย ย ย collision.radiusScale = 0f;ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย //์ฝ๋ฆฌ์ ์ ๋ฐ์ง๋ฆ์ ์ค์ด๊ณ Trigger์ ๋ฐ์ง๋ฆ์ 1f๋ก ์ ์งํ์ฌ ์ค์ง์ ์ถฉ๋์ฒ๋ฆฌ๋ ์๊ฒํ๊ณ Trigger์ ์ถฉ๋์ ํตํ์ฌ ์ด์์ ์ ๊ฑฐ๋ฅผ ์งํ.
ย ย ย ย collision.quality = ParticleSystemCollisionQuality.High;
ย ย ย ย //ํ๋ ์ด์ด ์ฝ์ด ๋ ์ด์ด์์ ์ถฉ๋๋ง ์ฒ๋ฆฌํ๋๋ก.
ย ย ย ย //collision.collidesWith = 1 << LayerMask.NameToLayer("PlayerCore");ย ย //๋ ์ด์ด ๊ด๋ฆฌ
ย ย ย ย collision.sendCollisionMessages = true;
ย ย ย ย var trigger = system.trigger;
ย ย ย ย //์ฝ๋ผ์ด๋ ์ถ๊ฐ ์์ญ
ย ย ย ย //trigger.AddCollider(GameManager.PlayerHit().GetComponent<Collider2D>());
ย ย ย ย trigger.enabled = true;
ย ย ย ย //trigger.AddCollider() //Date์ ์ ์ฅ ํน์ Player์ ํธ๋ฆฌ๊ฑฐ ์ ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฃ์ด ์ฒ๋ฆฌ... ๊ทผ๋ฐ ์ด๊ฑธ ๋ฅ๋์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด์ ์งํํ๊ฒ ํ ์ ์์๊น?
ย ย ย ย trigger.AddCollider(TestCollider2D);
ย ย ย ย trigger.inside = ParticleSystemOverlapAction.Kill;ย ย ย //๋ด๋ถ
ย ย ย ย trigger.outside = ParticleSystemOverlapAction.Ignore;ย ย //์ธ๋ถ
ย ย ย ย //์ฝ๋ฐฑ์ผ๋ก ํธ์ถ.
ย ย ย ย trigger.enter = ParticleSystemOverlapAction.Callback;ย ย //์ง์
ย ย ย ย trigger.exit = ParticleSystemOverlapAction.Ignore;ย ย ย //ํด์ฅ
ย ย }
ย ย /// <summary>
ย ย /// ํํฐํด Trigger Callback ์ํฉ์ผ ๋ ํธ์ถ
ย ย /// </summary>
ย ย private void OnParticleTrigger()
ย ย {
ย ย ย ย ParticleSystem ps = GetComponent<ParticleSystem>();
ย ย ย ย List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
ย ย ย ย int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
ย ย ย ย if (numEnter > 0)
ย ย ย ย {
ย ย ย ย ย ย Debug.Log("Enter");
ย ย ย ย }
ย ย }
ย ย private void OnParticleCollision(GameObject other)
ย ย {
ย ย ย ย Debug.Log(other.gameObject);
ย ย }
}
๊ฐ๊ณ ์ ใท
์์ง ํ์ ์ด์์,,,
ํํฐํด๋ก ํ๋ง์ ์๋ฎฌ๋ ์ด์ ํ ์ค์... ์ ๋ฐํ๊ตฌ๋ง
์์ธํ ๊ณผ์ ๊ตฟ์
์์ฐ ์ผ๋จ ์ถ์ฒ
5๋ฒ ๊ณผ์ ์ ํํฐํด๋ก ์ด๋ป๊ฒ ํ ์ง ๋๋ฌด ๊ถ๊ธํ ๋ถ๋ถ์ด์ผ์ค. ์ค๊ฐ์ค๊ฐ ํฌ์ฌ์ฒด๋ชจ์๋ ๋ฌ๋ผ์ง๊ฑฐ๋ ํ๋ฉด ๋๊ฒ ์ด๋ ค์ธ๋ฏ...
์ ๋ง ๋์๋๋ ๊ธ ๊ฐ~~~์ถ ์ด๊ฑฐ ๋ณด๊ณ ๊ณต๋ถํด๋ด ใ ใ