SimulationBall
๊ฐ์
SimulationBall์ ๊ณต์ ์์ง์์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ ๋ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ํ๋ ์ค๋ธ์ ํธ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฌผ๋ฆฌ ๊ณต๋ณด๋ค ๊ถค์ ์ ์์ธกํ๊ธฐ ์ฝ๊ณ , ์ฌ๋ฌ ํ๋ ์ด์ด๊ฐ ํจ๊ป ๋ณด๋ ํ๊ฒฝ์์๋ ๋ณด๋ค ์์ ์ ์ผ๋ก ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํํํ ์ ์์ต๋๋ค.
ํนํ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ ์ฉํฉ๋๋ค.
์ถ๊ตฌ๊ณต, ๋๊ตฌ๊ณต์ฒ๋ผ ๊ณต์ ๊ถค์ ์ด ์ค์ํ ๊ฒ์
๋ฒฝ์ด๋ ๋ฐ๋ฅ์ ํ๋ ๊ณต์ ์์ง์์ ์ฐ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ
๊ณต์ ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ํ์ธํ๋ฉด์ ๊ฒ์ ํ๋ ์ด๋ฅผ ์กฐ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์ฌ์ฉ ๋ฐฉ๋ฒ
SimulationBall ์์ฑ ๋ฐ ์ถฉ๋ ๋์ Trace Channel ์ค์
๋ ๋ฒจ ๋ธ๋ผ์ฐ์ ์์ SimulationBall์ ์์ฑํ ๋ค, ์ฌ์ฉํ ์์น์ ๋ฐฐ์นํฉ๋๋ค.

SimulationBall์ด ์ด๋ค ์ค๋ธ์ ํธ์ ์ถฉ๋ํ ์ง๋ Collision Profile๊ณผ Trace Channel์ ํตํด ์ ์ํฉ๋๋ค.
BallTraceChannel: SimulationBall์ด ์ถฉ๋ ์๋ฎฌ๋ ์ด์ ์ ์ํํ ๋ ์ฌ์ฉํ Trace Channel์ ๋๋ค. ์ด ์ฑ๋์ ๊ธฐ์ค์ผ๋ก Trace๋ฅผ ์ํํ์ฌ, ํด๋น ์ฑ๋์ ๋ํด Block์ผ๋ก ์๋ตํ๋ Collision Profile์ ๊ฐ์ง ์ค๋ธ์ ํธ์๋ง ์ถฉ๋ํฉ๋๋ค.BallMeshCollisionProfile: SimulationBall ์์ฒด๊ฐ ๊ฐ์ง๋ Collision Profile์ ๋๋ค.
๋ฐ๋ผ์ ๋ฒฝ์ด๋ ๋ฐ๋ฅ์ฒ๋ผ ๊ณต์ด ์ถฉ๋ํด์ผ ํ๋ ์ค๋ธ์ ํธ์๋, BallTraceChannel๋ก ์ง์ ๋ Trace Channel์ ๋ํด Block์ผ๋ก ์๋ตํ๋ Collision Profile์ ์ ์ฉํด์ผ ํฉ๋๋ค.
์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ Simaulation ์กฐ์
SimulationBall์ ์ฐพ์ ๋ค, ์์ ์์น์ ์๋๋ฅผ ์ค์ ํ๊ณ ์๋ฎฌ๋ ์ด์ ์ ์คํํฉ๋๋ค.
Simulate()๋ ํธ์ถ ์งํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋ก ์์ฑ๋์ง ์์ต๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์๋ฎฌ๋ ์ด์
์ ๋น๋๊ธฐ์ ์ผ๋ก ๋๋์ด ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์, Simulate() ์งํ์๋ ์์ง ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋์ง ์์์ ์ ์์ต๋๋ค.
BallSimParam์ ์ฃผ์ ์์ฑ
๊ณต์ ์์ง์์ BallSimParams์ ์ฃผ์ ์ค์ ๊ฐ์ ๋ฐ๊พธ๋ฉด์ ์กฐ์ ํ ์ ์์ต๋๋ค.
InitialCFrame
๊ณต์ด ์์ํ๋ ์์น๋ฅผ ์ ํฉ๋๋ค.
InitialVelocity
๊ณต์ด ๋ ์๊ฐ๋ ๋ฐฉํฅ๊ณผ ํ์ ์ ํฉ๋๋ค.
InitialSpinAxis
๊ณต์ด ํ์ ํ๋ ์ถ์ ์ ์ํฉ๋๋ค.
InitialSpinSpeed
๊ณต์ ํ์ ์๋๋ฅผ ์ ์ํฉ๋๋ค.
Mass
๊ณต์ ๋ฌด๊ฒ๊ฐ์ ์กฐ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
BaseGravity
๊ณต์ด ์๋๋ก ๋จ์ด์ง๋ ์ ๋(์ค๋ ฅ ๊ฐ)๋ฅผ ์กฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ 980 ์ผ๋ก 0์ธ ๊ฒฝ์ฐ ๋ฌด์ค๋ ฅ ์ํ์ด๊ณ , ์์๊ฐ ๋๋ฉด ์ค๋ ฅ์ด ๋ฐ๋๋ก ์๋ํฉ๋๋ค.
EnablePathMarker
๊ณต์ ์ด๋ ๊ฒฝ๋ก๋ฅผ ํ๋ฉด์์ ํ์ธํ ์ ์๋๋ก ํฉ๋๋ค.
SpinMagnusWeight
๊ณต์ด ํ์ ํ ๋ ์ ์ฉ๋๋ ๋ง๊ทธ๋์ค ํจ๊ณผ์ ๊ฐ์ค์น๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ์ค์น๊ฐ ํด ์๋ก, ๊ถค์ ์ด ํ๋ ์ ๋๊ฐ ์ปค์ง๋๋ค.
Simsteps
์๋ฎฌ๋ ์ด์ ์ ๋ช ๋จ๊ณ๋ก ๋๋์ด ๊ณ์ฐํ ์ง ์ ํฉ๋๋ค. ๊ฐ์ด ํด์๋ก ๋ ์ ๋ฐํด์ง ์ ์์ง๋ง ๊ณ์ฐ ๋น์ฉ๋ ๋์ด๋ฉ๋๋ค.
DeltaTime
๊ฐ ์๋ฎฌ๋ ์ด์ ๋จ๊ณ์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๋ค. `Simsteps`์ ํจ๊ป ์ ์ฒด ์๋ฎฌ๋ ์ด์ ๊ธธ์ด์ ์ ๋ฐ๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ ๋ฉ๋ฆฌ ๋ ๋ฆฌ๊ณ ์ถ๋ค๋ฉด InitialVelocity ๊ฐ์ ํค์ฐ๊ณ , ๋ ๋์ ๊ณณ์์ ์์ํ๊ฒ ํ๋ ค๋ฉด InitialCFrame์ ๋์ด ๊ฐ์ ์ฌ๋ฆฌ๋ฉด ๋ฉ๋๋ค.
SimaulationBall ์ถ๊ฐ ๊ธฐ๋ฅ ์ฌ์ฉ
SimulationBall์ ์ผ๋ฐ์ ์ธ ์ค์๊ฐ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ณผ ๋ฌ๋ฆฌ, ์ฌ์ ์ ์ ๋ ฅ๋ BallSimParams์ ๋ฐํ์ผ๋ก ๋ฏธ๋ฆฌ ๊ณต์ ๊ถค์ ๊ณผ ์ถฉ๋์ ๊ณ์ฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ Playํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด Play ์ ์ ๊ณต์ ์ด๋ ๊ฒฝ๋ก ๋๋ ์ถฉ๋ ์์น๋ฅผ ๋ฏธ๋ฆฌ ์์๋ผ ์ ์์ต๋๋ค.
๊ณต์ ๋ค์ Bound ์์น ์์๋ด๊ธฐ
SimulationBall์ ์๋ฎฌ๋ ์ด์ ์ด ๋๋ ๋ค, ๋ค์์ผ๋ก ํ๊ธธ ์ง์ ์ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์์๋ผ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
๊ณต์ด ์ด๋ ๋ฒฝ์์ ํ์ง ๋ฏธ๋ฆฌ ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ
๋ค์ ๋ฐ์ด๋ ์์น์ ์ดํํธ๋ฅผ ๋ฐฐ์นํ๊ณ ์ถ์ ๊ฒฝ์ฐ
AI ๋๋ ๊ฒ์ ๋ก์ง์์ ๋ค์ ์ถฉ๋ ์ง์ ์ ์์ธกํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์ ์ฝ๋์์๋ FindNextBallBounce()๋ฅผ ์ฌ์ฉํด ๋ค์ ๋ฐ์ด๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ฐํ๋ ๊ฐ ์์๋ ๋ฐ์ด๋๊ฐ ์ผ์ด๋๋ ์๊ฐ๊ณผ ์์น๊ฐ ํฌํจ๋์ด ์์ด, ๊ณต์ด ์ด๋์์ ํ์ง ๋ฏธ๋ฆฌ ํ์ธํ ์ ์์ต๋๋ค.
๋จ, Simulate() ์งํ ๋ฐ๋ก FindNextBallBounce()๋ฅผ ํธ์ถํ๋ฉด ์์ง ๊ณ์ฐ์ด ๋๋์ง ์์ ์ํ๋ ๊ฐ์ ์ป์ง ๋ชปํ ์ ์์ต๋๋ค. ์ ์์ ์ฒ๋ผ task.wait()๋ก ์ ์ ๋๊ธฐํ ๋ค ํธ์ถํด์ผ ํฉ๋๋ค.
N์ด ํ ๊ณต์ ๋ฌผ๋ฆฌ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
SimulationBall์ ํน์ ์๊ฐ์ด ์ง๋ ๋ค ๊ณต์ ์ํ๋ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
N์ด ๋ค ๊ณต์ ์์น๋ฅผ ์๊ณ ์ถ์ ๊ฒฝ์ฐ
๊ณต์ ์๋๊ฐ ์ผ๋ง๋ ๋๋์ง ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ํ์ ์๋๊น์ง ํฌํจํด์ ๋ฏธ๋ ์ํ๋ฅผ ์์ธกํ๊ณ ์ถ์ ๊ฒฝ์ฐ
์ ์์ ์์๋ 2์ด ํ ๊ณต์ ๋ฌผ๋ฆฌ ๊ฐ์ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ต๋๋ค.
GetCFrameAtTime(): ํด๋น ์์ ์ ์์น์ ํ์ GetLinearVelocityAtTime(): ํด๋น ์์ ์ ์ด๋ ์๋ ๋ฐฉํฅ๊ณผ ํฌ๊ธฐGetSpeedAtTime(): ํด๋น ์์ ์ ์๋ ฅ๋ง ์ซ์๋ก ํ์ธGetAngularVelocityAtTime(): ํด๋น ์์ ์ ํ์ ์๋ ํ์ธ
์ฆ, SimulationBall์ ๋จ์ํ ๊ณต์ ์ฌ์ํ๋ ๊ฒ๋ฟ ์๋๋ผ, ๋ฏธ๋ ์์ ์ ์์น์ ์๋, ํ์ ๊น์ง ๋ฏธ๋ฆฌ ์กฐํํ ์ ์์ต๋๋ค.
์ด๋๋ Simulate() ์งํ ๋ฐ๋ก ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ํผํ๊ณ , task.wait()๋ก ์ ์ ๋๊ธฐํ ๋ค ์กฐํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ํ CheckTime์ด ํ์ฌ ์๋ฎฌ๋ ์ด์
๋ฒ์๋ฅผ ๋์ด์๋ฉด ๊ธฐ๋ํ ๊ฐ์ ์ป์ง ๋ชปํ ์ ์์ผ๋ฏ๋ก, Simsteps ร DeltaTime๊ฐ ์กฐํํ๋ ค๋ ์๊ฐ๋ณด๋ค ์ถฉ๋ถํ ํฌ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์ฃผ์์ฌํญ
SimulationBall์ด ๋ฒฝ ๋๋ ๋ฐ๋ฅ๊ณผ ์ถฉ๋ํ๋ ค๋ฉด, ํด๋น ๋ฒฝ/๋ฐ๋ฅ์ ์ ์ฉ๋ Collision Profile์ด SimulationBall์ BallTraceChannel์ ๋ํด Block์ผ๋ก ์๋ตํ๋๋ก ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
Simulate()๋ ์ฆ์ ์๋ฃ๋์ง ์์ผ๋ฉฐ ๋ด๋ถ์ ์ผ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ ์กฐํ ์ ์task.wait()๋ก ์ ์ ๋๊ธฐํด์ผ ํฉ๋๋ค.๊ณต์ ์ฌ์ํ๊ธฐ ์ ์ ๋จผ์ ์๋ฎฌ๋ ์ด์ ์ ์คํํด์ผ ํฉ๋๋ค.
์๋ ๊ฐ์ด ๋๋ฌด ์์ผ๋ฉด ๊ณต์ด ๊ฑฐ์ ์์ง์ด์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค.
ํ ์คํธ ์ค์๋
EnablePathMarker๋ฅผ ์ผ ๋๋ ๊ฒ์ด ํ์ธ์ ๋์์ด ๋ฉ๋๋ค.
์ฐธ๊ณ ๋ฌธ์
SimulationBallBallSimParamsLast updated