ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ตฌํ˜„] json ์ด์šฉ ์œ ๋‹ˆํ‹ฐ ๋‚ด ๋Œ€ํ™” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ 1
    UNITY/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ํ•จ์ˆ˜์—์„œ ๋Œ€ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์— ๋Œ€ํ•ด ์ ๊ฒ ๋‹ค.

     

Designed by Tistory.