๐ Unity Car Survival Prototype — ๋ฐ์ดํฐ·์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฐจ๋ ์์กด ์ํ ๋ง๋ค๊ธฐ
์๋์ฐจ์ ๋ฌด๊ธฐ๋ฅผ ์ฅ์ฐฉํด ๋ชฐ๋ ค์ค๋ ์ ์ ์ฒ์นํ๋ฉฐ ์คํ ์ด์ง๋ฅผ ๋ฒํฐ๋ ํ๋ค์ด ํ๋กํ ํ์ ์ ๋๋ค.
์ฑ๊ธํค ๋งค๋์ , ๋ฌด๊ธฐ/์ ๊ทธ๋ ์ด๋, ์คํ ์ด์ง/์คํฐ, ๋ฆฌ์คํฐ, UI·์ฌ์ด๋๊น์ง ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๊ตฌํํ์ด์.
๐งพ ๊ฐ์
- ์์ฝ: ScriptableObject(WeaponData) + ์ด๋ฒคํธ ๊ธฐ๋ฐ(UI/์ํ) + ์ ๋ค๋ฆญ ์ฑ๊ธํค ๋งค๋์ ๋ก ๋น ๋ฅด๊ฒ ๊ธฐ๋ฅ์ ๋ถ์ฌ ๋๊ฐ ์ ์๋ ๊ตฌ์กฐ.
- ํต์ฌ ์์: ์๋ ์ฃผํ(CarAI), ์๋ ์ฌ๊ฒฉ(BaseWeapon), ์ ๊ทธ๋ ์ด๋(WeaponSlotsManager), Respawn, ์คํ ์ด์ง ํ์ด๋จธ/์คํฐ.
- ๋์ ๋ ์: ์๋ฐ์ด๋ฒ๋ผ์ดํฌ/ํ๋ค์ด ํ๋กํ ํ์ ์ ๋นจ๋ฆฌ ๋ง๋ค๊ณ ์ถ์ ๋ถ, ์ํคํ ์ฒ ์ฐธ๊ณ ๊ฐ ํ์ํ ๋ถ.
๐ฎ ๊ฒ์ ์๊ฐ
์ฐจ๋์ ์กฐ์(AI ์ฃผํ)ํ๋ฉฐ ์๊ฐ์ด ์ง๋ ์๋ก ๊ฐํด์ง๋ ์ ์ ์๋ํ๋ ํ๋ค์ด ์์กด ์ํ
์
๋๋ค.
์ฒ์น ๋ณด์์ผ๋ก ๊ณจ๋/๊ฒฝํ์น๋ฅผ ๋ชจ์ ๋ฌด๊ธฐ๋ฅผ ์
๊ทธ๋ ์ด๋ํ๊ณ , ์๊ธฐ ์ํฉ์์๋ Respawn์ผ๋ก ํธ๋ ์ ์ต๊ทผ์ ๋
ธ๋์ ๋ณต๊ทํด ํ๋ฆ์ ์ด์ด๊ฐ๋๋ค.
- ๋ชฉํ: ๊ฐ๋ฅํ ์ค๋ ์์กดํ๋ฉฐ Stage๋ฅผ ์ฌ๋ฆฌ๊ณ ๋ ๊ฐํ ์จ์ด๋ธ๋ฅผ ๋ฒํฐ๊ธฐ
- ๋ฃจํ: ์ฒ์น ๋ณด์ → ๊ณจ๋/EXP → ์ ๊ทธ๋ ์ด๋ ํจ๋์์ ๋ ๋ฒจ์ /ํฐ์ด์
๐ผ๏ธ ํ๋ ์ด ์์ & GIF
โจ Features
- Generic Singleton: ClassName.Instance๋ก ์ ์ญ ์ ๊ทผ(์ค๋ณต ์์ฑ ๋ฐฉ์ง/์ ์์ฑ ๋ถํ์)
- ๋ฌด๊ธฐ ์์คํ (SO): WeaponData๋ก ํผํด/์ฌ๊ฑฐ๋ฆฌ/๋ฐ์ฌ ์๋/์ฟจํ์/ํฐ์ด ์ ์ → BaseWeapon ๊ณตํต ํ์ดํ๋ผ์ธ + CannonWeapon ํ์
- ์ ๊ทธ๋ ์ด๋ & ์ฌ๋กฏ: WeaponSlotsManager๊ฐ ์ฌ๋กฏ mount์ ๋ฌด๊ธฐ๋ฅผ ์คํฐ/๊ต์ฒดํ๊ณ ๋ ๋ฒจ·ํฐ์ด ์ ๋ก์ง ์ฒ๋ฆฌ, UpgradePanelController๋ก UI ์ฐ๋
- ์คํ ์ด์ง & ์คํฐ: StageManager ํ์ด๋จธ๋ก Stage ์์น, EnemyManager๊ฐ NavMesh ์์ญ์ ์ ์คํฐ(์ต๋ ์์กด ์ ์ ์ง)
- Respawn ๋ฒํผ: “๊ฐ์ฅ ๊ฐ๊น์ด ํธ๋ ๋ ธ๋”๋ก ์ฆ์ ๋ณต๊ท(์๋·์จ์ดํฌ์ธํธ ๋ฆฌ์ )
- UI/HUD: ์ฒด๋ ฅ/๊ฒฝํ์น/๋ ๋ฒจ, ๊ณจ๋, ์๋(km/h), ์ ๋จธ๋ฆฌ ์ HP ๋น๋ณด๋
- ์ฌ์ด๋: BGM + ํ๋ง ๊ธฐ๋ฐ SFX + ์ฌ๋ผ์ด๋๋ก ๋ณผ๋ฅจ ์ ์ด
- ์ผ์ & ์ด๋ ์ ์ด: ์ ๋ฐฉ ์ผ์๋ก ์ ์ง/์ฌ๊ฐ์, ๋ฐํ์ ํ๋ผ๋ฏธํฐ ํ๋ ์ํ ์ ๊ณต
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ(์์ฝ)
02. Scripts
โโ Base
โ โโ BaseCondition.cs
โ โโ BaseWeapon.cs
โ โโ Singleton.cs
โโ Camera
โ โโ FollowCamera.cs
โโ Controller
โ โโ UpgradePanelController.cs
โโ Enemy
โ โโ AI
โ โ โโ EnemyAI.cs
โ โโ Attack
โ โ โโ EnemyAttack.cs
โ โ โโ EnemyCondition.cs
โ โโ Interface
โ โโ IDamageable.cs
โโ Manager
โ โโ Enemy
โ โ โโ EnemyManager.cs
โ โโ Player
โ โ โโ PlayerManager.cs
โ โ โโ RespawnManager.cs
โ โโ SkillManager.cs
โ โโ CurrencyManager.cs
โ โโ Weapon
โ โ โโ WeaponSlotsManager.cs
โ โโ GameManager.cs
โ โโ SoundManager.cs
โ โโ StageManager.cs
โโ Player
โ โโ Skill
โ โ โโ AttackController.cs (partial)
โ โ โโ AttackController.Heal.cs (partial)
โ โ โโ AttackController.SpinAttack.cs (partial)
โ โโ CarAI.cs
โ โโ PlayerCondition.cs
โโ Scriptable
โ โโ WeaponData.cs
โโ UI
โ โโ Enemy
โ โ โโ EnemyHealthUI.cs
โ โโ Player
โ โ โโ CarSpeedUI.cs
โ โ โโ GoldUI.cs
โ โโ UIConditionBinder.cs
โโ Util
โ โโ controllingCarAI.cs
โ โโ SensorManager.cs
โโ Weapon
โโ Projectile
โ โโ SimpleProjectile.cs
โโ CannonWeapon.cs
๐งฑ ์ค๊ณ/๋์์ธ ํจํด
- Singleton(์ ๋ค๋ฆญ): ๋งค๋์ ์ ์ญ ์ ๊ทผ/์ค๋ณต ์์ฑ ๋ฐฉ์ง
- Observer(์ด๋ฒคํธ ๊ธฐ๋ฐ): PlayerCondition ์ด๋ฒคํธ → UI๊ฐ ๊ตฌ๋ ํด ์ฆ์ ๊ฐฑ์
- Strategy(๋ฌด๊ธฐ ํ์ฅ): BaseWeapon ๊ณตํต ํ์ดํ๋ผ์ธ + ํ์ ๋ฌด๊ธฐ
- Interface(๊ฒฐํฉ๋↓): IDamageable๋ก ํผํด ์ฒ๋ฆฌ๋ฅผ ํต์ผ
- Partial Class: AttackController๋ฅผ Spin/Heal๋ก ๋ถ๋ฆฌํด ๊ด์ฌ์ฌ ์ ๋ฆฌ
- Data-Driven & Composition: ScriptableObject·์ปดํฌ๋ํธ ์กฐํฉ ์ค์ฌ ์ค๊ณ
๐งฐ ์ฌ์ฉ ๊ธฐ์ & ์์คํ
- NavMesh: CarAI ์จ์ดํฌ์ธํธ ์ค๋ , EnemyManager ์คํฐ ์ํ๋ง
- WheelCollider + Rigidbody: GetWorldPose๋ก ๋ฉ์ ๋๊ธฐํ, ๋ชจํฐ/๋ธ๋ ์ดํฌ/์กฐํฅ ์ ์ด
- Catmull-Rom Spline: ํธ๋ ๋ ธ๋ ์ฌ์ด ๋ถ๋๋ฌ์ด ๊ฒฝ๋ก ์์ฑ(๋ฃจํ/์ํ ์ ์ต์ )
- Physics Overlap/Trigger: Spin(OverlapSphere), ํฌ์ฌ์ฒด/๊ทผ์ ์ถฉ๋ → IDamageable
- TMP + UGUI: HUD/ํจ๋ ๊ตฌ์ฑ
๐ ํต์ฌ ๋์ ์์ฝ
- CarAI: trackNodes → ์คํ๋ผ์ธ ์จ์ดํฌ์ธํธ ์์ฑ → ๋ฐํด/์กฐํฅ/๊ฐ์ ๊ฐฑ์ , carFront ๊ธฐ์ค ๋๋ฌ ํ์ , CurrentSpeedKmh ์ ๊ณต
- Respawn: ํ์ฌ ์์น(๊ฐ๋ฅํ๋ฉด carFront) ๊ธฐ์ค ์ต๊ทผ์ ๋ ธ๋ ํ์ → CarAI.TeleportToNode() → ์๋·๊ฐ์๋ ์ด๊ธฐํ + ์จ์ดํฌ์ธํธ ๋ฆฌ์
- ๋ฌด๊ธฐ/์ ๊ทธ๋ ์ด๋: ์ฌ๋กฏ mount์ ํ๋ฆฌํน ์คํฐ, WeaponData๋ก ๋ ๋ฒจ์ /ํฐ์ด์ , UI ๋ฐ์
- ์คํ ์ด์ง/์คํฐ: ํ์ด๋จธ๋ก Stage ์์น, NavMesh ์์ญ ๋ด ์ต๋ ์์กด ์ ์ ์ง
- UI: ํ๋ ์ด์ด HUD + ์ HP ๋น๋ณด๋
๐น ํ๋ ์ด ๋ฐฉ๋ฒ
- ์์: ํ๋ ์ดํ๋ฉด StageManager๊ฐ ํ์ด๋จธ๋ฅผ ๋๋ฆฌ๋ฉฐ Stage๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์์น
- ์ด๋: CarAI๊ฐ trackNodes๋ฅผ ๋ฐ๋ผ ์ฃผํ(๋ฃจํ/๋๋ค/์ปค์คํ ๊ฒฝ๋ก). ์ ๋ฐฉ ์ผ์ ์ ์ด ์ ์ผ์ ์ ์ง ํ ์ฌ์ถ๋ฐ
- ์ ํฌ: WeaponSlotsManager๊ฐ ์ฌ๋กฏ mount์ ๋ฌด๊ธฐ ์คํฐ → BaseWeapon ํ์ดํ๋ผ์ธ์ผ๋ก ์๋ ์กฐ์ค·๋ฐ์ฌ
- ์ฑ์ฅ: ์ฒ์น ๋ณด์์ผ๋ก ๊ณจ๋/EXP ํ๋ → ์ ๊ทธ๋ ์ด๋ ํจ๋์์ ๋ ๋ฒจ์ /ํฐ์ด์
- ๋ณต๊ตฌ: ๊ธธ ์ดํ ์ Respawn์ผ๋ก ์ต๊ทผ์ ํธ๋ ๋ ธ๋ ๋ณต๊ท
๊ธฐ๋ณธ ํ๋ฆ์ AI ์ฃผํ + ์๋ ์ฌ๊ฒฉ. ์ ๋ ฅํ ์กฐ์์ ์ถ๊ฐํ๊ณ ์ถ์ผ๋ฉด ๋ณ๋ ์ปจํธ๋กค๋ฌ๋ก ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.
๐งช ์ฌ ์ธํ ์ฒดํฌ๋ฆฌ์คํธ
- ์ฑ๊ธํค ๋งค๋์ ๋ฐฐ์น: Game/Stage/Enemy/Sound/Currency/Skill/WeaponSlots/PlayerManager
- ์ฐจ๋: CarAI + ๋ฐํด(์ฝ๋ผ์ด๋/๋ฉ์) + carFront ์ง์ , trackNodes ๋ฑ๋ก
- ๋ฌด๊ธฐ: WeaponData ์์ฑ → ์ฌ๋กฏ mount์ ์ฐ๊ฒฐ(์์ ์ ์๋ ์คํฐ)
- UI: ์ฌ๋ผ์ด๋/ํ ์คํธ๋ฅผ ์ธ์คํํฐ๋ก ๋ฐ์ธ๋ฉ
- Respawn ๋ฒํผ: RespawnManager.RespawnToNearestTrackNode() OnClick
- NavMesh: ์คํฐ ์์ญ/ํธ๋ ์ฃผ๋ณ ๋ฒ ์ดํฌ
๐งฏ Troubleshooting (Deep Dive)
์ ๋ฐ์ํ๋๊ฐ → ์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ → ์ฌ๋ฐ ๋ฐฉ์ง๊น์ง ์ค์ ๋ก ๊ฒช์๋ ์ด์ ์ค์ฌ์ผ๋ก ์ ๋ฆฌ.
1) ์์ฑ์/ํ๋ ์ด๊ธฐํ์์ FindObjectsOfType/Singleton.Instance ํธ์ถ
ํ์
UIConditionBinder๊ฐ ์์ฑ์/ํ๋ ์ด๊ธฐํ ํ์ด๋ฐ์ Singleton.Instance๋ฅผ ์ฐธ์กฐํ๋ฉด์ UnityException ๋ฐ์.
์์ธ(Why)
MonoBehaviour๋ ์์ฑ์/ํ๋ ์ด๊ธฐํ ์์ ์ ์ฌ ์ค๋ธ์ ํธ๊ฐ ์ค๋น๋์ง ์์. ์ด ํ์ด๋ฐ์ FindObjectsOfType/Instance ์ ๊ทผ์ ๊ธ๊ธฐ.
ํด๊ฒฐ(How)
- ์ฐธ์กฐ ํ๋์ Awake/Start, ์ด๋ฒคํธ ๊ตฌ๋ ์ OnEnable, ํด์ ๋ OnDisable.
- ๊ฐ๋ฅํ๋ฉด [SerializeField] ํ ์ธ์คํํฐ์์ ์๋ ๋ฐ์ธ๋ฉ.
์ฌ๋ฐ ๋ฐฉ์ง(Prevent)
- ํ ๊ท์น: “ํ๋ ์ด๊ธฐํ/์์ฑ์์์ Singleton.Instance ๊ธ์ง”
- ์ฝ๋๋ฆฌ๋ทฐ ์ฒดํฌ ํญ๋ชฉ์ ์ถ๊ฐ.
2) PlayerManager.carTransform ๋ฏธํ ๋น์ผ๋ก Respawn ๋ฒํผ NullReference/UnassignedReference
ํ์
๋ฒํผ ํด๋ฆญ ์ RespawnManager๊ฐ carTransform ์ ๊ทผํ๋ค ์์ธ.
์์ธ
- PlayerManager.Awake ์คํ ์์ ์ง์ฐ, ๋๋ ์ธ์คํํฐ ๋ฏธ๋ฐ์ธ๋ฉ.
- ์ฌ ํ์ฑ/๋นํ์ฑ ์์์ ๋ฐ๋ฅธ ํ์ด๋ฐ ์ด์.
ํด๊ฒฐ
- RespawnManager.ResolveRefs(): PlayerManager → ์ฌ ๊ฒ์ → car.transform ์์ผ๋ก ์์ฒด ๋ณต๊ตฌ ๋ก์ง ์ถ๊ฐ.
- Script Execution Order๋ก PlayerManager.Awake ์ ํ.
์ฌ๋ฐ ๋ฐฉ์ง
- ํต์ฌ ์ฐธ์กฐ๋ ์ธ์คํํฐ ๋ช ์ ๋ฐ์ธ๋ฉ ์ฐ์ .
- ๋ฐํ์์์๋ ํ ๋ฒ ๋ ๋ ๊ฐ๋.
3) UI OnEnable์์ ์ฆ์ SFX → SoundManager NRE
ํ์
UpgradePanelController.OnEnable() ๋ด PlaySfx() ํธ์ถ ์ NRE.
์์ธ
์ฌ์ด๋ ํ/์ค๋์ค์์ค๊ฐ ์์ง ์ด๊ธฐํ๋์ง ์์ ํ์ด๋ฐ์ ํธ์ถ.
ํด๊ฒฐ
- SoundManager.Awake()์์ ํ ํ์คํ ์ด๊ธฐํ.
์ฌ๋ฐ ๋ฐฉ์ง
- ๊ฐ์ด๋: “UI์ OnEnable์์ ์ฆ์ ์ค๋์ค ์ฌ์ ๊ธ์ง”
- ์ฌ ๋ถํ ์์ ๋ฌธ์ํ.
4) BaseCondition ๋ณดํธ๋ ํ๋ ์ ๊ทผ(CS0122)
ํ์
EnemyHealthUI์์ BaseCondition.health/maxHealth ์ง์ ์ ๊ทผ ์ ์ ๊ทผ ์ ํ์ ์๋ฌ.
์์ธ
์บก์ํ ์๋ฐ: ์ธ๋ถ UI๊ฐ ๋ด๋ถ ์ํ๋ฅผ ์ง์ ์ฝ์ผ๋ ค ํจ.
ํด๊ฒฐ
- Public ํ๋กํผํฐ/์ด๋ฒคํธ๋ก ๋ ธ์ถ(Health, Health01, ๋ณ๊ฒฝ ์ด๋ฒคํธ).
- UI๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํด ์ฌ๋ผ์ด๋๋ง ์ ๋ฐ์ดํธ.
์ฌ๋ฐ ๋ฐฉ์ง
- ๊ท์น: “UI๋ ์ด๋ฒคํธ/ํ๋กํผํฐ๋ง ์ฌ์ฉ”.
5) ๋น๋ณด๋ HP UI ๋จ๋ฆผ/๋ค์งํ
ํ์
์นด๋ฉ๋ผ ํ์ ์ HP ์ฌ๋ผ์ด๋๊ฐ ์๊ฐ์ ์ผ๋ก ๋ค์งํ๊ฑฐ๋ ํ๋ค๋ฆผ.
์์ธ
Update ์์/์ถ ์ฒ๋ฆฌ ๋ฏธํก, LookAt์ด Z์ถ๊น์ง ๋ค์ง์.
ํด๊ฒฐ
void LateUpdate() {
var cam = Camera.main.transform;
Vector3 dir = cam.position - transform.position; dir.y = 0f; // ์ํ๋ง
if (dir.sqrMagnitude > 0.0001f)
transform.rotation = Quaternion.LookRotation(dir);
}
์ฌ๋ฐ ๋ฐฉ์ง
- ์๋ ์คํ์ด์ค UI๋ LateUpdate์์ ์์น/๋ฐฉํฅ ๊ฐฑ์ ๊ณ ์ .
6) ํฌ์ฌ์ฒด ์ํฉํธ ํ TrailRenderer/ํํฐํด ๋์
ํ์
์ถฉ๋ ์งํ ๋ณธ์ฒด ํ๊ดด ์ Trail/VFX๊ฐ ๊ฐ์ด ์ฌ๋ผ์ง๊ฑฐ๋, ๋ฐ๋๋ก ๊ณ ์ ์ค๋ธ์ ํธ๋ก ๋จ์.
์์ธ
Trail์ด ๋ณธ์ฒด์ ๋ถ์ ์ฑ ํ๊ดด๋๊ฑฐ๋, ๋ณ๋ ๋ผ์ดํ์ฌ์ดํด ๋ฏธ๊ด๋ฆฌ.
ํด๊ฒฐ
- ์ถฉ๋ ์ Trail์ detach → ๋ณ๋ ํ์ด๋จธ๋ก ์ ๊ฑฐ.
- Impact VFX๋ ํ๋ง ๋๋ Destroy(go, duration)๋ก ์ ๋ฆฌ.
์ฌ๋ฐ ๋ฐฉ์ง
- ๋ณธ์ฒด/ํธ๋ ์ผ/์ํฉํธ ๋ผ์ดํ์ฌ์ดํด ๋ถ๋ฆฌ ์์น.
7) NavMesh ์คํฐ ์ง์ ์ด ๋ฒฝ/๊ฒฝ๊ณ ๋ฐ์ผ๋ก ์ํ๋ง
ํ์
์ ์ด ๋ฒฝ ๋ด๋ถ/๊ฒฝ๊ณ ๋ฐ์์ ๋ฑ์ฅํ๊ฑฐ๋ ์ถ๋ฝ.
์์ธ
NavMesh.SamplePosition ๋ฐ๊ฒฝ ๊ณผ์, areaMask ๋ฏธ์ค์ .
ํด๊ฒฐ
- ํ๋ณด ์ง์ ์์ SamplePosition(point, out hit, **radius**, **areaMask**)๋ก ์ฌ์ ๋ฐ๊ฒฝ ์ ๊ณต.
- allowedAreaNames๋ก ๋ง์คํฌ ๋ช ์.
์ฌ๋ฐ ๋ฐฉ์ง
- ์คํฐ ์์ญ Gizmo/BoxCollider ์๊ฐํ, ๋ฐ๊ฒฝ/๋ง์คํฌ ํ๋ฆฌ์ ์ ์ง.
8) WheelCollider ์๊ฐ/๋ฌผ๋ฆฌ ๋ถ์ผ์น(ํ/๋ฐํ)
ํ์
์๋๊ฐ ์ค๋ฅด๊ฑฐ๋ ๊ฒฝ์ฌ๋ฉด์์ ๋ฐํด ๋ฉ์๊ฐ ๋จ๊ฑฐ๋ ์์๊ฐ ํ๋ค.
์์ธ
๋ฉ์ ๋๊ธฐํ๊ฐ Update์์ ์ด๋ค์ง, ๋ฌผ๋ฆฌ ํ์์คํ
/๋ณด๊ฐ ๋ถ์ผ์น.
ํด๊ฒฐ
- FixedUpdate์์ GetWorldPose(out pos, out rot)๋ก ๋ฉ์ ๋๊ธฐํ.
- Rigidbody Interpolate ์ฌ์ฉ, Fixed Timestep(๊ถ์ฅ 0.02s) ์ ๊ฒ.
์ฌ๋ฐ ๋ฐฉ์ง
- ์ฐจ๋ ๋น์ฃผ์ผ ๋๊ธฐํ๋ ํญ์ FixedUpdate.
9) ์ด๋ฒคํธ ์ค๋ณต ๊ตฌ๋ → UI ๋ ๋ฐฐ ๊ฐฑ์
ํ์
์ฌ ์ฌ๋ก๋/ํจ๋ ํ ๊ธ ํ HP/๊ณจ๋ ํ
์คํธ๊ฐ ์ค๋ณต ์
๋ฐ์ดํธ.
์์ธ
OnEnable์์ AddListener๋ง ํ๊ณ OnDisable ํด์ ๋๋ฝ.
ํด๊ฒฐ
- ๋ชจ๋ ๊ตฌ๋ ์ OnEnable ↔ OnDisable ํ์ด ๊ด๋ฆฌ.
- ํ์ ์ ๊ตฌ๋ ์ RemoveListener๋ก 1์ฐจ ์ฒญ์.
์ฌ๋ฐ ๋ฐฉ์ง
- ๋ฆฌ๋ทฐ ์ฒดํฌ๋ฆฌ์คํธ: “์ด๋ฒคํธ ๊ตฌ๋ ํด์ ํ๋?”
10) Stage ํ์ด๋จธ ๋๋ฆฌํํธ/ํญ์ฃผ
ํ์
์๊ฐ์ด ์ง๋ ์๋ก Stage ์๋๊ฐ ๋นจ๋ผ์ง๊ฑฐ๋ UI๊ฐ ๋ฐ๋ฆผ.
์์ธ
Time.time ๊ธฐ๋ฐ ๋ฐ๋ณต์ด ์ ์ง/ํ๋ ์ ๋๋กญ์ ์ํฅ, ์ฝ๋ฃจํด ์ค๋ณต ์คํ.
ํด๊ฒฐ
- ๋จ์ผ ์ฝ๋ฃจํด ๊ฐ๋(isRunning) + WaitForSeconds.
- ์ผ์์ ์ง ๋์ ํ์ ์ unscaledDeltaTime ๋์ .
์ฌ๋ฐ ๋ฐฉ์ง
- ๋ชจ๋ ๋ฃจํ/ํ์ด๋จธ์ ์ค๋ณต ์คํ ๊ฐ๋ + ์ ์ง/์ฌ๊ฐ ์๋๋ฆฌ์ค ์ ๊ฒ.
'Unity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Unity - Fog of War, 3D(XZ)์์ 2D(XY)๋ก ๋ฐ๊พธ๊ธฐ (0) | 2025.09.17 |
---|---|
Unity - 3D Squad Swarm (ํ ํ๋ก์ ํธ) (1) | 2025.09.05 |
Unity - Project_Up (3) | 2025.08.13 |
Unity - 3D Survival Game(์ธ๋ฒคํ ๋ฆฌ ๊ธฐ๋ฅ) (6) | 2025.08.08 |
Unity - Inventory ์ธ๋ฒคํ ๋ฆฌ ์์คํ ๊ตฌํ ์ ๋ฆฌ (3) | 2025.08.07 |