ScriptableObject ์์ ๊ฐ๋ น
public bool TestValue; ๋ฅผ ๋ง๋ฌ
๊ทธ๋ฆฌ๊ณ ์ด SO๋ฅผ ์ฌ์ฉํ ๋
์๋ํฐ๋ชจ๋์๊ฒฝ์ฐ
ํ๋ ์ด๋ชจ๋์คย TestValue = true;๋ก ๋ฐ๋๋ค๋ฉด
ํ๋ ์ด๋ชจ๋๋ฅผ ์ข ๋ฃํด๋ย TestValueย = true๊ฐ ์ ์ง๊ฐ ๋ ํ ๊ณ
์ค์ ๋น๋์์
TestValue ์ ์ด๊ธฐ๊ฐ์ด ํญ์ ๋น๋์์ ์ย
์ต์ด๊ฐ์ผ๋ก ๋ณด์ฅ๋๊ธฐ ๋๋ฌธ์
๋น๋ํ ๋ย TestValueย = false;์๋ค๋ฉด
๊ฒ์์ ํฌ๋ false์ผ๊ฒ์ด๊ณ , ๊ฒ์๋์ค ๊ฐ์ด true๋ก ๋ณํ๋คํ๋๋ผ๋
๋์ค์ ๊ฒ์์ ๊ป๋ค ํฌ๋ ๋ค์ false์ํ๋ก ๋์๊ฐ ์๊ณ
๋ฐํ์์ค ๊ฐ์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์ธ ์ ์์ง๋ง, ์ ์ฅ์ ๋ชปํ๋ค
์ด๋ ๊ฒ ์๊ณ ์๋๋ฐ ๋ง์ง?
์ง๋ฌธ์ ์ด๊ฑฐ์
์๋ํฐ๋ชจ๋์์์ ๋์๋ฐฉ์๊ณผ ์ค์ ๋น๋ํ์ ๋์๋ฐฉ์์ด ์์ฒ๋ผ ๋ค๋ฅธ๊ฑฐ๋์
์๋ํ์ง ์์ ๋ฒ๊ทธ๋ ์ค์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋๊ฑฐ๊ฐ์๋ฐ
์ด๊ฑธ ๋ง๊ธฐ์ํด์ ํ๋ ์ด๋ชจ๋ ๋์ค์ SO๊ฐ์ด ๋ณํ๊ฒฝ์ฐ, ์ด๊ธฐ๊ฐ์ผ๋ก ์ง์ ํ SO๊ฐ์ด ๋ฐ๋์ฑ๋ก
์ ์ฅ๋์ด ์ ์ง๋๋๊ฒ์, ์ผ๋ฐ Mono ๋ณ์๋ค ์ฒ๋ผ ์ ์ง๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด์๋?
๋น์ฅ ๋ ์ค๋ฅด๋๊ฑด SO์์ OnEnable์ ์ฌ์ฉํด์ย ๋ณ์๋ฅผ ๋งค๋ฒ ์ง์ ์ด๊ธฐํํด์ฃผ๋ฉด
์๋ํฐ๋ชจ๋์์ ๊ธฐ์กด์ ํ๋ ์ด๋ชจ๋์์ ๊ฐ๋ณ๊ฒฝ์ด์์์ด๋
OnEnable์์ ์ ๋ค์ ์ด๊ธฐ๊ฐ๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์
๋น๋์์ ์์์ ๋์๊ณผ ๋์ผํ๊ฒ ๋์ง ์์๊น ๋ผ๊ณ ์๊ฐ์ค์ธ๋ฐ
์ด๋ ๊ฒ ํ์๋ ๋ฌธ์ ๊ฐ์์์ง, ์๋๋ฉด ๋ค๋ฅธ๋ฐฉ๋ฒ์ด ์์์ง ๊ถ๊ธํฉ๋๋ค.
๋ฐํ์์ค์ SO ์์ ํ๋๊ฒ๋ถํฐ ์ข ๋ฌธ์ ๋ผ๊ณ ๋ด
์ ๋ํฐ ๊ณต์์ผ๋ก ์ ๊ณต๋๋ ์ปจํผ๋ฐ์ค๋ ํํ ๋ฆฌ์ผ๊ฐ์๋ฐ์ ๋ฐํ์์ SO ์์ ํด์ ํ์ฉํ๋ ๋ฐฉ์๋ ๋ง์ด๋์ค๋๋ฐ ์ด๊ฑธ ๋ฌธ์ ๋ผ๊ณ ๋ด์ผํ๋?
https://unity.com/kr/how-to/architect-game-code-scriptable-objects
PlayerHP ์์ ๋ถ๋ถ ๋ณด๋ฉด ๋ฐํ์ ์ค์๋ ๊ฐ๊ธ์ ์ด๋ฉด ์์ ํ์ง๋ง๊ณ ๊ตณ์ด ํ๋ค๋ฉด NonSerialize๋ก ํ๋๋ฅผ ๋ถ๋ฆฌํด์ ์ฐ๊ณ ์์
SO์ ๊ธฐ๋ณธ ์ทจ์ง๋ถํฐ๊ฐ Static ๋ฐ์ดํฐ๋ฅผ Asset์ผ๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋๊ฑฐ๋๊น SerializedField๋ฅผ ๋ฐํ์ ์ค์ ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ฉด ์ํํ๊ฒ
์๋ํฐ๋ ๋ฐํ์์ ๋์์ ๋ค๋ฅด๊ฒ ํ๊ณ ์ถ์๊ฑฐ๋ฉด define์ ์ฐ๋๊ฒ ๋์๋ฏ?
์ผ์.. ์๋ํฐ๋ ๋ฐํ์๋์์ ๊ฐ๊ฒ ํด์ฃผ๊ณ ์ถ์๊ฑธ(๋ฐํ์์ฒ๋ผ ๋งค ๊ฒ์์คํ์๋ง๋ค ์ค์ ํด๋ ผ๊ฐ์ด ์ ์ง, ์๋ํฐ ํ๋ ์ด๋ชจ๋์์ ๊ฐ๋ณ๊ฒฝํด๋ ํ๋ ์ด๋ชจ๋ ๊ป๋ค ์ผฏ์๋ ๋ค์ ์์๋ณต๊ท๋์๊ฒ) ์ด๊ฒ Scene ๊ฐ์ฒด๊ฐ ์๋๊ณ .asset์ด๋ผ์ ์๋ํฐ๋ชจ๋ ์์ ์์ ๊ณ ์ณ์ง๊ฐ์ด ์๋์์จ๋ค๋ ๋ด์ฉ์์ฒธ ๋ฉ๋์๊ฐ์ง๋ง... ๋จผ๊ฐ ํธ์๋ฅผ์ํด์ ์ดํธ๋ฆฌ๋ทฐํธ๋ ์ค์ ๋ฑ์ผ๋ก ์ง์๋๋๊ฒ ์์๋ฒํ๋๋์ด์ฌ์ ์ฐพ๋ค ๋ชป์ฐพ์์ ์ฌ์ญค๋ณธ๊ฑด๋ฐ... ์๋๋ณด๋ค์ ๋ฑํ..
์๋ํฐ๋ชจ๋์์ ๋ณ๊ฒฝ๋๊ฐ์ด ๋ฐํ๋ฒ๋ฆฌ๋๊ฒ ์ธ์ ๋น๋๋ฒ์ ผ์์ ๋ฐํ์์ ๊ฐ์์ ํด์ ์ฐ๋๊ฒ ๋ฌธ์ ๋ ์์ญ์ด ์์๊น์? ๊ฐ๋ น ์ hp์์ ๋ฅผ ์๋ํฐ๋ชจ๋์์ ์๊ฑด๋ ๋ค๊ณ ํ๋ฉด ๊ทธ๋ฅ ๋ณ์ ํ๋ ๊ฐ์ง SO๋ก ๋ฐํ์์ ๋ณ๊ฒฝํด๊ฐ๋ฉด์ displayํด์ฃผ๋ ์ฉ๋๋ก ์ธ ๋ ๋ฌธ์ ๋ ์ผ์ด์ค๊ฐ์์๊น์??
์ฃผ์ํด์ ์ด๋ค๋ฉด ์ฌ๊ฐํ ๋ฌธ์ ๋ ์์๋ฏ ์ถ์๋ฐ
OnEnable์ ์์ํ ๋๋ง ๋ถ๋ฆฌ๋ ๊ฒ ์๋๋ผ์ ๋ฌธ์ ๋๋ ์ผ์ด์ค ์๊ธธ๋ฏ
๊ตณ์ด SO๋ฅผ ๋ฐํ์์ ์์ ํ๊ณ ์ถ๋ค๋ฉด ์คํํ ๋ ๋ณต์ฌํด์ ์ฐ๋ ๋ฐฉ๋ฒ๋ ์์
[NonSerialized] private bool _runtimeValue; public bool RuntimeValue { get { return _runtimeValue; } set { _runtimeValue = value; if(OnChangedEvent != null) { OnChangedEvent.Raise(); } } } public void OnAfterDeserialize() { _runtimeValue = initialValue; }
์ด๋ฐ ์์ผ๋ก ํ๋ ์ ๋ ์๋๋ฐ ์ฅ๋จ์ ์ด ์์...
์ด๊ฑฐ ์์ฃ๋ถ hp ์์ ๋ ๊ฐ์๋ฐฉ์๊ฐ์๋ฐ ๋จ์ ์๋ญ์ฟ๋์ฌ? ์์งํ ์ด๋ ๊ฒ ์ฐ๋๊ฑฐ ์์ฒด๋ง์ผ๋ก๋.. ๋ชจ๋ ๋ณ์๊ฐ ๋๊ฐ์ฉ ์์ด์ผํ๊ณ ๊ณจ์ํ๋ฌธ์ ์๊ธธ๊ฑฐ๊ฐ๊ธดํ๋ฐ.........
๋๋ ์ ๋งํฌ ๋ณด๊ณ ํ๋ ๊ฒ ๊ฐ๋ค ใ ใ ; ๋ชจ๋ ๋ณ์๋ฅผ ๊ฐ๊ฐ 2๊ฐ์ฉ ๋ง๋๋๊ฒ ์๋๊ณ ํ์ ๋ณ๋ก SO ์์๋ฐ์ ๊ฑธ ๋ง๋ค์ด ๋๋ ๊ฑฐ์
๋จ์ ์ ์ด๊ฒ ์๊ฐ๋ณด๋ค ์์ด ์์ํ๊ฒ ๋ง์ด๊ฐ๋ค๋ ๊ฒ ์ปธ์. ์ฝ๋์์ ํ์ค ์ ์ผ๋ฉด ๋ ๊ฑธ SO ์์ฑํ๊ณ ๋์ด์ ์ฐ๊ฒฐํ๊ณ ...
ํ์ ๋ณ๋ก ์ ํ๊ณ ๋ค๋ฅธ SO๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ ํ๋๋ฅผ ๋ง๋ค๋ฉด ์ฝ๊ฒ ๋ ๊ฑฐ ๊ฐ๊ธด ํจ
์๊ณ ๊ณ ..
๊ทผ๋ฐ ์์ฃ๋ถ์ด ๋ต๊ธ ๋ฌ์์ค ๊ฒ์ฒ๋ผ NonSerialize ๋ถ์ด๋ฉด ๋ฐํ์์ ๋ฐ๊ฟ๋ ์์ ์ ์ ๋ฐ๋๋ ๊ฑฐ ์๋๊ฐ? ๋จ์ํ SO๋ฅผ ๋ฐํ์์ ๊ณ ์น๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฌธ์ ๋๋ ๊ฑด ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํจ ๋ค๋ง ๊ณ ์น๋ฉด ์๋๋ SO๊น์ง ์ค์๋ก ๊ณ ์ณ๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์ฝ๊ฒ ๋ฐ์ํ ๊ฒ ๊ฐ์
NonSerialize ์๋์ฌ๋ ๋ฐํ์(๋น๋์ดํ)์ ์๋ฐ๋์ง์์์? ์ค๋ก์ง ์๋ํฐ๋๋ง ๋ฐ๋๋๊ฒ ๋ฌธ์ ๋๋๊ฒ ์๋? ๊ฐ๋ น [SerializeField] public int TestValue; ๊ฐ ์ธ์คํํฐ์์ 30์ผ๋ก ํด๋๊ณ , ๋น๋ํด์ ๊ฒ์์คํํ๋ค ๊ฒ์๋์ค ์ด๊ฑฐ 80์ผ๋ก ๋ฐ๊พธ๊ณ ๊ฒ๋๋ฉด ๋ค์์คํํ ๋ 30์ด ๋ณด์ฅ๋๋๊ฑฐ ์๋์์ฌ?
NonSerialize ์ด๊ฑธ ๋ถ์ด๋ฉด ์๋ํฐ์์๋ ์ ๋ฐ๋๋๊น ์๋ํฐ๋ ๋น๋๋ ๋์์ด ๊ฐ์์ง๋ ๊ฑธ๋ก ์๊ณ ์์ด์ (ํ ์คํธํด๋ด์ผํจ; ) ์๋ํฐ์์๋ง ๋ฐ๋๋๊ฒ ๋ฌธ์ ์๋๊ฒ ํด๊ฒฐ๋๋ ๊ฒ?
๋์๊ฐํด๋ณด๋ ์ด๊ฑฐ ๋ฐํ์๋ฒจ๋ฅ๋ฅผ NonSerialize๋ก ํ๋๋ ๋ง๋ค์ด์ ๋ณต์ฌ๋ณธ์ผ๋ก์ฐ๋ฉด ์๋ํฐ์์ ํ๋ ์ด๋ชจ๋์ ๋ณ๊ฒฝ๋๋ ์ค์๊ฐ๊ฐ์ ์ธ์คํํฐ ํ์ธ์ด๋ถ๊ฐ๋ฅํ๊ณ ์ต์ด๊ฐ๋ง ๋ณด์ด๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ๊ฒ ๋ค์ฌ.. ใ ใ ใ ใ ใ ใ ใ ใ ใ ....
๋จธ ์ดํธ๋ฆฌ๋ทฐํธ๋ ์ค์ ๋ฐฉ๋ฒ ๋ฑ ๋ช ์พํ ๊น๋ํ ํด๊ฒฐ์ฑ ์ด ๋ง๋ค์ด์ ธ์์ง๋ ์๋๊ฒ๊ฐ๋ค์ ์๋ ๊ทธ๋ฐ ๋ ผ๋ฆฌ๋ก ๋ง๋ค์ด์ง ์ ์ธ๊ฑฐ๋ผ ๊ทธ๋ฐ๊ฑธ๋ก ์๊ฐํด์ผ๊ฒ ์๋ค..
๋ฐ์ดํฐ๋ ์ํ๋ฅผ ํํด๋์ค์ ์งฌ๋ฝํ์ง๋ง๊ณ ๋ถ๋ฆฌํ๋ฉด ์ด๋ฐ ๊ณ ๋ฏผํ ํ์๊ฐ ์์ด์ง