Tanks #1
๐คref.
โจUnity info
๋ณธ ํํ ๋ฆฌ์ผ ๋ฌธ์์ ์ ๋ํฐ ๋ฒ์ ์ 5.2 v์ด๋, 2021.3.8f1 v์ผ๋ก ์ค์ต ํ ๊ฒ์๊ธ์ ์์ฑํ์์ต๋๋ค.
โ๏ธScene Setup
1. Layout๊ณผ Scene ์ค์
๊ฐ view๋ฅผ ํ๋์ ๋ณผ ์ ์๋๋ก Layout์ 2 by 3์ผ๋ก ์ง์ ํ๋ค. ๋ง๋ถ์ฌ Inspector view์ ์์น์ console view๋ฅผ ์ถ๊ฐํด ์ฃผ์๋ค. Hierarchy view์ Main Camera์ Directional Light๊ฐ ๊ธฐ๋ณธ ์ค๋ธ์ ํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํฅํ ์ถ๊ฐํ Level ํ๋ฆฌํน์ lighting setup์ด ๋์ด ์์ผ๋ฏ๋ก, directional light๋ ์ญ์ ํด ์ค๋ค.
๊ฒ์ ๋ฌด๋๊ฐ ๋ LevelArt ํ๋ฆฌํน
โ๏ธ ๋จธํฐ๋ฆฌ์ผ ๋ ๋
LevelArt ํ๋ฆฌํน์ Hierarchy view๋ก ์ํฌํธํ์ ๋ ํ๋ฆฌํน์ ๋จธํฐ๋ฆฌ์ผ์ด ๋ถํ์์ผ๋ก ๋ณํ๋ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
ํ๋ก์ ํธ ์์ฑ ์ URP Core์ ์ ํํ๊ฑฐ๋, ๋ ๋๋ง ๊ณผ์ ์ ํ ๋ฒ ๋ ๊ฑฐ์น๋ฉด ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ผ๊ณ ํ๋ค. ํ๋ก์ ํธ๋ฅผ ๋ํดํธ ๋ ๋๋ก ์์ฑํ์ผ๋ฏ๋ก, ํ ํ๋ฆฟ์ URP๋ก ๋ณ๊ฒฝํ๋ ๋จธํฐ๋ฆฌ์ผ์ด ์ ์์ ์ผ๋ก ๋ ๋๋์๋ค.
๊ทธ๋๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๋๋ค๋ฉด, [Window] -> [Rendering] -> [Render Pipeline Converter] -> [Built-in to URP]๋ฅผ ์ ํํ ํ Material Upgrade๋ฅผ ์ฒดํฌํด ์ ์ ์ convertํด๋ณด์.
Unity Doc ๋ ๋ ํ์ดํ๋ผ์ธ
- ๋ ๋ ํ์ดํ๋ผ์ธ ์ ๋ฆฌ
2. Lighting
[Window] -> [Rendering] -> [Lighting]์ ํตํด ์ค์ ํ ์ ์๋ค.
Light ์ ํ ์ ๋จ๋ ํจ๋
Auto Generate์ ์ฒดํฌ ํ์๋ฅผ ํด์ ํด์ค๋ค. (์์ง์๋ง๋ค ๊ทธ๋ฆผ์ ๋ฑ์ ๋ค์ bakeํ๋ setup์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋์๋ค๊ณ ํ๋ค.)
- Auto Generate: Unity์ ์กฐ๋ช ์ ์๋์ผ๋ก ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ณ ์ฌ ๋ด์ ์ค๋ธ์ ํธ์ ํํ ํน์ ์์น๊ฐ ๋ฌ๋ผ์ง ๋๋ง๋ค ์ ๋ฐ์ดํธ
๋ณธ ํ๋ก์ ํธ์์๋ Realtime GI๋ง์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก Baked GI ์ต์ ์ ํด์ ํด๋๋ค. realtime lighting์ ์ฌ์ฉํ๋ฉด ํฌํ์ ๋ฐ์ฌํ ๋ Scene์ ๋ฐํ์ฃผ๋ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค.
์์ง์ด๋ ์ค๋ธ์ ํธ์ ๊ด์์ ํํํ๊ธฐ ์ํด Realtime Lighting์ ํ์ฑํํ์ง๋ง, ๋ฐํ์์ ํ๋ก๊ทธ๋จ์ ๊ณ์ฐ๋์ ์ค์ด๊ธฐ ์ํด Baked๋ ๋นํ์ฑํํด๋์!
- Realtime: ์์ง์ด๋ ๊ฐ์ฒด์๊ฒ ํฅํ๋ ์กฐ๋ช ์ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐ
- Baked: ์ฃผ๋ก ํ๊ฒฝ์ด๋ ์ ์ ์ค๋ธ์ ํธ์ ๊ฐ์ด ์์ง์ด์ง ์๋ ์ฌ๋ฌผ์ ๋ํ ์กฐ๋ช ์ ๋ฏธ๋ฆฌ ๊ณ์ฐ
- Mixed: Realtime๊ณผ Baked๋ฅผ ๊ฒฐํฉ
- ๋ฒ ์ดํฌ๋ ์กฐ๋ช ๋ณด๋ค ๋ง์ ๋ฐํ์ ๊ณ์ฐ, ์ค์๊ฐ ์กฐ๋ช ๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํ์
Directional Light ์ค๋ธ์ ํธ ์ธ์๋ ์กฐ๋ช ์ ์ป์ ์ ์๋ค ! Environment Lightingํ๋กํผํฐ์ Source๋ฅผ ์กฐ์ ํด ์ฃผ๋ณ๊ด์ ์กฐ์ ํด๋ณด์. ์ฃผ๋ณ๊ด ์กฐ์ ์ ๋ง์น๋ฉด Generate Lighting ๋ฒํผ์ ๋๋ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํด์ค๋ค.
- Source: ์ฃผ๋ณ๊ด. ์ฌ ์ ์ฒด์ ํผ์ ธ ์์ผ๋ ํน์ ์ค๋ธ์ ํธ๊ฐ ๊ด์์ง๊ฐ ๋์ง๋ ์์ (default: Skybox)
- Color: ๋ชจ๋ ์ฃผ๋ณ๊ด์ ๊ท ์ผํ ์์ ์ ์ฉ
- Gradient: ํ๋, ์งํ์ , ์ง๋ฉด์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ฃผ๋ณ๊ด์ ์ค์ ํ ํ ๋ธ๋ ๋
- Skybox: ์ฌ๋ฌ ๊ฐ๋์์ ๋น์ถ๋ ์ฃผ๋ณ๊ด, Gradient ๋ณด๋ค ์ ํํ ํจ๊ณผ
3. Camera Setup
Main Camera ์ค๋ธ์ ํธ์ ๊ธฐ๋ณธ position๊ฐ์ผ๋ก๋ LevelArt์ ๊ฑด๋ฌผ ๋ชจ๋ธ๋ง ๋ณผ ์ ์์ผ๋ฏ๋ก, Position๊ณผ Rotation์ ์กฐ์ ํด ํ ๋์ ๊ฒ์ ๋งต์ ํ์ธํ ์ ์๋๋ก ํ๋ค. ๋, ์นด๋ฉ๋ผ์ Projection ํ๋กํผํฐ๋ฅผ Projection์์ Orthographic์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๋ณ๊ฒฝ ํ Scene view์ Game view์์ ์ฐ๊ทธ๋ฌ์ง ํํ์ ํ๋ฉด ๋งต์ ํ์ธํ ์ ์๋ค !
์ ์ฐ๊ทธ๋ฌ์ง ์์ผ๋ฅผ ์ฌ์ฉํ๋ ?
zoom์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, ์๊ทผ๊ฐ์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ ํํ ์ขํ๊ณ ํํ์ด ๊ฐ๋ฅํ๋ค.
Projection: ์นด๋ฉ๋ผ์ ์๊ทผ ์๋ฎฌ๋ ์ด์ ์ฑ๋ฅ
Perspective: ์นด๋ฉ๋ผ์ ์๊ทผ๊ฐ์ ๊ทธ๋๋ก ์ ์ฉ
Orthographic: ์๊ทผ๊ฐ์ ๊ณ ๋ คํ์ง ์๊ณ ์ค๋ธ์ ํธ๋ฅผ ๊ท ์ผํ๊ฒ ๋ ๋๋ง
(๊ฑฐ๋ฆฌ์ ๋ฐ๋ฅธ scale์ ๋ณํ๊ฐ ์๋ค. Camera ์ค๋ธ์ ํธ์ zoom ํ๋กํผํฐ๋ฅผ ์กฐ์ ํด ํ์ธํ ์ ์๋ค.)
zoomout์ ํ์ ๊ฒฝ์ฐ, ์ฌ๋ฐฑ ํ๋ฉด์ ๊ทธ๋ผ๋ฐ์ด์ ์ด ๋ณด์ด๋ Skybox ๋์ ์ง์ ํ ์์ ๋ฐฐ๊ฒฝ์ด ๋ณด์ด๋๋ก camera ์ปดํฌ๋ํธ์ Background Type ํ๋กํผํฐ๋ฅผ Solid color( RGB: (80, 60, 50) )๋ก ๋ฐ๊พธ์ด์ค๋ค.
โ๏ธTank Creation & Control
1. Layers
Tank ์ค๋ธ์ ํธ์ Layer๋ฅผ Player๋ก ์ค์ ํ๋ค. ๋ ํ๋ ์ด์ด๊ฐ ์๋ก ๊ณต๊ฒฉํ ๋, ๊ฑด๋ฌผ์ด๋ ๋ ์ ์ ์ธํ ํฑํฌ๋ง ํญํ์ํฌ ์ ์๋๋ก ํ๋ค.
- Layer: ์นด๋ฉ๋ผ๊ฐ ์ผ๋ถ ์ฌ๋ง ๋ ๋๋งํ๊ฑฐ๋, ์ฝ๋ผ์ด๋๋ฅผ ์ ํ์ ์ผ๋ก ๋ฌด์ํ๊ธฐ ์ํด ์ฌ์ฉ
์์ ์ค๋ธ์ ํธ๋ค์ ๋ ์ด์ด ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ๋ฌป๋ ๋ฉ์์ง ์ฐฝ์ด ๋ํ๋๋ค. ํํ ๋ฆฌ์ผ์์๋ ํฑํฌ์ ๊ฐ์ฅ ๋ถ๋ชจ ์ค๋ธ์ ํธ์ธ ๋ถ๋ถ๋ง ์ถฉ๋ํ๋ฉด ๋๋ฏ๋ก, No, this object only
๋ฅผ ํด๋ฆญํด์ค๋ค.
2. Audio
๊ฒ์์ด ์งํ๋๋ ๋์, ํฑํฌ์ ์์ง์ ํญ์ ๋์ํ ๊ฒ์ด๋ฏ๋ก EngineIdle ํด๋ฆฝ์ ์ค์ ํ ํ, Loop ํ๋กํผํฐ๋ฅผ ์ฒดํฌํด์ค๋ค. ์ดํ ์ค๋์ค ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋ ์์ฑํ ํ, ์ค๋์ค ์์ค์ ์ฌ์ํ ํน์ ์ค๋์ค ํด๋ฆฝ์ ์๋ ค์ฃผ๊ธฐ ์ํด ์ฌ์ ์ฒดํฌ ๋ฐ์ค๋ฅผ ๋ชจ๋ ํด์ ํด์ค๋ค.
์ดํ ๊ฒ์ ๋งค๋์ ์ค๋ธ์ ํธ์ ์ํด์ ํฑํฌ๊ฐ ์์ฑ๋๋๋ก ํ๋ฆฌํนํํ๋ค. (Scene์ ๋จ์ ๊ฒ์ ์ค๋ธ์ ํธ๋ก ๋จ์์์ง ์๋๋ก ํ๋ค.) ํ๋ฆฌํน์ผ๋ก ์ฌ๋ฌ ๋์ ํฑํฌ๋ฅผ ์์ฑํด ๋ฉํฐ ํ๋ ์ด๊ฐ ๊ฐ๋ฅํ๋๋ก ํ ์ ์๋ค.
3. 3D Mesh
DustTrail ๋ชจ๋ธ์ ๋๋๊ทธํ์ ๋์ ์ ๋๋ฉ์ด์ ํจ๊ณผ
ํฑํฌ๊ฐ ์์ง์ผ ๋ ํฑํฌ ์ค๋ธ์ ํธ ์ฃผ๋ณ์ ๋จผ์ง๊ฐ ๋ ๋ฆฌ๋ ์ ๋๋ฉ์ด์ ์ด ๋ฐ์ํ๋๋ก DustTrail ๋ชจ๋ธ์ ์์ ์ค๋ธ์ ํธ๋ก ๋๋๊ทธํ๋ค.
Simulation Space ํ๋กํผํฐ๋ฅผ World๋ก ์ค์ ํ ํ, Emission์ Distance๋ก ์ง์ ํด ์ฃผ์ด ์ด๋๊ฑฐ๋ฆฌ๋ง๋ค ์ ์๊ฐ ๋ฐฉ์ถํ๋ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
Rate over Distance
: ํ ๋ฒ์ ์ด๋ํ ๋๋ง๋ค ๋ฐฉ์ถ๋๋ ์ ์์ ์
์ ์๋ค์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง์ size์ Lifetime.
Size over Lifetime
ํ๋กํผํฐ์์ ํ์ธํ ์ ์๋ค.
ํฑํฌ์ ํธ๋(๋ฐํด์ ์ด)๋ง๋ค ๋จผ์ง๊ฐ ๋ ๋ฆฌ๋ ์ ๋๋ฉ์ด์
์ด ๋ฐ์ํด์ผ ํ๋ฏ๋ก, DustTrail์ ๋ณต์ฌํด LeftDustTrail๊ณผ RightDustTrail์ ๋ง๋ค์ด์ค๋ค. (^D
)
- LeftDustTrail์ Position: ( -0.5, 0, -0.75 )
- RightDustTrail์ Position: ( 0.5, 0, -0.75 )
4. TankMovement.cs
์ค๋์ค ์ค์ , ์ ํ ์ด๋, turn ์ค์
m_
: ๋ฉค๋ฒ ๋ณ์.
- ๋๋๊ทธ์ค๋๋กญ์ด๋ ์๋ํฐ์์ ๊ฒ์์ ๋์์ธํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ๋ณ์๋ ๋๋ถ๋ถ
private
์ผ๋ก ์ ์ธํ๋ค. (๋จ์ํ ๊ธฐ๋ฅ์ฑ์ ์ํด ๋ง๋ค์ด์ง)public
์ผ๋ก ์ ์ธ๋๋ ๊ฒฝ์ฐ: ์๋, ํ์ ์๋, ๊ฒ์ ๋ด ๋์ ์กฐ์
m_PlayerNumber
: ํ๋ ์ด์ด ๋ฒํธ.- tank manager๊ฐ ์ผ๋ง๋ ๋ง์ ํฑํฌ๊ฐ ์๊ณ , ์ด๋ค ์กฐ์์ด ์ด๋ค ํฑํฌ์ ํ ๋น๋๋ ๊ฒ์ธ์ง ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ
- ๋ง์ฝ tank1์ด ์ด๊ฒผ์ ๊ฒฝ์ฐ UI์ ํ๋ ์ด์ด 1์ด ์ด๊ฒผ์์ ์๋ฆฌ๊ฑฐ๋,
1
์ ํด๋นํ๋ ์ ๋ ฅ ํค๋ค์ด tank1์ ์กฐ์ข- Input Manager์์๋ ์์ง์์ ์กฐ์ํ ์ ์์ผ๋, ํ๋ ์ด์ด ๋ฒํธ๋ฅผ ์ง์ ํ๋ฉด ์๋ ๋ฐฉ์ ๊ฐ๋ตํ ๊ฐ๋ฅ
m_Speed
: ํฑํฌ์ ์๋m_TurnSpeed
: ์๊ฐ์ ๋ฐ๋ฅธ ํ์ ๊ฐ๋m_MovementAudio
: ์์ง ๋์ ์๋ฆฌ๋ฅผ ๋ํ๋ด๋ ์ค๋์ค ์์ค- ์ํฉ๋ง๋ค ๋ณ์์ ๋ค๋ฅธ ์ค๋์ค ์์ค๋ฅผ ํ ๋นํ์ฌ ์ด์ ํ ๋์ ์ ์งํ ๋ ๋ค๋ฅธ ํด๋ฆฝ ์ฌ์ ๊ฐ๋ฅ
m_PitchRange
: ์ ๋์ด ๋ฒ์. ์ดํ ๋๋ค๊ฐ์ ๋ฃ์ด ํฑํฌ๋ง๋ค ์์ง ์๋ฆฌ๋ฅผ ๋ค๋ฅด๊ฒ ํจ
- Input Manager์ ์
๋ ฅ ํค๊ฐ์ ๋ฌธ์์ด์ผ๋ก ๋ฐ๊ธฐ ์ํด
m_MovementAxisName
๊ณผm_TurnAxisName
๋ชจ๋ String์ผ๋ก ์ ์ธm_MovementAxisName
์ํ axism_TurnAxisName
: ์์ง axis
m_Rigidbody
: ํฑํฌ์ ์ฐจ์ฒด๋ฅผ ์์ง์ด๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉm_MovementInputValue
,m_TurnInputValue
: ์ค์ ๋ก ์ ๋ ฅ์ ๋ฐ์์ ๋์ ๊ฐ- ๋ณ์์ ์ ๋ ฅ๊ฐ์ ์ ์ฅํ๊ณ ์ํ๋ ๋ฉ์๋์ ํ์ฉ ๊ฐ๋ฅ
m_OriginalPitch
: ์๋ณธ ์๋ฆฌ์ ๋๋ฎ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ด ๋ณ๊ฒฝ- ๋๋ฎ์ด ๊ธฐ์ค์ด ํ์ฌ pitch๊ฐ ๋๋ฉด ์์ง ํจ๊ณผ์์ด ๊ณ์ ๋์์ง ์ ์์
4.1. Awake()
OnEnable()
: ๊ฒ์ ์์ ํAwake()
์Update()
๋ฉ์๋ ์ฌ์ด์ ํธ์ถ.isKinematic = false
: ํฑํฌ์ rigidbody๊ฐ Kinematic์ ๋ฐ๋ฅด์ง ์๋๋ก ํจ- isKinematic: true์ ๊ฐ์ฒด๊ฐ ์ด๋ํ์ ์ํฅ๋ง์ ๋ฐ์. ๋ฌผ๋ฆฌํ ๊ณ์ฐ ๋ฌด์
- ๊ฐ์ฒด๊ฐ ์ด๋ํ์ ๋ฐ๋ฅผ ๊ฒฝ์ฐ ์ด๋ํ๋๋ฐ ๋ฌธ์ ๋ฐ์
OnDisable()
: ๊ฒ์์ ์ข ๋ฃํ ๋ ํธ์ถ.isKinematic = true
: ํฑํฌ๊ฐ ํญ๋ฐํ ๋๋(๊ฒ์ ์ข ๋ฃ) ๋์ด์ ํฑํฌ์ ํ์ด ๊ฐํด์ง์ง ์๋๋ก ์ด๋ํ ์ฌ์ฉ
4.2. Start(), Update()
m_MovementAxisName
,m_TurnAxisName
: ๊ฐ๊ฐ ์ํ, ์์ง ์ด๋ ์ถ์m_PlayerNumber
๋ณ์๋ฅผ ๊ฒฐํฉํด Input Manager๊ฐ ์ด๋ ํ๋ ์ด์ด์ ์ด๋๊ฐ์ธ์ง ํ์ธํ ์ ์๋๋ก ํจm_OriginalPitch
: ์ด๋ ํจ๊ณผ์์ ์๋ณธ ์์ญ๋ ์ ์ฅ
Audio Source ์ปดํฌ๋ํธ์ ํ๋กํผํฐ (Pitch)
์ค๋์ค ํด๋ฆฝ์ด ์คํฌ๋ฆฝํธ์ ํ ๋น๋๋ฉด Pitch ๊ฐ์ ์ป๊ฑฐ๋ ์กฐ์ํ ์ ์๋ค!
Update()
: ๋ชจ๋ ํ๋ ์ ์คํInput.GetAxis()
: Input Manager์์ ์ ๋ ฅ๊ฐ ํ ๋น- ํ๋ ์ update๋ง๋ค ์
๋ ฅ๊ฐ์ด ๊ณ์ฐ๋๋ฏ๋ก,
Update()
๋ฉ์๋์์ Input์ ๋ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฐ๋์งํจ - ์ธ์๋ ์ผ๋ฐ์ ์ผ๋ก String ๋ณ์
- ํ๋ ์ update๋ง๋ค ์
๋ ฅ๊ฐ์ด ๊ณ์ฐ๋๋ฏ๋ก,
EngineAudio();
๋ชจ๋ ํ๋ ์๋ง๋ค ์ฌ๋ฐ๋ฅธ ์ค๋์ค๋ฅผ ์ฌ์ํ๋๋ก ์ ๋ฐ์ดํธ์์ ์ ์ธ
4.3. EngineAudio()
- ์กฐ๊ฑด๋ฌธ
if()
- ์ํ, ์์ง ์ด๋๊ฐ์ด ๋ชจ๋ $\vert 0.1 \vert$ ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์์ง์ด์ง ์๋ ๊ฒ์ผ๋ก ํ๋จ
MovementAudio.clip
์ดEngineDriving
์ด๋ผ๋ฉดEngineIdling
์ผ๋ก ๋ณ๊ฒฝ- Audio pitch๊ฐ์
OriginalPitch
์ ๊ธฐ๋ฐํPitchRange
๋ด์์ Random์ผ๋ก ์ ์ฅ
- else๋ฌธ์์๋ Audio clip์ Idle์์ Driving์ผ๋ก ๋ณ๊ฒฝ
4.4. FixedUpdate()
FixedUpdate()
: ๋ ๋๋ง๋ ๋ชจ๋ ํ๋ ์์ ์คํํ์ง ์๊ณ , ์คํ ์ค์ธ ๋ชจ๋ ๋ฌผ๋ฆฌ step๋ค์ ์คํ- ์ผ๋ฐ์ ์ผ๋ก ๋ฌผ๋ฆฌ ๊ธฐ๋ฅ(์ด๋, ํ์ ๋ฑ)์ FixedUpdate ํจ์์ ํธ์ถ
Move()
- ํฑํฌ๊ฐ ์์ง์ผ Vector ์ขํ ๊ณ์ฐ ๋ฉ์๋
transform.forward * m_MovementInputValue * m_Speed * Time.deltaTime
- ์ ๋ฐฉํฅ ๋ฒกํฐ์ ์
๋ ฅ๊ฐ์ ๊ณฑํด ์
๋ ฅ๋์ ๋ฐ๋ผ ๋ฒกํฐ์ ํฌ๊ธฐ ์กฐ์
- ์ ๋ ฅ๊ฐ์ด $1$์ผ ๊ฒฝ์ฐ ์์ผ๋ก ์ด๋, $-1$์ผ ๊ฒฝ์ฐ ๋ค๋ก ์ด๋
- ํ๋ ์๋ง๋ค ์ด๋ํ ์๋์ 1ํ๋ ์ ๋น ์คํ ์๊ฐ์ ๊ณฑํด ํ๋ ์ ์ฒ๋ฆฌ ์๊ฐ๊ณผ ์๊ด์์ด ์ด๋ ์๋๋ฅผ ์ ์งํ ์ ์๋๋ก ๊ณ์ฐ
- ์ ๋ฐฉํฅ ๋ฒกํฐ์ ์
๋ ฅ๊ฐ์ ๊ณฑํด ์
๋ ฅ๋์ ๋ฐ๋ผ ๋ฒกํฐ์ ํฌ๊ธฐ ์กฐ์
MovePosition()
- Rigidbody ๊ฐ์ฒด์ ์์ง์์ ์ ์ฉํ ๊ฒ์ด๋ฏ๋ก ํ์ฌ Rigidbody๊ฐ๊ณผ ์ด๋๊ฐ์ ๊ฐ์ฐ
Turn()
m_TurnInputValue * m_TurnSpeed * Time.deltaTime
: ํ๋ ์ ๋น ํ์ ๋ ๊ณ์ฐ- ํ์ ๋์ ์๊ธฐ ์ํด vector ๋์ float ์ฌ์ฉ
Quaternion.Euler
: ์ ๋ํฐ์์ ํ์ ์ ๋ค๋ฃจ๋ ๊ฐ๋๊ณ. float๊ฐ์ ๋ณํ์์ผ ์ฃผ์ด์ผ ํจ- y์ถ์ ํ์ ๋ ์ง์
MoveRotation()
- ๊ฐ์ฒด์ rotation๊ฐ์
turnRotation
์ ๊ณฑํด์ฃผ์ด ํ์ ์ ๋๋ฅผ ์ ์ฉ
- ๊ฐ์ฒด์ rotation๊ฐ์
y์ถ rotation์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ, ํฑํฌ๊ฐ ์์ฐ์ค๋ฌ์ด ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ค.
5. ์คํฌ๋ฆฝํธ ์ ์ฉ
public ๋ณ์(ํ๋กํผํฐ)์ ํด๋นํ๋ ๊ฐ์ ๋์ ํด Tank๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์ํ ์ ์๋๋ก ์์ฑํ๋ค.
๊ฒฐ๊ณผ ํ๋ฉด