-
[๊ตฌํ] json ์ด์ฉ ์ ๋ํฐ ๋ด ๋ํ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ 1UNITY/PROJECT 2021. 12. 7. 17:51
1. ๋์ฌ ๋ด์ฉ์ด ๋ค์ด๊ฐ jsonํ์ผ ๋ง๋ค๊ธฐ
๋ํ ํ์ผ์ jsonํ์ผ๋ก, ์ด๋ฐ ํ์์ด๋ค.
[
{(์ฒซ ๋ฒ์งธ ์๋์์ ๋ํ ์ ๋ณด)
"scene" : (๋ช ๋ฒ์งธ ์ ์ธ์ง),
"index" : (์ด ๋ํ์ ์ธ๋ฑ์ค, ๋ช ๋ฒ ๋ํ์ธ์ง. id๊ฐ๋ ),"name" : (๋ํ ์๋),
"lines" : [{"line" : (์ฒซ ๋ฒ์งธ ์๋์์ ๋ํ์ ์ฒซ ๋ง๋) },
{"line" : (์ฒซ ๋ฒ์งธ ์๋์์ ๋ํ์ ๋ ๋ฒ์งธ ๋ง๋) },
...
]},
{(๋ ๋ฒ์งธ ์๋์์ ๋ํ ์ ๋ณด)},
....
]scene๊ณผ name์ ์ฐ๋ฆฌ ๊ฒ์์์ ์ด์ฉ๋์ง ์์ง๋ง, ๋ด๊ฐ ์ฝ๊ฒ ๋ณด๊ธฐ ์ํด ์ ์ ์ ๋ณด์ด๊ณ ,
์ฌ์ค json ํ์ผ์ ๋ฐ์์ ๋ฐฐ์ด๋ก ์ธ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ index๋ ํฐ ์๋ฏธ๋ ์์ง๋ง ํท๊ฐ๋ฆฌ๋๊น ํ์๋ก ์์ด์ผ ํ๋ค.
์คํ์ด์ค ๋ฐ๋ฅผ ๋๋ฅด๋ฉด ํ๋ง๋, ํ๋ง๋๊ฐ ๋์ด๊ฐ๋ ์์ผ๋ก ๊ตฌํ ํ ๊ฒ์ด๋ค.
name์ ๋ํ ํ ๋ ๋๊ตฌ๋ ๋ํํ๋์ง ์๋ ์ด๋ฆ์ ์คํฌ๋ฆฐ์ ๋์ด๋ค๋ฉด ํ์ํ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ํน์ ๋ชฐ๋ผ์ ๋ง๋ค์ด๋จ๋๋ฐ ๊ฒฐ๊ตญ ์ฌ์ฉํ์ง ์์๊ณ , ๋ ๊ทผ๋ฐ ๋ณด๊ธฐ๋ ์๋๊ฒ ํจ์ฌ ์ข์์ ๋ ๋๋ค.
ํท๊ฐ๋ฆฌ๋๊น ๋ค์ ๋งํ์๋ฉด,
๋๋ ๋ํ๋ผ๋ ๋จ์ด๋ฅผ ํ ์๋์ ํ๋ฒ ๋ํํ๋ , ๋ง๋๊ฐ ๋ชจ์ธ, ํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ๋ํ ๋ฉ์ด๋ฆฌ๋ฅผ ์นญํ๋๋ฐ ์ฌ์ฉ์ค์ด๋ค.
๋ง๋๋ผ๋ ๋จ์ด๋ ์์ ๋งํ๋ฏ์ด ํ ๋ํ๊ฐ ๋๊ธฐ ์ํด ํ์ํ, ์คํ์ด์ค ๋๋ฅผ ๋๋ง๋ค ํ์ค ์ฉ ๋์ด๊ฐ๋, ์ด ํ์ค์ ๋ง๋๋ผ๊ณ ์นญํ ๊ฒ์ด๋ค.
์คํด๊ฐ ์์๊น๋ด ๋! ๋ง๋ถ์ด์๋ฉด A๋ผ๋ ์๋์ ๋ํ ํ๋ฒ ํ๋ฉด ๋ํ ํ๋, ๋ค๋ฅธ ์์น์์ A๋ ๋ค๋ฅธ ๋ํ ๋ ํ๋ฉด ์๋ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ ๋ ๋ค๋ฅธ ๋ํ ํ๋๋ค. ํ ํ๊ตญ์ด ์ด๋ ต๋ค...
2. ๋ํ ํ ์ค๋ธ์ ํธ ์ค์
์ผ๋จ ๋ํ๋ฅผ ํ๊ณ ์ ํ๋ Object์๊ฒ id๋ฅผ ๋ฃ์ด์ค๋ค.
์ฌ๊ธฐ์์ id๋ ๋ช ๋ฒ index์ ๋ํ๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒ์ธ์ง๊ฐ ๋๋ค.
์ฌ์ค ๋๊ฐ ์ด๋ฆ ๋ง์ท์ด์ผ ๋๋๋ฐ... ์ด์ฉ๋ค ๋ณด๋...public class ObjData :MonoBehaviour { public int id; }
์ด๋ฐ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด
id๋ ๊ทธ๋ ๊ทธ๋ ํ์์ ๋ฐ๋ผ ์ธ๋ถ์์ ๋ฃ์ด์ค๋ค.
3. ์ค๋ธ์ ํธ์ ๋ถ๋ชํ์ ๋, ์คํ์ด์ค ๋ฐ ๋๋ฅด๋ฉด ๋ํ์ฐฝ ๋ฑ์ฅ
์ฐ๋ฆฌ์ ๊ท์ฌ์ด ์ฃผ์ธ๊ณต์๊ฒ๋ ์ด๋ฐ ์คํฌ๋ฆฝํธ๊ฐ ๋ถ์ด์๋ค.
public class ColliderSetting : MonoBehaviour { ... public static GameObject scanObject; ... void OnCollisionEnter2D(Collision2D collision) { ... scanObject = collision.gameObject; ... } }
์ง๊ธ ์ํฉ์์ ํ์ํ ์ฝ๋๊ฐ ์๋๊ฑด ๊ฑฐ์ ๋บ๋ค.
๋ถ๋ชํ object๋ฅผ static์ผ๋ก ํด๋น ์ฝ๋์์ ์ ์ฅํ๋ค.
public class PlayerMove : MonoBehaviour { ... void Update() { if (Input.GetButtonDown("Jump") || talk_Down){ DialogueUI ui = GetComponent<DialogueUI>(); BossTalk bossTalk = GetComponent<BossTalk>(); //NPC ๋ํ if (ColliderSetting.scanObject && (ColliderSetting.scanObject.CompareTag("NPC") || ColliderSetting.scanObject.CompareTag("TalkCollider"))) { if (Vector2.Distance(ColliderSetting.scanObject.transform.position, transform.position) < 0.5) { ui.OpenDialog(ColliderSetting.scanObject); } } //boss trigger ๋ถ๋ชํ์ ๋ if (bossTalk.getBossTalkTrigger()) { if(bossTalk.getBossTalkTrigger().CompareTag("TalkTrigger") && !BossTalk.canBoss && !DialogueUI.endBossTalk && BossTalk.nowBossTalk) { Debug.Log("PlayerMove.BossTrigger"); ui.OpenDialog(bossTalk.getBossTalkTrigger()); } } //๋ง์ง๋ง ๋ณด์ค ์ก์ ํ ๋ํ if(MainBossDeadTalk.lastBossTalk) ui.OpenDialog(MainBossDeadTalk.bossID); } ... } ... }
์ฌ๊ธฐ์ update๋ก space๋ฐ ๋๋ ธ๋์ง ์ฌ๋ถ๋ฅผ ๊ณ์ ํ์ธํ๋ฉด์
(talk_Down์ ๋ชจ๋ฐ์ผ ๋ฒ์ ํ๋ฉด ๋ฒํผ ๋๋ ์ ๋๋ฅผ ์๋ฏธํ๋ค. ์ผ๋จ ๋ฌด์)
๋๋ฆฌ๋ฉด, ๋๋ฆฐ ์ํ์์ ์์ ColliderSetting์ scanObject(์ง๊ธ ํ๋ ์ด์ด์ ๋ถ๋ชํ ์ค๋ธ์ ํธ)๊ฐ
1) ๋ํ ๊ฐ๋ฅํ object๋ค(NPC, TalkCollider ํ๊ทธ ๊ฐ์ง ์น๊ตฌ๋ค)๊ณผ ๋ถ๋ชํ๊ฑด์ง (Null์ NullException ๋ฐฉ์ง๋ก) ํ์ธํ๋ค.
2) ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ถ๋ชํ๋ Object๊ฐ ํ๋ ์ด์ด๋ ๋ํ๋ฅผ ํ ์ ์์ ๋งํผ ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ์ธ์ง ํ์ธํ๋ค.
(๋ถ๋ชํ ์ง ์ค๋๋๋๋ฐ ๊ฐฑ์ ์ด ์๋์ ๊ฒฝ์ฐ ๋ฐฉ์ง)
๊ทธ ๋ค์ DialogueUI์ OpenDialogํจ์๋ฅผ ํธ์ถํ๋ฉด
๋ด๊ฐ ๋ถ๋ชํ Object์ id์ ๊ฐ์ index๋ฅผ ๊ฐ์ง ๋ํ์ ์ฒซ ๋ฒ์งธ ๋ง๋๊ฐ ํธ์ถ๋๋ค.
๋ค์ ๊ธ์์๋ ๋ํ ํธ์ถ์ ์ํด jsonํ์ผ ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ์
OpenDialogํจ์์์ ๋ํ๋ฅผ ์ด๋ป๊ฒ ํธ์ถํ๋์ง์ ๋ํด ์ ๊ฒ ๋ค.
'UNITY > PROJECT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ตฌํ] ์ ๋ํฐ๋ก ์ฝ๊ฒ ์ธ๋ฒคํ ๋ฆฌ ๊ตฌํํ๊ธฐ 2 (0) 2021.12.08 [๊ตฌํ] ์ ๋ํฐ๋ก ์ฝ๊ฒ ์ธ๋ฒคํ ๋ฆฌ ๊ตฌํํ๊ธฐ 1 (0) 2021.12.08 [๊ตฌํ] ์ ๋ํฐ ํ ์คํธ ํ์ดํ ํจ๊ณผ (0) 2021.12.07 [๊ตฌํ] json ์ด์ฉ ์ ๋ํฐ ๋ด ๋ํ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ 3 (0) 2021.12.07 [๊ตฌํ] json ์ด์ฉ ์ ๋ํฐ ๋ด ๋ํ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ 2 (0) 2021.12.07