Scope & Roles
คู่มือประกอบบ้านเองใน L_GeneralHouse โดยใช้ชิ้นสำหรับจัดวางใน Editor แล้ว Bake เป็น ISM ไม่ต้องใช้ PCG ผู้สร้างจัดรูปทรงเอง ส่วนระบบเกมดูแล ID, collision, damage, การรื้อ และ save ผู้ใช้เป็นผู้เริ่มและทดสอบ PIE เท่านั้น
บ้านมี Actor หลักหนึ่งตัว ชิ้นที่ mesh/resource/appearance เหมือนกันอยู่ใน ISM batch เดียว ชิ้นสำหรับจัดวางเป็น Editor-only และไม่อยู่ในเกม Garage ใช้ Actor assembly เดิม การลด Actor ไม่ใช่ผล benchmark; ยังต้องวัด performance ในฉากจริง
Assemble a house by hand in L_GeneralHouse, then bake Editor handles into ISM batches. No PCG is required. The author controls the layout; gameplay owns identity, collision, damage, demolition and saves. Only the owner starts and tests PIE.
One house Actor manages ISM batches grouped by mesh/resource/appearance. Authoring handles are Editor-only and stripped from the game. A garage retains its existing Actor assembly. This reduces Actor count; actual performance still requires scene profiling.
Prepared L_GeneralHouse Workspace
Level เตรียมพร้อมสำหรับจัดวางแล้ว: พื้น Grid 60 × 60 เมตร ผิวบนที่ Z = 0, Directional Light, Sky Light, sky backdrop, Exposure คงที่ และ Player Start อยู่ในโฟลเดอร์ Workspace พื้นมี collision สำหรับการทดสอบภายหลัง สิ่งเหล่านี้เป็นอุปกรณ์ของฉากทำงาน ให้ copy เฉพาะบ้านที่ Bake แล้วไปแผนที่เกม
Authoring/House มี ManualHouse และ Start_Slab_100_Concrete ที่ X=400, Y=0, Z=20 cm Slab เริ่มต้น Bake เข้าบ้านแล้ว; ตอนเตรียมฉาก 2026-10-05 มี 1 instance / 1 batch และผู้ใช้ต่อบ้านเองเป็น 21 ชิ้นก่อนแก้ snap รอบนี้ เลือก ManualHouse แล้วเพิ่มชิ้นด้วยจุด snap ตามขั้นตอนด้านล่างได้ทันที
Authoring/Palette มี template Wood 9 ชนิด: Slab, Wall, Gable Roof, Porch Column, Door Frame, Door Leaf, Floor Finish, Exterior Wall Finish และ L Stair ตั้ง Piece Definition / Resource / Appearance แล้ว เลือก template แล้ว Ctrl+W เพื่อ duplicate ย้ายสำเนาเข้า Authoring/House และจัดวางตามบ้านที่ต้องการ เลือก Bake เฉพาะสำเนาที่เป็นบ้าน อย่าเลือก Palette ทั้งชุด Finish และ Door ต้องวางบน support ที่ถูกต้องก่อน Bake Template เป็น Editor-only และไม่มี collision; ต้อง Bake จึงมีชิ้นเกมจริง
เปิด Level แล้วเริ่มจาก Slab หรือเลือก template ใน Outliner กด F เพื่อโฟกัส คง Scale 1,1,1 และใช้ Grid snap ตามขนาดของชิ้น ดูขนาดจาก mesh จริง ชื่อ 100 ไม่ได้แปลว่าทุกชิ้นมีขนาดเท่ากัน การทดสอบ PIE ยังเป็นขั้นตอนของผู้ใช้
The level now has a 60 × 60 m grid ground with its top at Z = 0, a Directional Light, Sky Light, sky backdrop, fixed exposure and a Player Start under Workspace. The ground has collision for later testing. These are authoring-scene utilities; copy only the baked house into game maps.
Authoring/House contains ManualHouse and Start_Slab_100_Concrete at X=400, Y=0, Z=20 cm. The starter slab was baked as 1 instance / 1 batch on 2026-10-05; the owner had expanded the house to 21 pieces before this snap correction. Select ManualHouse and use the snap workflow below to add pieces immediately.
Authoring/Palette contains nine configured Wood templates: Slab, Wall, Gable Roof, Porch Column, Door Frame, Door Leaf, Floor Finish, Exterior Wall Finish and L Stair. Select a template, press Ctrl+W, move its copy into Authoring/House and position it in your layout. Bake only the house copies, not the entire palette. Finishes and doors require valid supports before baking. Templates are Editor-only and have no collision; bake them to create actual gameplay pieces.
Start from the slab or select a template in the Outliner and press F to focus it. Keep Scale 1,1,1 and use grid snapping appropriate to the actual mesh dimensions. A 100 suffix does not imply that all pieces share the same dimensions. PIE testing remains an owner-only step.
BP_ManualHouse / BP_ManualBuildingPiece
BP_ManualHouse คือ Actor หลักของบ้านหนึ่งหลัง เก็บชิ้นที่ Bake แล้วและสร้าง ISM ตาม mesh/resource/appearance ดูแล ID, collision และข้อมูลที่ระบบเกมใช้กับ damage, การรื้อและ persistence ตัวบ้านว่างไม่ได้สร้างรูปทรงเอง
BP_ManualBuildingPiece คือ handle ของชิ้นเดียวสำหรับจัดวางใน Editor เช่น Slab หรือ Wall ตั้ง Definition/Resource/Appearance แล้ววางหรือแก้ตำแหน่ง ชิ้นนี้เป็น Editor-only ไม่มี collision และไม่ติดไปในเกม ต้อง Bake เข้าบ้านก่อนจึงเป็นชิ้นเกมจริง เครื่องมือ snap ทำขั้นตอนนี้ให้ทุกครั้งที่คลิกจุดสีเขียว
BP_ManualHouse is the Actor for one house. It stores baked pieces and generates ISM batches by mesh/resource/appearance, with stable identity, collision and records used by damage, demolition and persistence. An empty house does not generate a layout.
BP_ManualBuildingPiece is a single Editor placement handle, such as a slab or wall. Configure its definition/resource/appearance and edit its transform. It is Editor-only, has no collision and is stripped from gameplay. Bake it into a house to create a gameplay piece. The snap tool does this automatically for every accepted green-point click.
Viewport Snap Placement

- สำหรับบ้านใหม่ ลาก
BP_ManualBuildingPieceลงใน Level เลือกDA_Piece_Slab_100, Resource และ Appearance ที่รองรับ วาง Slab เริ่มต้นโดย Scale 1,1,1 และ Pitch/Roll 0 - บน Slab กด Start Snap House ระบบสร้างบ้านและ Bake Slab แล้วเลือกบ้านให้ หากมีบ้านเป้าหมายอยู่แล้ว ตั้ง Target House บน Slab ก่อนกด หรือเลือกบ้าน ตั้ง Starting Piece เป็น Slab แล้วกด Use Starting Piece
- เลือก
ManualHouseไว้ ใน Details หมวด Snap Placement เปิด Snap Placement Enabled แล้วเลือก Snap Piece Definition ของชิ้นที่จะเพิ่ม เช่น Wall หรือ Slab เลือก Snap Resource และ Snap Appearance ที่เข้ากัน เมื่อเปลี่ยนชนิดชิ้นหรือ Resource ต้องเลือก Appearance ที่รองรับอีกครั้ง หรือใช้ None เพื่อเลือก default - Viewport แสดงจุดตามชิ้นที่เลือก: เขียว = วางได้, แดง = ถูกบล็อก (เปิด Show Blocked Snap Points เพื่อดู) นำเมาส์ชี้จุดเพื่อดูกรอบขอบเขตและทิศทางของชิ้นนั้นเพียงจุดเดียว จุดอยู่ที่กึ่งกลางชิ้น preview คลิกจุดสีเขียวเพื่อเพิ่มชิ้นตรงนั้น ระบบ Bake เป็น ISM ทันทีและแสดงจุดสำหรับชิ้นถัดไป ไม่ต้องลาก handle และ Bake เองทุกครั้ง
- หากคลิกจุดแดง อ่าน Snap Placement Status จุดจะตรวจซ้ำก่อนวางเพื่อปฏิเสธตำแหน่งซ้อน geometry กีดขวาง วัสดุผิดหรือ support ไม่ครบ Finish ต้องมี Slab/Wall ที่เข้ากันในบ้านนี้ Door ต้องมี Frame ที่เข้ากัน
- ใช้ Undo/Redo ของ Editor (Ctrl+Z / Ctrl+Y) ย้อนการเพิ่มหนึ่งชิ้น ID ของชิ้นเดิมคงอยู่ ไม่มีการใช้ instance index เป็น save key
- หากไม่เห็นจุด ให้เลือกบ้านหรือ component SnapAuthoring ตรวจ toggle และ Definition ใช้ Viewport ปกติที่แสดง editor visualizers; ปิด Game View ด้วย G ตามจำเป็น แล้วโฟกัส Slab/บ้านด้วย F ชิ้นที่ไม่เข้าคู่กับ snap ของบ้านจะไม่มีจุดให้คลิก
- เมื่อเสร็จ ตรวจ Validation Status = Valid และ Instance Count บันทึก Level ปิด toggle เพื่อซ่อนจุดได้ Copy เฉพาะบ้านที่ Bake แล้วไปแผนที่เกม เครื่องมือและ handle ไม่ติดไป runtime
จุด snap ใช้กติกาและ named points ใน catalog เดียวกับระบบผู้เล่น ไม่ได้สร้างจุดอิสระทุกตำแหน่ง ชิ้นที่ไม่มีคู่ snap ให้ใช้ขั้นตอนจัดวางมือด้านล่าง เครื่องมือนี้ไม่ใช้ PCG และไม่เริ่ม PIE
- For a new house, place
BP_ManualBuildingPiece, selectDA_Piece_Slab_100and a supported resource/appearance, and position the starting slab. Keep scale 1,1,1 and pitch/roll zero. - Click Start Snap House on the slab. It creates a house, bakes the slab and selects the house. To reuse an existing house, set the slab's Target House first. Alternatively, select a house, assign the slab to Starting Piece and click Use Starting Piece.
- Keep
ManualHouseselected. Under Snap Placement, enable Snap Placement Enabled, choose the next Snap Piece Definition (for example Wall or Slab), and select a compatible Snap Resource and Snap Appearance. Reselect Appearance after changing piece/resource, or use None for the default. - The viewport displays points for the selected piece: green means valid, red means blocked (enable Show Blocked Snap Points to inspect it). Hover a point to see one proposed piece bounds preview and orientation; each dot is at its preview center. Click a green point to add the piece. It is immediately baked into ISM, and points refresh for the next placement.
- After a red-point click, read Snap Placement Status. Each action rechecks duplicates, geometry obstruction, material compatibility and dependencies. Finishes require a matching slab/wall within this house; doors require a matching frame.
- Use Editor Undo/Redo (Ctrl+Z / Ctrl+Y) for each added piece. Redo retains the piece identity. Instance indices are never save keys.
- If points are missing, select the house or its SnapAuthoring component, check the toggle/definition, and use a normal viewport showing Editor visualizers. Toggle Game View off with G as needed and focus the slab/house with F. Incompatible piece/source pairs have no clickable points.
- Require Validation Status = Valid, check Instance Count and save the level. Disable the toggle to hide points when finished. Copy the baked house into gameplay maps; the tool and handles are stripped from runtime.
Snap points use the same catalog rules and named anchors as player construction. They are not arbitrary attachment points for every combination. Use the manual workflow below for pieces without compatible points. This tool uses no PCG and never starts PIE.
Snap compatibility · 2026-10-06
Slab 100 → Slab 25 มี 4 จุดต่อด้าน รวม 16 จุด: ตำแหน่งตามแนวขอบอยู่ที่ 0, 25, 50, 75 cm ขอบ West/South ใช้ระยะของชิ้นใหม่ (−25 cm); East/North ใช้ขอบของชิ้นต้นทาง (100 cm) Slab 50 มี 2 จุดต่อด้าน และขนาดเท่ากันมี 1 จุดต่อด้าน บ้านที่หมุนยังใช้แนวขอบของบ้าน ไม่ใช่ world grid
สูตรตรวจขนาดและ pivot ของทั้งสองชิ้นครอบคลุม Wall, Opening/Frame, Window/Louver, Roof Face และคาน จุดต้นคาน/ช่องเปิดอยู่ภายนอกชิ้นเดิม ไม่วางทับจุด origin ขนาดต่างกันจะมีจุดตามแนวขอบที่เข้ากัน หลังคา Gable และ Shed ต่อใน pitch เดียวกัน; Valley ต่อกับ Gable ตามขอบที่ระดับผิวตรงกัน ไม่ใช้จุด Roof ทั่วไปกับ Infill
- Window และ Louver: snap ต่อขอบ/เหนือผนัง แล้วประกอบผนังเพื่อเว้นช่องด้วยตัวเอง การวางไม่ตัด Wall Solid อัตโนมัติ
- Louver เล็ก: โมเดลจริงเปลี่ยนเป็น 25 × 75 cm ลึก 25 cm กรอบ 5 cm และ Scale 1 ใช้ asset/Definition ชื่อเดิม
SM_AtticVent_Louver_35x70เพื่อรักษา reference และ saved IDs; ชื่อเดิมไม่ใช่ขนาดปัจจุบัน Louver ใหญ่ 50 × 100 และ Infill 75 × 50 ตรง Grid 25 อยู่แล้ว - Infill: ต่อปลายจั่ว Gable ตาม slope ของชิ้นจริง Rising/Falling ใช้ทิศทางที่เข้ากับปลายจั่ว ต้องมี Roof ที่เข้าคู่ในบ้านนี้
- Trim: Eave, Ridge และ Gable Edge มีจุดตามขนาด 25/50/100 และพึ่งพา Roof ที่เข้าคู่ ระบบตรวจ support ก่อน Bake; รื้อ/ทำลาย Roof แล้วชิ้นที่ผูกอยู่จะหายด้วย และบันทึกสถานะผ่าน world persistence เดิม
- บันได: Slab ต่อทางเข้า/ทางออก L และ U ตาม geometry ที่สร้างไว้ พื้นทางออก L อยู่ด้าน +X โดย Y=275…400, Z=320; U กลับออกด้าน −Y ที่ Z=320 จุดอยู่ภายนอกบันได ไม่วางทับขั้นหรือใช้ความสูงราวจับ
- โรงรถ: เลือก
DA_Piece_Opening_Garage_550ระบบบ้านใช้BP_SectionalGarageDoorที่มีแผง/รางครบ ไม่ต้องวางสองชิ้นภายในแยก ส่วนDoorLeaf_Standardรุ่นเดิมยังวางมือ ตามที่ผู้ใช้เลือก
จุดแดงยังแสดงเมื่อมีชิ้นอื่นชน วัสดุผิด หรือ support ขาด จำนวนคู่ในตารางคือชนิดชิ้นที่เข้าคู่ ไม่ใช่จำนวนจุดเขียวในฉาก Finish, Leaf และ Infill เป็นชิ้นปลายทาง จึงไม่มีจุดโครงสร้างต่อออกจากตัวมันเอง
Slab 100 → Slab 25 exposes four positions per side, 16 total: edge offsets are 0, 25, 50 and 75 cm. West/South use the new piece's extent (−25 cm); East/North use the source edge (100 cm). Slab 50 exposes two positions per side; equal sizes expose one. Rotated houses use their local edges, independently of the world grid.
Wall, opening/frame, window/louver, roof-face and beam joints use both meshes' dimensions and corner pivots. Start seams lie outside the source rather than at its occupied origin. Gable and shed faces retain their respective pitch; valley/gable connections match their actual edge profiles. Infill does not inherit generic roof-face corner poses.
- Windows/louvers: join wall edges or tops; assemble the surrounding opening yourself. Placement does not cut a solid wall.
- Small louver: the mesh is now 25 × 75 cm, 25 cm deep, with a 5 cm frame and unit scale. The existing
SM_AtticVent_Louver_35x70asset/definition ID is retained for references and saved identities; its old name no longer describes its size. The large 50 × 100 louver and 75 × 50 infills already fit the 25 cm grid. - Infills: fitted to the gable end with the matching slope/orientation. A completed matching roof in this house is required.
- Trim: eave, ridge and gable-edge joints support the 25/50/100 sizes and require a matching completed roof before baking. Destroying/removing the support cascades to its attached parts, using the existing world persistence path.
- Stairs: floor poses sit outside the source-authored L/U entry and arrival edges. The L arrival extends along +X at Y=275…400, Z=320; U returns along −Y at Z=320. Rail height is not a floor elevation.
- Garage: select
DA_Piece_Opening_Garage_550. The house uses the completeBP_SectionalGarageDoor; its panel/track assets are internal parts. The owner-approved legacyDoorLeaf_Standardremains manual placement.
Blocked geometry, incompatible materials and missing support still produce red points. Pair counts below count compatible piece types, not visible green points. Finishes, leaves and infills are terminal attachments and do not provide outgoing structural markers.
| ชิ้น / Piece | คู่ต้นทาง / Incoming types | คู่ต่อออก / Outgoing types | การใช้งาน / Usage |
|---|---|---|---|
SM_AtticVent_Louver_35x70 | 15 | 18 | 25 × 75 cm; stable legacy asset ID |
SM_AtticVent_Louver_50x100 | 15 | 18 | Snap placement |
SM_CeilingFinish_100 | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_CeilingFinish_25 | 3 | 0 | Fitted attachment; no outgoing structural points |
SM_CeilingFinish_50 | 2 | 0 | Fitted attachment; no outgoing structural points |
SM_DoorFrame_100x200 | 15 | 19 | Snap placement |
SM_DoorLeaf_100x200 | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_DoorLeaf_Standard | 0 | 0 | Manual placement (owner-approved legacy piece) |
SM_ExteriorWallFinish_100 | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_ExteriorWallFinish_25 | 3 | 0 | Fitted attachment; no outgoing structural points |
SM_ExteriorWallFinish_50 | 2 | 0 | Fitted attachment; no outgoing structural points |
SM_FloorFinish_100 | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_FloorFinish_25 | 3 | 0 | Fitted attachment; no outgoing structural points |
SM_FloorFinish_50 | 2 | 0 | Fitted attachment; no outgoing structural points |
SM_GableInfill_Falling | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_GableInfill_Rising | 1 | 0 | Fitted attachment; no outgoing structural points |
SM_GarageDoorPanel_500x48 | 0 | 0 | Inside BP_SectionalGarageDoor; no separate placement |
SM_GarageTrack_550 | 0 | 0 | Inside BP_SectionalGarageDoor; no separate placement |
SM_Opening_ExteriorDoor_200 | 15 | 18 | Snap placement |
SM_Opening_Garage_550 | 15 | 18 | Snap placement |
SM_Opening_InteriorDoor_200 | 15 | 18 | Snap placement |
SM_Opening_InteriorPassage_200 | 15 | 18 | Snap placement |
SM_PorchBeam_100 | 4 | 3 | Snap placement |
SM_PorchBeam_25 | 4 | 3 | Snap placement |
SM_PorchBeam_50 | 4 | 3 | Snap placement |
SM_PorchColumn_100 | 4 | 4 | Snap placement |
SM_PorchStep_100 | 3 | 0 | Snap placement |
SM_RoofEave_100 | 5 | 3 | Gable/shed eave; completed roof support required |
SM_RoofEave_25 | 9 | 3 | Gable/shed eave; completed roof support required |
SM_RoofEave_50 | 7 | 3 | Gable/shed eave; completed roof support required |
SM_RoofFace_Gable_100 | 18 | 17 | Snap placement |
SM_RoofFace_Gable_25 | 18 | 9 | Snap placement |
SM_RoofFace_Gable_50 | 18 | 12 | Snap placement |
SM_RoofFace_Shed_100 | 15 | 6 | Snap placement |
SM_RoofFace_Shed_25 | 15 | 4 | Snap placement |
SM_RoofFace_Shed_50 | 15 | 5 | Snap placement |
SM_RoofGableEdge_100 | 5 | 3 | Gable/valley edge; completed roof support required |
SM_RoofGableEdge_25 | 9 | 3 | Gable/valley edge; completed roof support required |
SM_RoofGableEdge_50 | 7 | 3 | Gable/valley edge; completed roof support required |
SM_RoofRidge_100 | 4 | 3 | Gable ridge cap; completed roof support required |
SM_RoofRidge_25 | 6 | 3 | Gable ridge cap; completed roof support required |
SM_RoofRidge_50 | 5 | 3 | Gable ridge cap; completed roof support required |
SM_RoofValley_100 | 3 | 6 | Snap placement |
SM_RoofValley_25 | 3 | 4 | Snap placement |
SM_RoofValley_50 | 3 | 5 | Snap placement |
SM_Slab_100 | 5 | 25 | Snap placement |
SM_Slab_25 | 5 | 21 | Snap placement |
SM_Slab_50 | 5 | 23 | Snap placement |
SM_Stair_L_300x400_20R | 3 | 3 | Snap placement |
SM_Stair_U_225x350_20R | 3 | 3 | Snap placement |
SM_Wall_Solid_100 | 15 | 21 | Snap placement |
SM_Wall_Solid_25 | 15 | 19 | Snap placement |
SM_Wall_Solid_50 | 15 | 20 | Snap placement |
SM_Window_100x150 | 15 | 18 | Edge/top joints; assemble a wall opening |
SM_Window_75x75 | 15 | 18 | Edge/top joints; assemble a wall opening |
55-piece native snap matrix · Louver geometry/import evidence
Manual Placement / Revisions
- เปิด
/Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouseมีManualHouse, Slab เริ่มต้น และ Palette พร้อมจัดวางแล้ว หรือวางBP_ManualHouseอีกตัวสำหรับบ้านอื่น - ลาก
BP_ManualBuildingPieceลงในฉาก ใน Details ตั้ง Piece Definition จากโฟลเดอร์Data/Piecesเช่นDA_Piece_Slab_100เลือก Resource และ Appearance ที่ Data Asset นั้นรองรับ เปลี่ยน Resource แล้วเลือก Appearance ที่เข้ากันอีกครั้ง - จัดตำแหน่ง/หมุน yaw เอง หรือ duplicate ชิ้นซ้ำ Scale ของบ้านและทุกชิ้นต้องเป็น
1,1,1; Pitch/Roll ต้องเป็น 0 ห้ามยืดชิ้นเพื่อปิดช่องว่าง - วาง Floor/Ceiling Finish ให้ตรงหน้าของ Slab แบบเต็มชิ้น วาง Exterior Finish ให้ตรงผนัง และ Door ให้ตรง hinge ของ Frame ตามระบบ snap เดิม เลือกชิ้น support ไป Bake ด้วย
- เลือกชิ้นสำหรับจัดวางทั้งหมดที่ต้องการ พร้อมเลือก
ManualHouseใน Outliner จาก Details หมวด Manual House กด BakeSelectedPieces หาก Details แบบหลายตัวไม่แสดงปุ่ม ให้เลือกบ้านตัวเดียวและล็อก Details ด้วยรูปแม่กุญแจ จากนั้นเลือกชิ้นสำหรับจัดวางและกดปุ่มบน Details ของบ้านที่ล็อกไว้ - ตรวจ Validation Status ต้องขึ้น
Validและ Instance Count ตรงจำนวนชิ้น หากไม่ผ่าน แก้ข้อความที่แจ้งแล้ว Bake ใหม่ ระบบคงข้อมูลบ้านที่ผ่านครั้งก่อน ชิ้นสำหรับจัดวางจะซ่อนหลัง Bake - บันทึก Level หลัง Compile Blueprint ให้เลือกบ้านใหม่และล็อก Details ใหม่ก่อนทำงานต่อ ใช้ ShowAuthoringPieces เพื่อแก้บ้าน เลือกชิ้นที่แก้แล้ว Bake ใหม่ ใช้ HideAuthoringPieces กลับมาดู ISM
- เมื่อต้องลบชิ้นที่ Bake แล้ว ใช้ Piece Removal Mode ได้โดยตรง หรือปิดโหมดนี้แล้ว Show และเลือก handle ของชิ้นนั้น กด RemoveSelectedPieces บนบ้าน ระบบลบชิ้นและ finish/door ที่พึ่งพาชิ้นนั้นด้วย การกด Delete เฉพาะ handle ไม่ได้ลบข้อมูลที่ Bake ไปแล้ว
- นำบ้านที่ Bake แล้วไปใช้ในแผนที่เกมโดย copy/paste หรือ duplicate
BP_ManualHouseทั้ง Actor ค่า House Instance ID จะใหม่โดยอัตโนมัติ ไม่ต้องคัดลอก handle เพื่อเล่นเกม Save แผนที่ปลายทางด้วย
- Open
/Game/Lambeer/World/Maps/L_GeneralHouse/L_GeneralHouse. AManualHousewith one baked starter slab is available. Place anotherBP_ManualHousefor a separate house. - Drag
BP_ManualBuildingPieceinto the level. Set Piece Definition to an asset underData/Pieces, such asDA_Piece_Slab_100. Choose a supported Resource and Appearance. After changing Resource, select a compatible Appearance again. - Position and rotate pieces manually; duplicate repeated pieces. Keep house and piece Scale at
1,1,1and Pitch/Roll at zero. Do not stretch pieces to fill gaps. - Align Floor/Ceiling Finish to the entire matching slab face, Exterior Finish to its wall, and Door to the frame hinge using the existing snap geometry. Include supports in the bake.
- Select the required authoring handles and the target
ManualHousein the Outliner. In Details, Manual House, click BakeSelectedPieces. If multi-selection hides the button, select only the house and lock its Details with the padlock, then select the handles and use the button in the locked house Details. - Require Validation Status to say
Validand check Instance Count. Correct validation errors and bake again. A rejected bake preserves the previous valid baked data. Handles hide after a successful bake. - Save the level. After Blueprint compilation, reselect the house and refresh its locked Details before continuing. Use ShowAuthoringPieces to edit, select edited handles and bake again. HideAuthoringPieces returns to the ISM view.
- To remove a baked piece directly, use Piece Removal Mode. Alternatively, disable that mode, show and select its handle, then click RemoveSelectedPieces on the house. Linked finish/door pieces are also removed. Deleting only a handle does not remove previously baked data.
- Copy/paste or duplicate the entire baked
BP_ManualHouseActor into a gameplay map. It receives a fresh House Instance ID automatically. Handles are unnecessary for runtime use. Save the destination level.
Stage Entry / Exit Criteria
ก่อน Bake: ทุกชิ้นมี Definition/Resource/Appearance ที่ถูกต้องและ support ครบ หลัง Bake: Validation เป็น Valid จำนวนชิ้นตรง Save สำเร็จ ก่อนส่งบ้านเข้าเกม: ID ของแต่ละบ้านต่างกันและ Owner Squad ID ถูกต้อง ก่อนยอมรับ: ผู้ใช้ผ่าน checklist Dedicated Server + สอง clients ด้านล่าง
อย่าคัดลอก House Instance ID เอง และอย่านำ sublevel/Level Instance เดิมมาวางซ้ำเพื่อสร้างหลายบ้าน ระบบนี้ยังไม่แยก ID ตาม placement ของ Level Instance ให้ duplicate/copy ตัวบ้านแทน
Before baking: valid definitions, resources, appearances and complete dependencies. After baking: Valid status, correct piece count and a saved level. Before gameplay handoff: unique house IDs and correct Owner Squad ID. Acceptance requires the owner-run Dedicated Server + two-client checklist below.
Do not manually copy House Instance IDs. Repeated placements of the same sublevel/Level Instance are not supported by this identity implementation; duplicate/copy the house Actor instead.
Review & Revision
กติกาที่ผู้ใช้ยืนยัน 2026-10-05: บ้านที่ Owner Squad ID เป็น GUID ว่างไม่มีเจ้าของ กด X รื้อคืนวัสดุไม่ได้ แม้ผู้เล่นมี Squad แต่ยังโจมตีเพื่อลด HP และทำลายได้ เมื่อกำหนด Squad เจ้าของที่มีอยู่จริง สมาชิกปัจจุบันเท่านั้นใช้ Hammer + X ภายในระยะเดิม 3 เมตรและต้องมองเห็นชิ้นนั้นเพื่อรื้อ รับวัสดุครึ่งหนึ่งปัดลง การทำลายด้วย damage ไม่คืนวัสดุ
ชิ้นเสร็จแล้วแสดงชื่อจริงเมื่อมอง ไม่มี E เติมวัสดุเหมือนชิ้นผู้เล่นที่สร้างเสร็จ สามารถใช้เป็น support/snap ของการก่อสร้างใหม่ได้ การซ่อม อัปเกรด ระบบ claim บ้าน และเปิด/ล็อกประตูยังไม่ได้เพิ่ม DoorLeaf เป็น static ตามระบบผู้เล่นเดิม; Garage ยังใช้ assembly เดิมและ Timeline ที่ผู้ใช้ต้องทำ
Owner decision, 2026-10-05: an empty Owner Squad ID means unowned. X refund demolition is denied, including players who belong to a Squad. Weapon damage still reduces HP and destroys pieces. For a valid existing owner Squad, only current members may demolish with Hammer + X, within the existing 3 m reach and with visibility to the target. Completed demolition returns half the bill rounded down; damage destruction returns no materials.
Completed pieces show their actual name on focus, with no E contribution, matching completed player-built pieces. They provide construction support and snap points. Repair, upgrade, house claim, door opening and locks are not added. DoorLeaf remains static like the existing player-built leaf; the garage uses the existing assembly and owner-authored Timeline.
File Handoff
ข้อมูลบ้านที่ Bake อยู่ใน Actor ภายใน Level: local transform, Piece ID, resource, appearance และ support ID ไม่ใช่ instance index การลบ/HP ที่เปลี่ยนบันทึกผ่าน ULambeerWorldPersistenceSubsystem และ USaveSubsystem SQLite schema 1 เดิม บ้านต้นฉบับที่ยังไม่เปลี่ยนไม่สร้าง save record ทุกชิ้น เมื่อโหลดใหม่หรือ stream กลับมา ใช้ ID เดิมและไม่ทำให้ชิ้นพังเกิดใหม่
การแก้ชิ้นเดิมรักษา Local Piece ID ไว้ การ duplicate สร้างชิ้นใหม่จึงมี ID ใหม่ อย่าแก้ ID เองหลัง world มี save แล้ว ดู สัญญา persistence
Baked local transforms, Piece IDs, resources, appearances and support IDs live on the level Actor. Instance indices are not saved identities. Changed HP and removal use ULambeerWorldPersistenceSubsystem and USaveSubsystem, in the existing SQLite schema 1. Untouched source pieces need no per-piece save record. Restore and streaming reconcile the original IDs without resurrecting destroyed pieces.
Editing an existing handle retains Local Piece ID; duplication creates a new piece identity. Do not edit IDs after a world has saves. See the persistence contract.
Source Control
บันทึกและส่ง Level บ้าน, Level ปลายทาง, BP สองตัว และ Data Asset ที่แก้พร้อมโค้ดระบบ ใช้ current worktree ตามข้อตกลงโครงการ ไม่บันทึกงานอื่นที่ไม่เกี่ยวข้องผ่าน Save All ล็อกไฟล์ binary/review policy ของทีมยังไม่ได้กำหนดในคู่มือนี้
Save and submit the authoring level, destination level, both Blueprints and changed Data Assets with the implementation. Use the current worktree under the project agreement. Save scoped assets rather than unrelated work through Save All. Team binary locking/review policy is not specified by this guide.
Naming & Paths
Blueprint ที่ใช้: /Game/Lambeer/World/Environment/ModularKit/Blueprints/BP_ManualHouse และ BP_ManualBuildingPiece Data Asset: /Game/Lambeer/World/Environment/ModularKit/Data/Pieces/DA_Piece_* ดู Content Folder Structure
ค่า HP จริงอยู่ใน Piece Definition → Resources → วัสดุ → Max Health ผู้ใช้อนุญาตให้ตั้งค่าเริ่มต้น: max(1, Required Units) × factor ตามตาราง ไม่ใช่ balance สุดท้าย Damage อาวุธลด HP ตรง ๆ ไม่มี resistance multiplier เพิ่ม
Blueprints: /Game/Lambeer/World/Environment/ModularKit/Blueprints/BP_ManualHouse and BP_ManualBuildingPiece. Definitions: /Game/Lambeer/World/Environment/ModularKit/Data/Pieces/DA_Piece_*. See Content Folder Structure.
Runtime HP is canonical in Piece Definition → Resources → material → Max Health. The owner delegated initial values: max(1, Required Units) × factor below. These are editable starting values, not final balance. Weapon damage subtracts HP directly, without an added resistance multiplier.
| Resource | Initial HP per required unit |
|---|---|
| Wood | 50 |
| Brick | 75 |
| Concrete | 100 |
| Tile | 40 |
| Metal | 125 |
ตัวอย่าง Slab 100: Wood 8 units = 400 HP, Brick 12 = 900 HP, Concrete 16 = 1600 HP กำหนดแล้วใน 55 Piece Definitions รวมวัสดุทุกชนิดที่แต่ละชิ้นอนุญาต ค่าที่ตรวจจาก Data Assets
Example Slab 100: Wood 8 units = 400 HP; Brick 12 = 900 HP; Concrete 16 = 1600 HP. Configured in all 55 Piece Definitions for their supported resources. Verified Data Asset manifest.
Definition of Done
การยอมรับใน PIE ยังรอผู้ใช้: เริ่ม Dedicated Server + สอง clients ด้วยขั้นตอนโครงการ ตรวจรายการนี้ แล้วแจ้งผลที่พบ
- มองชิ้นซ้ำที่มีชื่อเดียวกัน ชื่อตามชิ้นที่มอง ไม่มี E/บิลวัสดุเก่า
- บ้านไม่มีเจ้าของ: ถือ Hammer กด X ต้องปฏิเสธและไม่มีวัสดุตก
- ใช้อาวุธตี/ยิงชิ้นเดิมหลายครั้งจนพัง เฉพาะชิ้นและ finish/door ที่พึ่งพามันหาย ไม่มี refund ชิ้นใกล้กันยังอยู่ทั้งสอง clients
- บ้านคนละ placement ไม่เสีย HP/หายตามกัน ยิงต่อหลังชิ้นก่อนหน้าพังยังตรงชิ้น
- วางและ snap ชิ้นใหม่กับบ้าน สร้าง finish บน support เดิม ทดสอบรื้อ support ของบ้านที่มีเจ้าของ
- บ้านที่มี Squad เจ้าของ: สมาชิก Hammer + X คืนครึ่งปัดลง คนต่าง Squad ปฏิเสธ
- ออก/เข้าเกมใหม่ restart server และ stream unload/reload: ชิ้นพังไม่กลับมา HP ที่เหลืออยู่เท่าเดิม ไม่มีชิ้นซ้อน
- ทำ packaged cook และ profile Actor/component count, CPU/GPU, collision และ replication ในบ้านจำนวนจริงก่อนยืนยัน performance
Owner PIE acceptance pending: start Dedicated Server + two clients using the project workflow and report these checks.
- Focus identical named pieces: labels follow the actual target with no stale E/material bill.
- Unowned house: Hammer + X is denied and drops no materials.
- Repeated weapon hits destroy the target and explicit dependent finish/door pieces, without refund. Neighbours remain on both clients.
- Separate house placements remain independent; hits still target correctly after earlier pieces disappear.
- Place and snap new pieces to the house; build finishes on existing supports; test owner-authorized support demolition.
- Owned house: current owner-Squad members using Hammer + X receive half rounded down; other Squads are denied.
- Rejoin, server restart and stream unload/reload preserve removal and remaining HP without duplicate visuals.
- Complete packaged cook and profile Actor/component counts, CPU/GPU, collision and replication with the actual intended house population before accepting performance.
External / Freelancer Handoff
ส่ง Level ที่ Bake แล้วพร้อมภาพ layout, Instance Count/Batch Count, ข้อผิดพลาดที่คงอยู่ และผล checklist ที่ผู้ใช้ทดสอบ อย่าส่งเฉพาะชิ้น Static Mesh/handle ที่ไม่มี baked record อย่าระบุผ่าน PIE หรือ performance โดยไม่มีผลจริง
Deliver the baked level with layout images, Instance Count/Batch Count, known validation issues and owner-reported checklist results. Loose Static Meshes or handles without baked records are insufficient. Do not claim PIE or performance acceptance without observed results.
Delete individual pieces · TH / EN
ลบชิ้นที่ Bake แล้วใน Editor: เลือก BP_ManualHouse เปิด Snap Placement Enabled และ Piece Removal Mode ในหมวด Snap Placement จุดสีฟ้าแสดงกลางชิ้นที่มีอยู่ แทนจุดเขียวสำหรับวางชิ้น คลิกจุดสีฟ้าของชิ้นที่จะลบ: ชิ้นนั้นมีกรอบสีส้ม และ Snap Placement Status แสดงชื่อชิ้นกับจำนวนชิ้นที่จะลบรวมชิ้นที่ผูกโดยตรง จากนั้นกด Delete ใน Viewport หรือคลิก Remove Selected Pieces ใน Details หมวด Manual House ให้คลิกจุดชิ้นก่อนใช้ Delete เพื่อให้คำสั่งทำงานกับชิ้นที่เลือกใน visualizer
ใช้ Ctrl+Z / Ctrl+Y เพื่อ Undo/Redo การลบ ปิด Piece Removal Mode เพื่อกลับมาวางชิ้น จุด snap จะตรวจช่องว่างใหม่ทันที เลือก Definition/Resource/Appearance แล้ววางแทนช่องเดิมได้ ID และ local transform ของชิ้นที่เหลือคงเดิม แม้ลำดับ instance ภายใน ISM จะเปลี่ยน ชิ้นใหม่มี ID ใหม่ กรณี Slab 25 บนขอบ Slab 100 ช่องที่ลบกลับมาวางได้ที่ตำแหน่งเดิม รวมบ้านที่หมุน
ลบเฉพาะชิ้นที่เลือกและชิ้นที่มี SupportLocalPieceId พึ่งพามันตามกติกาเดิม เช่น finish/กรอบ/ประตู/trim ที่ผูกไว้ ชิ้นข้างเคียงที่ไม่ได้ผูกไม่ย้ายหรือลบตาม การลบนี้เป็นการแก้ต้นฉบับบ้านใน Editor และบันทึกด้วย Save Level; สิทธิ์รื้อบ้านไม่มีเจ้าของและการทำลายด้วยอาวุธในเกมใช้กติกาเดิม ถ้าลบทุกชิ้น จะไม่มีต้นทาง snap ให้ใช้ slab เริ่มต้นและ Use Starting Piece อีกครั้ง
บ้านที่คัดลอกมาโดยไม่มี handles ก็เลือกและลบผ่านจุดสีฟ้าได้ วิธี Show Authoring Pieces → เลือก handles → Remove Selected Pieces ยังใช้ได้เมื่อปิด Piece Removal Mode อย่าลบเฉพาะ handle จาก Outliner เพราะ baked record จะยังอยู่
ตรวจโดยผู้ใช้: เลือกและลบ Slab 25 กลางแถว ดูว่าชิ้นข้างเคียงอยู่ตำแหน่งเดิม ปิดโหมดลบแล้ววางช่องเดิม Undo/Redo และ Save Level/reopen ตรวจชื่อและ ID ของชิ้น ทดสอบลบ support ที่มี finish และอ่านจำนวนชิ้นใน Status ก่อนลบ การคลิกและ Delete จริงใน Viewport ยังรอผู้ใช้ยืนยัน
Delete a baked piece in the Editor: select BP_ManualHouse, enable Snap Placement Enabled and Piece Removal Mode under Snap Placement. Cyan points mark existing piece centers instead of green placement points. Click the target's cyan point: an orange box identifies the selected piece, and Snap Placement Status reports its name and the removal count including explicit dependencies. Press Delete in the viewport, or click Remove Selected Pieces under Manual House in Details. Click a piece point before using Delete so the active visualizer targets the selected piece.
Use Ctrl+Z / Ctrl+Y to undo/redo deletion. Disable Piece Removal Mode to resume placement. Snap validation refreshes the gap immediately; choose Definition/Resource/Appearance and place a replacement at the original pose. Surviving GUIDs and local transforms remain unchanged despite ISM index compaction; replacement pieces receive new GUIDs. Deleted Slab 25 slots reopen at their original Slab 100 edge poses, including rotated houses.
Only the selected piece and its explicit SupportLocalPieceId dependency group are deleted, using the existing finish/frame/door/trim rules. Unlinked neighbours keep their identities and poses. This edits the authored source in the Editor and persists through Save Level. Runtime ownership, unowned demolition denial and weapon destruction retain their existing rules. Removing every piece leaves no snap source; adopt a new starting slab with Use Starting Piece.
Copied houses without handles also support cyan-point selection. The existing Show Authoring Pieces → select handles → Remove Selected Pieces workflow remains available with Piece Removal Mode disabled. Deleting only a handle from the Outliner leaves its baked record intact.
Owner acceptance: delete a middle quarter slab, confirm neighbours retain their poses, disable removal mode and refill its exact slot, undo/redo, and save/reopen the level to verify IDs. Test a support with a dependent finish and review the removal count before deleting. Actual viewport selection and Delete-key acceptance remain owner-pending.
Validation evidence: Local build, automation and preservation results. Editor-only selection/cached bounds are stripped from gameplay. Durable gameplay fields and the central persistence schema are unchanged.
ISM groups · Resource & Appearance · TH / EN
รายการใน Outliner กับ ISM: HousePiece_SM_* เป็น BP_ManualBuildingPiece สำหรับแก้ชิ้นใน Editor หลัง Bake ภาพบ้านใช้ ISM ของ BP_ManualHouse จัด batch ภายในบ้านตาม Piece ID + Resource + Appearance เหมือนกันจึงรวมกัน; ต่างขนาด วัสดุ หรือ appearance จะเป็นคนละ batch Actor ของแต่ละบ้านแยกกัน ชุดประตูโรงรถยังเป็น child assembly แยกจาก ISM Groups เมื่อเริ่มตรวจครั้งนี้ บ้านปัจจุบันมี Slab 100 / Concrete / ConcreteSurface จำนวน 10 ชิ้น รวมเป็น 1 ISM batch; จำนวนเดิม 23 ชิ้นในหลักฐานรอบก่อนเป็นประวัติของ layout ก่อนผู้ใช้แก้บ้าน
- เลือก
ManualHouseแล้วเปิดหมวด ISM Groups ใน Details - เลือก ISM Group เช่น
SM_Slab_100 / Concrete / ConcreteSurfaceระบบโหลดค่าเดิมและแสดง ISM Group Piece Count - เลือก ISM Group Resource และ ISM Group Appearance รายการกรองจาก Data Asset ที่ชิ้นนั้นรองรับ เมื่อเปลี่ยน Resource หาก Appearance เดิมใช้ไม่ได้ ระบบเลือกค่าเริ่มต้นที่เข้ากันให้
- กด ApplyISMGroupChanges เพื่อเปลี่ยนทุกชิ้นในกลุ่มปัจจุบันที่เลือก พร้อมตั้ง Snap Piece Definition / Snap Resource / Snap Appearance ให้ตรงกลุ่มเพื่อวางชิ้นต่อไป การเปลี่ยน dropdown อย่างเดียวยังไม่แก้ชิ้นเดิม
- อ่าน ISM Group Edit Status และ Validation Status ใช้ Ctrl+Z / Ctrl+Y เพื่อ Undo/Redo แล้วบันทึก Save Level
การ Apply รักษา House ID, Local Piece ID, local transform และ support ของทุกชิ้น เปลี่ยนเฉพาะ Resource/Appearance ของกลุ่มที่เลือก พร้อม sync authoring handles เพื่อไม่ให้ Bake ครั้งถัดไปคืนวัสดุเก่า ถ้าค่าใหม่ตรงกับ batch ที่มีอยู่ กลุ่มจะรวมกันและ Piece Count แสดงจำนวนรวม ถ้ากลุ่มเดิมถูกลบ/รวมจนไม่มีแล้ว คำสั่งเก่าจะปฏิเสธ ให้เลือกกลุ่มปัจจุบันใหม่ บ้านอื่นและกลุ่มอื่นไม่เปลี่ยนตาม
Snap Resource / Snap Appearance ในหมวด Snap Placement ยังเป็นค่าของชิ้นถัดไป ใช้ ISM Groups → Apply เมื่อต้องการเปลี่ยนชิ้นที่วางแล้วทั้งกลุ่ม การแก้ผ่านแผงนี้เป็น Editor authoring ไม่คิดวัสดุในเกม; resource ของบ้านที่บันทึกแล้วใช้ค่า bill/HP จาก Piece Definition ตามสัญญาเดิม โดยไม่เพิ่ม gameplay upgrade หรือ save schema ใหม่
ตรวจโดยผู้ใช้: เลือกกลุ่ม เปลี่ยน Resource/Appearance แล้ว Apply ตรวจภาพทุกชิ้นในกลุ่มและค่าที่ใช้ snap ต่อ ลอง Undo/Redo, Show Authoring Pieces และ Bake handle เดิม, Save Level/reopen ตรวจ ID/ตำแหน่งเดิม ปุ่ม Apply และ Save Level/reload ผ่านกับบ้านทดสอบแยกใน Editor แล้ว ยังรอผู้ใช้ยืนยันความสะดวกและภาพวัสดุ รวม PIE/cook/profiling ตาม checklist เดิม
Outliner handles versus ISM: HousePiece_SM_* actors are Editor authoring handles. Baked house visuals belong to BP_ManualHouse, batched within each house by Piece ID + Resource + Appearance. Different sizes, resources or appearances form separate batches; houses remain independent. Garage child assemblies are outside ISM Groups. The current inspection found ten Slab 100 / Concrete / ConcreteSurface pieces in one batch. Earlier 23-piece evidence describes a previous owner layout.
- Select
ManualHouseand open ISM Groups in Details. - Select ISM Group, such as
SM_Slab_100 / Concrete / ConcreteSurface. Current values load and ISM Group Piece Count reports the affected physical batch. - Choose ISM Group Resource and ISM Group Appearance. Options follow the piece's supported Data Asset choices. Changing resource selects its default appearance when the old variant is incompatible.
- Click ApplyISMGroupChanges to edit every current member and update Snap Piece Definition / Snap Resource / Snap Appearance for the next placement. Draft dropdown edits alone do not alter existing pieces.
- Read ISM Group Edit Status and Validation Status. Use Ctrl+Z / Ctrl+Y for Undo/Redo, then Save Level.
Apply retains every house/local-piece identity, local pose and support link. Only selected members change resource/appearance, and corresponding handles are synchronized so rebaking cannot restore the old material. Matching destination batches merge; the refreshed count includes all merged members. A deleted/merged-away source key is rejected until a current group is selected. Other groups and houses remain unchanged. Generated components have descriptive ISM/piece/resource/appearance names; edit through this panel rather than component material overrides that rebuilding replaces.
Snap Resource / Snap Appearance under Snap Placement remain defaults for future pieces. Use ISM Groups → Apply to change existing group members. This is source authoring in the Editor, with no gameplay resource charge. Saved source resources use the existing Piece Definition bill/HP contract; no gameplay upgrade or new persistence schema is introduced.
Owner acceptance: apply a group change, inspect all affected visuals and future snap settings, undo/redo, show and rebake an updated handle, and save/reopen to confirm stable identities/poses. The Apply button and save/reload path passed in an isolated live Editor fixture. Owner usability/visual acceptance and existing PIE/cook/profiling checks remain pending.
Build, regression and live preservation evidence.

Local verification: Editor/Game builds and 65 automation checks passed (64 clean successes plus one existing GameplayCueNotifyPaths warning). Native group regression covers group merging, material compatibility, handle rebake, unchanged snap poses, isolated houses, stale group rejection and Undo/Redo. The actual ApplyISMGroupChanges button changed all ten members of a separate Blueprint fixture to Wood/LightWood, updated next-snap settings, and preserved all GUIDs/poses through scoped level save/reload. The fixture was removed; the original ten concrete pieces and Wall next-snap configuration remain unchanged. Current viewport capture still shows snap points. User PIE was never started.
Snap tool performance · TH / EN
การปรับเครื่องมือ 2026-10-06: จุด snap แสดงเป็นจุดเล็ก นำเมาส์ชี้จุดเพื่อดูกรอบชิ้นที่จะวางเพียงจุดเดียว แล้วคลิกจุดเขียวตามเดิม จุดที่ถูกบล็อกซ่อนเป็นค่าเริ่มต้น เปิด Show Blocked Snap Points ใน Details หมวด Snap Placement เพื่อดูจุดแดงและคลิกอ่านเหตุผลใน Snap Placement Status ตำแหน่งที่รองรับยังครบ รวม Slab 25 ทั้ง 4 ตำแหน่งต่อขอบ Slab 100
เครื่องมือเก็บผล snap ไว้ใช้ซ้ำขณะหมุนกล้อง ผลจะคำนวณใหม่เมื่อแก้บ้าน เลือก Definition/Resource/Appearance ใหม่ แก้ชิ้นหรือสิ่งกีดขวาง แก้ asset ที่เกี่ยวข้อง หรือ Undo/Redo การตรวจแต่ละครั้งใช้ข้อมูลบ้านและขอบเขต mesh ร่วมกัน ตอนคลิกยังคำนวณตำแหน่งจากชิ้นต้นทางปัจจุบันและตรวจ collision/support ใหม่ เพื่อปฏิเสธ preview ที่ล้าสมัย ID, damage, demolition และ save ใช้กติกาเดิม
ตรวจโดยผู้ใช้: หมุนกล้องและชี้จุด ตรวจว่ามีกรอบครั้งละหนึ่งชิ้น ทดลองเปิดจุดแดง วาง Slab/Wall แล้ว Undo/Redo และย้ายสิ่งกีดขวางเข้า/ออกจุด snap การลดงานคำนวณซ้ำยังไม่ใช่ผลวัด FPS/CPU/GPU ของฉากจริง; ยืนยันความลื่นด้วย Editor ของผู้ใช้ต่อไป
Tool revision, 2026-10-06: snaps use small points. Hover a point to see one piece bounds preview, then click a green point as before. Blocked points are hidden by default; enable Show Blocked Snap Points in Snap Placement to inspect red points and click them for a reason in Snap Placement Status. Every supported placement remains available, including all four Slab 25 positions on each Slab 100 edge.
Candidate results are cached during camera movement. House edits, definition/resource/appearance changes, geometry or relevant asset edits and Undo/Redo invalidate the cache. Each validation pass shares house records and mesh bounds. A click resolves the seam from current source data and performs fresh collision/support validation, independently of preview results. Existing identity, damage, demolition and save rules remain in effect.
Owner check: move the camera and hover points; confirm at most one bounds preview. Toggle blocked diagnostics, place slabs/walls and Undo/Redo, then move an obstruction into and out of a seam. Reduced repeated work is not a measured scene FPS/CPU/GPU result; Editor responsiveness acceptance remains with the owner.

ผลตรวจในเครื่อง: Editor/Game Development build ผ่าน; automation 63 รายการผ่าน (มี warning เดิมหนึ่งรายการเรื่อง GameplayCueNotifyPaths) การอ่านจุด 120 ครั้งโดยไม่แก้ฉากไม่เพิ่มจำนวนการคำนวณ ตรวจการเปลี่ยนชิ้น/วัสดุ/appearance, ย้ายบ้าน/สิ่งกีดขวาง, แก้ asset, เปิด/ปิดเครื่องมือ และปฏิเสธคลิกที่ถูกบล็อกใหม่ผ่าน รวม regression เดิมเรื่อง Undo/Redo และ persistence Blueprint สองตัว compile ผ่านโดยถือ warnings เป็น errors และบ้าน 23 ชิ้นหลังเปิด Editor ใหม่มี ID, transform และ setting เดิมครบ Save เฉพาะ assets ที่เกี่ยวข้องแล้ว ยังรอผู้ใช้ยืนยัน hover/คลิกและความลื่นใน Editor
Local validation: Editor/Game Development builds pass; all 63 automation tests pass with one existing GameplayCueNotifyPaths warning. Reading unchanged candidates 120 times produces no additional rebuild. Coverage includes piece/resource/appearance changes, house/obstruction movement, asset edits, tool toggles and fresh rejection of a newly blocked click, plus existing Undo/Redo and persistence regressions. Both manual Blueprints compile with warnings treated as errors. Reopening the rebuilt Editor preserves all 23 authored IDs, transforms and settings; only scoped assets were saved. Owner hover/click and responsiveness acceptance remain pending.
Snap audit validation · 2026-10-06
ผลตรวจ mixed-size ก่อนรอบปรับประสิทธิภาพ: Editor/Game Win64 Development build ผ่าน และ automation ผ่าน 62 รายการหลังรันทดสอบที่ได้รับผลกระทบจาก MCP HTTP socket error ซ้ำแบบแยก process (ปิด MCP เฉพาะ process ทดสอบ ไม่เปลี่ยน config โครงการ) ตรวจทั้ง 55 Definitions และคู่ชิ้น 55 × 55 รวมการวาง Slab 25 ครบ 4 ชิ้นต่อขอบ, บ้านหมุน, Undo/Redo, ปฏิเสธชิ้นซ้อน, support หลังคาและบันทึกการทำลายต่อเนื่อง Blueprint บ้านและ handle compile โดยถือ warnings เป็น errors ผ่าน
ตามที่ผู้ใช้อนุมัติ ย้าย Slab 25 เดิมจาก (−100, −200, 20) เป็น (−25, −200, 20) cm ให้ต่อชิด Slab 100 โดยรักษา House ID, ทั้ง 21 Piece IDs และอีก 20 records เดิม บ้านยังเป็น 21 instances / 2 ISM batches ตรวจหลัง Save/Reload แล้ว Louver เล็กใน Unreal เป็น 25 × 75 × 25 cm พร้อม material slots และ collision เดิม บ้าน PCG ตัวอย่างสองหลังอัปเดต cutout แล้ว โดย configuration และ identity คงเดิมหลัง Save/Reload
ขั้นตอนตรวจใน Editor โดยผู้ใช้: เลือก ManualHouse ใน L_GeneralHouse แล้วเลือก Slab 25 ใน Snap Placement คลิกจุดเขียว 4 ตำแหน่งตามขอบ Slab 100 ที่ว่าง จากนั้น Undo/Redo ตรวจว่าชิ้นต่อชิดและไม่ซ้อนกัน ลอง Slab 50 และ Window/Louver ต่อขอบ/เหนือผนังด้วย เปิด Show Blocked Snap Points เพื่อดูจุดแดงที่ถูกชิ้นเดิมบัง ยังรอผลการคลิกจริง, PIE Dedicated Server + สอง clients, packaged cook และ performance ของฉากจริง
Earlier mixed-size audit, before the performance revision: Editor/Game Win64 Development builds pass. All 62 distinct automation checks pass after an isolated retry of the test affected by an MCP HTTP socket-send error; MCP was disabled only for that test process, without changing project configuration. Coverage includes all 55 definitions and their 55 × 55 piece combinations, four quarter slabs on one full-slab edge, rotated houses, Undo/Redo, overlap rejection, fitted roof dependencies and persisted cascade removal. Both manual authoring Blueprints compile with warnings treated as errors.
The owner-approved existing quarter slab moved from (−100, −200, 20) to (−25, −200, 20) cm. The house ID, all 21 local piece IDs and the other 20 records are preserved. Scoped save/reload confirms 21 instances / 2 ISM batches. The imported small louver is 25 × 75 × 25 cm with its original named slots and collision policy. Both PCG preview houses have refreshed cutouts; their configuration and identity survive save/reload unchanged.
Owner Editor acceptance: select ManualHouse in L_GeneralHouse, choose Slab 25 under Snap Placement, and click the four green positions along a free Slab 100 edge. Undo/Redo and confirm touching, non-overlapping pieces. Also try Slab 50 and Window/Louver edge/top joins. Enable Show Blocked Snap Points to inspect points blocked by existing geometry. Actual mouse-click acceptance, Dedicated Server + two-client PIE, packaged cook and scene profiling remain pending.

Relationships & revision
2026-10-07: added current-ISM-group Resource/Appearance editing for existing members and next-snap defaults, synchronized handles, batch merging and Undo/Redo; live Blueprint fixture Apply/save/reload passed. 2026-10-06: corrected mixed-size snaps, audited all 55 definitions and added owner-approved window/louver/infill/trim/stair connections; small louver resized to the 25 cm grid. 2026-10-05: added owner-selected clickable Viewport snap placement with immediate ISM baking and Undo/Redo; prepared the authoring workspace with lighting, grid ground and configured templates; authorized manual ISM authoring, unowned demolition denied/damage allowed, owner-delegated initial HP. FEAT-BUILDING · TECH-NETWORK-ARCH · WORLD-C09
ผลตรวจในเครื่อง 2026-10-05: Editor/Game Development build ผ่าน; automation 60/60 ผ่าน (รวม Editor snap + Interaction regression); HTML 47 เอกสารผ่าน ไม่มี errors/warnings ตรวจ Bake สองชิ้นเป็นหนึ่ง ISM batch, ปฏิเสธวัสดุผิดโดยคงข้อมูลเดิม, แก้และ Bake ใหม่โดย ID เดิม, ลบชิ้นและ save/reload Level แล้ว ปรับ Level ให้มีแสง พื้น Grid, Palette 9 ชนิด และ Slab เริ่มต้นที่ Bake แล้ว 1 instance / 1 batch พร้อมจุด snap สีเขียว 4 ด้าน ตรวจ scoped save/reload แล้ว ยังรอผู้ใช้ตรวจการคลิกจุดและ Undo/Redo ใน Viewport มี warning เดิมหนึ่งรายการเรื่อง GameplayCueNotifyPaths ใน automation; ยังรอผู้ใช้ทดสอบ PIE, packaged cook และ performance ของฉากจริง
Local validation, 2026-10-05: Editor/Game Development builds and 60/60 automation tests pass, including the Editor snap fixture and interaction regression; all 47 HTML documents validate without errors/warnings. Editor checks cover two pieces in one ISM batch, atomic rejection of invalid resource selection, successful rebake retaining local IDs, removal and scoped level save/reload. The level now includes a lit grid workspace, nine configured palette handles and a baked starter slab (1 instance / 1 batch) with four visible green snap points. Scoped save/reload preserves the settings and stable identity. Owner Viewport mouse-click/Undo/Redo acceptance remains pending. One existing GameplayCueNotifyPaths warning occurs in automation. Owner PIE, packaged cook and actual scene performance remain pending.
Original gameplay validation evidence · Viewport snap validation evidence
Implementation and local validation do not constitute owner PIE, packaged cook or performance acceptance.