Collection factory - kuimoani/defold GitHub Wiki
Collection factories
컬λ μ ν©ν 리 μ»΄ν¬λνΈλ κ²μ μ€λΈμ νΈ(컬λ μ )μ μ€κ³λλ©΄ κ³μΈ΅κ΅¬μ‘°(blueprint hierarchies)λ₯Ό λ§λ€μ΄ μ€νμ€μΈ κ²μμΌλ‘ μ€ν°νλλ° μ¬μ©λ©λλ€. μ΄ λ§€λ΄μΌμ 컬λ μ ν©ν λ¦¬κ° μ΄λ»κ² λμνλ©° μ΄λ»κ² μ¬μ©νλ©΄ λλμ§ μ€λͺ ν©λλ€.
컬λ μ μ μ¬μ¬μ© κ°λ₯ν ν νλ¦Ώ(ν리ν©(prefab) κ°μ)μ μμ±νκΈ° μν κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. 컬λ μ μ λν κ°μλ₯Ό λ³΄κ³ μΆλ€λ©΄ Building blocks λ¬Έμλ₯Ό μ°Έκ³ λ°λλλ€. 컬λ μ μ μλν°μμμ λ°°μΉν΄λ λκ³ μ»΄νμΌ νμμ κ²μμΌλ‘ 볡μ ν μλ μλλ°, λμ μΌλ‘ κ²μμ μΆκ°νλ λ°©λ²μΌλ‘λ μλ λ κ°μ§κ° μμ΅λλ€.
-
컬λ μ νλ‘μ(Collection proxy)λ₯Ό ν΅ν΄ λ‘λνλ λ°©λ². μ΄ λ°©λ²μ κ·Όλ³Έμ μΌλ‘ κ³ λ¦½λ μ μλ(new isolated world)(물리 λ°μ λ°©μμ ν¬ν¨ν¨)λ₯Ό μ€νμ€μΈ κ²μμ λΆλ¬μ΅λλ€. λ‘λλ 컬λ μ μ μ μμΌ μΌλ‘ μμΈμ€ν μ μμΌλ©°, 컬λ μ μ ν¬ν¨λ λͺ¨λ μμ μ νλ‘μκ° λ‘λ©μ μμνλ€λ λ©μΈμ§λ₯Ό λ°μΌλ©΄ νλ‘μλ₯Ό ν΅ν΄ λ‘λλ©λλ€. μ΄ λ°©μμ λ 벨 μ€ν μ΄μ§λ₯Ό λ³κ²½νλ €λ κ²½μ°μ μμ£Ό μ μ©νκ² μ¬μ©λ©λλ€. λ λ§μ μ 보λ₯Ό μκ³ μΆλ€λ©΄ Collection proxy λ¬Έμλ₯Ό μ°Έκ³ λ°λλλ€.
-
컬λ μ ν©ν 리(Collection factory) μ»΄ν¬λνΈλ νμ¬μ λ©μΈ 컬λ μ μ 컬λ μ νλ‘μμ 컨ν μΈ λ₯Ό μ€ν° ν μ μκ² ν΄μ€λλ€. μ΄ λ°©μμ λ§μΉ μ΄λ€ 컬λ μ μμ μλ λͺ¨λ μ€λΈμ νΈλ€μκ² μΌμΌν ν©ν 리(factory) μ»΄ν¬λνΈλ₯Ό λ£μ΄μ μ€λΈμ νΈκ° λΆ-λͺ¨ κ³μΈ΅μ λ§λλ λ°©μκ³Ό μ μ¬ν©λλ€. μΌλ°μ μΈ μ¬μ©μ²λ‘λ κ²μ μ€λΈμ νΈκ° μ¬λ¬ κ°μ κ²μ μ€λΈμ νΈλ‘ ꡬμ±λ μ (enemy: λͺΈμ²΄+무기) κ°μ κ°μ²΄λ₯Ό μ€ν°νλλ° μ μ©ν©λλ€.
Spawning a collection
컬λ μ μ μ€ν° νλ κ²μ κ²μ μ€λΈμ νΈλ₯Ό μ€ν°νλ λ°©μκ³Ό λκ°μ΄ μνλ©λλ€. κ°λ¨ν μλ₯Ό λ€μλ©΄, μ°λ¦¬κ° νμ± μ€νλΌμ΄νΈλ₯Ό λ§λ€κ³ μ΄ νμ± νλ©΄μ 볡ν©μ μΈ κ²μ μ€λΈμ νΈλ‘ ꡬμ±λ μ°μ£ΌμΈ λͺ¨ν μ¬λ¬ κ°λ₯Ό μ€ν°ν΄μΌ νλ€κ³ μΉ©μλ€. μ°λ¦¬λ κ·Έλ₯ 컬λ μ νλ‘μ(Collection factory)λ₯Ό "planet" κ²μμ€λΈμ νΈμ μΆκ°νκ³ Prototype μμ±μ "astronaut.collection" (μΌλ¨ μ‘΄μ¬νλ€κ³ μΉκ³ )μΌλ‘ μ€μ νλ©΄ λ©λλ€.

μ΄λ²μ ν©ν 리μκ² μ°μ£ΌμΈμ μ€ν°νλΌλ λ©μΈμ§λ₯Ό 보λ΄λ©΄ λ©λλ€.
local astro = collectionfactory.create("#factory", nil, nil, {}, nil)
μ€ν°λ μ°μ£ΌμΈμ κ²μ μ€λΈμ νΈλ€μ νΈλ¦¬κ΅¬μ‘°λ‘ λμ΄ μμΌλ©°, μ€ν° μ΄νμ μ΄ μ€λΈμ νΈλ€μ λ€λ£¨κΈ° μν μ£Όμλ₯Ό λ°μ μ μμ΅λλ€.

보ν΅μ ν©ν 리 μ»΄ν¬λνΈλΌλ©΄ μ€ν°λ μ€λΈμ νΈμ μμ΄λ(id)λ₯Ό λ°ννμ§λ§, 컬λ μ ν©ν 리λ κ° μ€λΈμ νΈλ€μ λ°νμ μμ΄λλ₯Ό 컬λ μ λͺ -λ‘컬λͺ (collection-local id)μ ν΄μ¬κ°μΌλ‘ λ§λ€κ³ μ΄λ€μ ν μ΄λΈμ λ§€νν΄ λ°νν©λλ€. μ λμ¬ "/collectionNN/" κ° κ° μμ΄λμ μΆκ°λμ΄ κ° μΈμ€ν΄μ€λ₯Ό μ λν¬νκ² μλ³ν΄ μ€λλ€.
pprint(astro)
-- DEBUG:SCRIPT:
-- {
-- hash: [/probe2] = hash: [/collection0/probe2],
-- hash: [/probe1] = hash: [/collection0/probe1],
-- hash: [/astronaut] = hash: [/collection0/astronaut],
-- }
"astronaut"κ³Ό "probe" μ¬μ΄μ λΆ-λͺ¨ κ΄κ³λ μ€λΈμ νΈμ id/path μ μν₯μ μ£Όμ§ μμ§λ§ λ°νμμμ μ¬-κ·Έλν(scene-graph)μμλ μν₯μ μ€λλ€. μλ₯Ό λ€λ©΄ λΆ-λͺ¨ κ΄κ³μ μ€λΈμ νΈλ€μ ν¨κ» νΈλμ€νΌ(μ΄λ,νμ ,μ€μΌμΌ)νκ±°λ μ€λΈμ νΈμ λΆ-λͺ¨λ₯Ό μ¬μ€μ νλ κ²μΌλ‘λ μ λ idκ° λ°λμ§ μμ΅λλ€.
Properties
컬λ μ μ μ€ν° ν λ, 컬λ μ -λ‘컬(collection-local) μ€λΈμ νΈ μμ΄λκ° μ(pair)μΌλ‘ ꡬμ±λ ν μ΄λΈμ μ¬μ©νμ¬ κ°κ°μ λΆλΆ κ²μ μ€λΈμ νΈμκ² μ λΉν νλΌλ―Έν°λ₯Ό λ³΄λΌ μ μμΌλ©°, μ΄λ κ° μ€ν¬λ¦½νΈ μμ±μ μ ν ν©λλ€.
-- planet.script
--
local props = {}
props[hash("/astronaut")] = { size = 10.0 }
props[hash("/probe1")] = { color = hash("red") }
props[hash("/probe2")] = { color = hash("green") }
local astro = collectionfactory.create("#factory", nil, nil, props, nil)
...
"astronaut"κ° μ€ν°λ κ°κ°μ μΈμ€ν΄μ€λ€μ λκ²¨μ§ κ°μΌλ‘ "size" μμ±μ μ ν νκ² λκ³ , κ° "probe" λ€μ "color" μμ±μ΄ μ ν λ©λλ€.
-- probe.script
--
go.property("color", hash("blue"))
function init(self)
...
μ°μ£ΌμΈ μ¬λ¬ λͺ μ μ€ν°νκ³ μ λΉν λ°°μΉνμ¬ μλ§μ μμ± κ°λ€μ 보λ΄λ©΄, μλμ²λΌ μ¬λμ΄ λμΉλ νμ±μ λ§λ€ μ μμ΅λλ€.
