๊ตฌ์กฐ์ฒด๋ฅผ ์๊ณ ๋ ๋ค์๋ถํฐ, ์ ์ง ๊ตฌ์กฐ์ฒด๋ฅผ ๋จ๋ฐํ๋๋ฏํ ๋๋์ด ๋๊ธฐ ์์ํดย ์ด๊ฒ ๋ง๋๊ฑด์ง ์๋ฌธ์ด ๋ค๊ธฐ ์์ํ์ต๋๋ค. ๋์ถฉ ์ ๋ํฐ์์ ํ์คํธ ์ ํํ rpg๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค.ย ์ด๊ฑธ ์ด์ผ๊ธฐ๋ฅผ ์ถ๊ฐํ๊ธฐย ์ฝ๊ฒํ๊ธฐ ์ํ์ฌ ์ฝ๋๋ฅผ ์ง๊ณ ๋ณด๋,..
using UnityEngine;
[CreateAssetMenu(menuName = "Dialogue/DialogueObject")]
public class DialogueObject : ScriptableObject
{
ย ย [SerializeField] private StoryInfo[] dialogue;
ย ย public StoryInfo[] Dialogue => dialogue;
}
[System.Serializable]
public struct StoryInfo
{
ย ย [TextArea] public string story;
ย ย public choiceInfo[] choices;
}
[System.Serializable]
public struct choiceInfo
{
ย ย [TextArea] public string selection;
ย ย public chanceInfo[] chances;
}
[System.Serializable]
public struct chanceInfo
{
ย ย public int chance;
ย ย public float fortitude;
ย ย public float prudence;
ย ย public float temperance;
ย ย public float justice;
ย ย public float fortune;
ย ย public int[] storyUnlock;
ย ย public int[] storyLock;
ย ย public int NextStory;
}
์๋ฐ์์ผ๋ก ๋์๋๋ฐ ํ ๋ณ์์ ๊ตฌ์กฐ์ฒด๊ฐ 3๋ฉ์ด๋ฆฌ๋ ๋ ์ด์ํ๋์ ๋ง๋ ๊ฑฐ ๊ฐ๋ค ๋๊ปด์ก์ต๋๋ค.ย ์ด๊ฒ์ดย ์ต์ ํ๋ ๊ทธ๋ฐ๋ฉด์์ ๊ด์ฐฎ์๊ฑด์ง ์ฐพ์๋ณด๊ธฐ์ํดย ๊ตฌ์กฐ์ฒด ๋จ๋ฐ๊ฐ์ ์์ผ๋ก ๊ฒ์ํด ๋ดค๋๋ฐ๋ ์ ํํ ๋ต์ ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
ใดใด
์ด๋ฐ ์์ํ ์ธ์ด๋ ๋ฒจ ์ต์ ํ๋ ๋ชจ๋ ์ต์ ํ์ค์ ์ ์ผ ๋์ค์ ์๊ฐํ๋๊ฑฐ์. ์ฑ๋ฅ ์ ๊ฒฝ ์์จ๋ ๋จ. ๋๋ฆฌ๋ค๋ฉด 100%๋ผ๊ณ ํด๋ ๋ ํ๋ฅ ๋ก ์ ๊ธฐ๊ฐ ๋ณ๋ชฉ์ด ์๋๊ฑฐ์.
์ต์ ํ๋ ๋งค ํ๋ ์ ๋์๊ฐ๋ ๋ฌด๊ฑฐ์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ ํ๋ฒ์ ์๋ฐฑ๋ง๋ฒ ๋์๊ฐ๋ ๋ถ๋ถ ์๋๋ฉด ๋ฑํ ํ์ ์์. ์๋ฐฑ๋ง๋ฒ ๋์๊ฐ๋ ๋ถ๋ถ์ด ์๊ณ ๊ฑฐ๊ธฐ์ ํฌ๊ธฐ๊ฐ ํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฐ๋๊ฑด ํฐ ์ํด๊ฐ ๋ง์. ๊ทผ๋ฐ ๊ทธ๋ฐ๊ฑฐ ์๋๋ฉด ๊ทธ๋ฅ ์ฝ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ง๋๋ฐ๋ง ์ง์คํ๋๊ฒ ์ข์ ๋ฏ.
์์ธํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค
๊ตฌ์กฐ์ฒด๋ฅผ ์ฐ๋ ํด๋์ค๋ฅผ ์ฐ๋ ์์ ์๋ ๋ด์ฉ์์๋ ๋ณ ์๊ด ์์ด
์ด๊ฑด ๋ฐ์ดํฐํฌ๋งท์ ๋ํ ๋ด์ฉ์ธ๊ฒ ๊ฐ์๋ฐ, ๋๊ฐ StoryInfo ํ๋๋น ํ์ฌ ์ํฉ์ ๋ํ ์ค๋ช ๊ณผ ์ ํ์ง๊ฐ ์ฌ๋ฌ๊ฐ ๋์ค๊ณ , ์ ํ์ง๋ง๋ค ๋ญ๋ญํ๋ค ํ ์คํธ๊ฐ ์๊ณ , ์ ํํ๋ฉด ์ผ์ ํ๋ฅ ๋ก ๋ฅ๋ ฅ์น๊ฐ ์ค๋ฅด๋ด๋ฆฌ๊ฑฐ๋, ๋๋ค์ผ๋ก ํ์ด๋์ค๋ ์คํ ๋ฆฌ ๋ชฉ๋ก์ด ๋ฐ๋๊ฑฐ๋, ๋ค์์ ๊ฐ์ ๋ก ์ ํ๋ธ StoryInfo์ ์ธ๋ฑ์ค๊ฐ ์๊ฑฐ๋ ์๋ฐ๊ฑธ๋ก ๋ณด์ด๋๋ฐ ๋ฐ์ดํฐ ๋์ค๊ฐ ๊ธด๊ฒ ์ ๊ฒฝ์ฐ์ด๋ ๋ถ๋ถ์ด๊ธด ํ๋ฐ
๋ฐ์ดํฐ ๋์ค๊ฐ ๋ญ๊ฐ์? ์ผ๋จ ์์คํ ์ ๊ฑฐ์ ๋ง์๋๋ก๋ก ์๊ฐํ๋ฉฐ ๋ง๋ ๊ฑฐ๊ธด ํฉ๋๋ค.
XXInfo์์ YYInfo ์์ ZZInfo๊ฐ ์์ด์ ๋ฐ์ดํฐ์์ ๋ฐ์ดํฐ์์ ๋ฐ์ดํฐ๊ฐ ์์ด์ ๋์ค๊ฐ ๊น๋ค ์ด๊ฑฐ์. ์ด๊ฒ StoryInfo๋ ChoiceInfo๊ฐ ์ ๋ ์ฌ์ฌ์ฉ ์๋ ๊ฑฐ๋ค ํ๋ฉด ๊ทธ๋๋ก ์๊ด์๋ ๊ตฌ์กฐ์ธ๋ฐ "๊ฐ ์ ์ผ๋ก" ๋ถํธํ ํํ๋ผ์ ๊ทธ๋ ์ด.
์๋ง๋ ์์์๋ info๋ค์ ์ฒ์์ ์ ํ ์์น๊ฐ ํ๋ ์ด์ค ๋ณํ ๊ฑฐ๋ผ๋ ์๊ฐ๋์ง ์๊ธดํฉ๋๋ค.
๊ตฌ์กฐ์ฒด ์์ ๊ตฌ์กฐ์ฒด๋ฅผ ์๋ณธ์ ๋ฅ์นดํผํด์ ๋ค๊ณ ์์์ง, ๊ตฌ์กฐ์ฒด ๋ชฉ๋ก์ ์ฌ๋ฌ๊ฐ ๋๊ณ ๊ทธ ๋ชฉ๋ก์ Key๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ ํผ๋ฐ์ค๋ก ํํ๋ก ๋ค๊ณ ์์์ง๋ ๊ฐ๋ฐํ๋ฉด์ ์คํ ๋ฆฌ์์ ๊ด๋ จ DB๋ฅผ ๊ด๋ฆฌํ๊ธฐ ํธํ ๋ฐฉํฅ์ผ๋ก ์ง๋ฉด ๋ ๊ฒ. ๋ณธ์ธ์ด ๋ณด๊ธฐ์ ๋ญ ๋์ถฉ ์ด ์ํ๋ ๋ฌธ์ ์์ด๋ณด์ด๋๋ฐ StoryInfo ํ๋๊ฐ ScriptableObject ๋จ์์ฌ์ผ ํ์ง ์๋ ์ถ๊ธฐ๋ ํ๊ณ ๋๊ฐ ๊ทธ๋ ์ด
StoryInfo ํ๋๊ฐ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ๊ฐ ์๋ ์ด์ ๋ ์ด๋ฒคํธ์์ ์ ํํ๋ฉด ๋ฐ๋ก๋ค์ ๋์ฌ ์ด์ผ๊ธฐ๊ฐ์๊ฑธ ํ ์ด์ผ๊ธฐ์ ๊ดํ ์ฑ ๊ฐ์ ๋๋์ผ๋ก ๋ฌถ๊ธฐ ์ํ์ฌ ๊ทธ๋ ๊ฒ ํ๊ธด ํ๋๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ์คํ๋ ค ๋ณต์กํ ๊น์?
๊ทธ๋ ๊ฒ ํ ๊ฑฐ๋ฉด ์๋์ฒ๋ผ ๋ง๋ค์ด์ ์ธ์คํํฐ์์ ์กฐ๋ฆฝํด๋ฃ์ผ๋ฉด ์ข์ง ์์๊น์ class DialogueObject : ScriptableObject { [SerializedField] List stories } class StoryInfo : ScriptableObject { ...}
๋ง๋ค๋ ์ ๊ฐ ํ๋๊ฒ ๊น๋ํ ๊ฑฐ๋ผ ์๊ฐํ๋๋ฐ ๋ง์๋ฃ๊ณ ๊ณ ๋ฏผํด๋ณด๋, ๊ทธ ๋ฐฉ๋ฒ์ด ๋ณด๊ธฐ ํจ์ฌ ๊น๋ํ ๊ฑฐ ๊ฐ๋ค์. ๊ฐ์ฌ๋๋ฆฝ๋๋ค