SubspaceModifier คล้ายกับตัวปรับแต่ง Compose สำหรับ Composable ใน Subspace SubspaceModifier ช่วยให้คุณจัดการ Composable ในพื้นที่ 3 มิติได้ ซึ่งจะช่วยให้คุณจัดตำแหน่ง หมุน และเพิ่มลักษณะการทำงานให้กับโหนดเลย์เอาต์ 3 มิติได้
การจัดวาง
โดยค่าเริ่มต้น Subspace จะถูกจำกัดด้วยพื้นที่ที่แนะนำสำหรับการดูแอป ระบบจะใช้ขอบเขตเหล่านี้เมื่อวัดเลย์เอาต์ของคอมโพเนนต์พื้นที่ย่อย ซึ่งคล้ายกับขอบเขตในเลย์เอาต์ Compose 2 มิติ
ขอบเขตการเติม
ตัวแก้ไข fillMaxSize, fillMaxWidth, fillMaxHeight และ fillMaxDepth ทำให้เนื้อหาเติมเต็มขอบเขตขององค์ประกอบหลัก (บางส่วน)
การใช้ตัวแก้ไขการเติมจะช่วยให้แอปจัดเลย์เอาต์เนื้อหาที่ไม่ขึ้นอยู่กับลักษณะการแสดงผลของอุปกรณ์ XR
กำหนดขนาดและขนาดที่จำเป็น
ตัวแก้ไข size, width, height และ depth จะประกาศขนาดที่ต้องการของเนื้อหา หากต้องการประกาศขนาดที่แน่นอนของเนื้อหา ให้ใช้ requiredSize, requiredWidth, requiredHeight และ requiredDepth ต้องระบุหน่วยเหล่านี้ใน dp หากต้องการแปลงจากเมตรเป็น dp ให้ใช้ Meter.toDp()
จัดตำแหน่งคอมโพสิเบิล
offset
ตัวแก้ไข offset จะย้าย Composable ในพื้นที่ 3 มิติตามแกน x, y และ z ต้องระบุหน่วยเหล่านี้เป็น dp หากต้องการแปลงจากเมตรเป็น dp ให้ใช้ Meter.toDp()
rotate
ตัวแก้ไข rotate จะหมุน Composable ที่ระบุในพื้นที่ทำงาน คุณสามารถระบุทิศทางและจำนวนการหมุนได้หลายวิธี ดังนี้
- โดยใช้การหมุนรอบแกน X, Y และ Z ซึ่งระบุการหมุนรอบแกน
x,yและzตามลำดับ - ใช้
axisAngleซึ่งเป็นVector3ที่แสดงแกนของการหมุน และจำนวนองศาที่ควรหมุนรอบแกน - โดยใช้
Quaternionที่แสดงถึงการหมุน
rotateToLookAtUser
ตัวแก้ไข rotateToLookAtUser จะหมุนเนื้อหาอย่างต่อเนื่องเพื่อให้หันเข้าหาผู้ใช้ตลอดเวลา นอกจากนี้ คุณยังใช้ตัวแก้ไขนี้เพื่อให้ได้เอฟเฟกต์ "ป้ายโฆษณา" ซึ่งเนื้อหาจะหมุนเพื่อหันหน้าเข้าหาผู้ใช้บนแกน Y ขณะที่ยังคงตั้งตรงและสอดคล้องกับแรงโน้มถ่วง โดยให้รวมตัวแก้ไข rotateToLookAtUser เข้ากับตัวแก้ไข gravityAligned
ย้ายและปรับขนาด Composable
อนุญาตให้ผู้ใช้ปรับเปลี่ยนตำแหน่งและขนาดของวัตถุในพื้นที่ 3 มิติได้โดยตรง
ย้ายองค์ประกอบ
เมื่อมีตัวแก้ไข movable และเปิดใช้ ระบบจะแสดงตัวควบคุม UI ที่ลากได้ซึ่งช่วยให้ผู้ใช้ย้ายองค์ประกอบในพื้นที่ 3 มิติได้ คุณสามารถใช้ตัวแก้ไข movable กับ Subspace ทั้งหมด, คอมโพเนนต์เลย์เอาต์เชิงพื้นที่ (เช่น SpatialRow และ SpatialColumn) และคอมโพเนนต์แต่ละรายการ (เช่น SpatialPanel และ SpatialGltfModel)
ลักษณะการทำงานที่เฉพาะเจาะจงของการเคลื่อนไหวนี้จะกำหนดโดย movePolicy ที่ระบุไว้ ดังนี้
MovePolicy.Default(หรือMovePolicy.system()): ระบบจะจัดการการเคลื่อนไหวทั้งหมด รวมถึงคำนวณและใช้ท่าทางและขนาดใหม่โดยอัตโนมัติตามข้อมูลที่ผู้ใช้ป้อนMovePolicy.custom(): ระบบจะคำนวณPoseเป้าหมายตามอินพุต แต่จะไม่นำไปใช้กับองค์ประกอบที่เกี่ยวข้องโดยอัตโนมัติ ซึ่งมีประโยชน์ในการจำกัดการเคลื่อนไหวหรือสร้างการเคลื่อนไหวที่กำหนดเองในแอปMovePolicy.anchor(): ช่วยให้ผู้ใช้สแนปและยึดองค์ประกอบที่เคลื่อนย้ายได้กับระนาบในโลกจริงที่ตรวจพบ
คอมโพสิเบิล Anchor
หากต้องการตรึง Composable ของ Subspace ที่เคลื่อนย้ายได้กับพื้นผิวในชีวิตจริง ให้ส่ง MovePolicy.anchor() ไปยังตัวแก้ไข movable
นโยบายนี้ช่วยให้ผู้ใช้สามารถจัดองค์ประกอบ (เช่น SpatialPanel และ SpatialGltfModel) ให้เข้ากับพื้นผิวจริง เช่น โต๊ะ ผนัง หรือพื้น
คุณสามารถกรองระนาบที่ตรวจพบซึ่งองค์ประกอบสามารถยึดติดได้โดยใช้พารามิเตอร์ต่อไปนี้ (หากเว้นว่างไว้ องค์ประกอบจะยึดติดกับระนาบที่ตรวจพบได้)
anchorPlaneOrientations: ชุดค่าPlaneOrientation(Horizontal,VerticalหรือAny)anchorPlaneSemantics: ชุดค่าPlaneSemantic(Wall,Floor,Ceiling,TableหรือAny)
ปรับขนาดองค์ประกอบ
เมื่อมีตัวแก้ไข resizable() และเปิดใช้ ระบบจะแสดงตัวควบคุม UI ที่อนุญาตให้ผู้ใช้ปรับขนาดองค์ประกอบในพื้นที่ 3 มิติได้ ลักษณะการทำงานที่เฉพาะเจาะจงของการปรับขนาดจะกำหนดโดย resizePolicy ที่ระบุไว้ ดังนี้
ResizePolicy.default(): ระบบจะจัดการท่าทางสัมผัสเพื่อปรับขนาดโดยอัตโนมัติและใช้ขนาดใหม่กับเนื้อหาResizePolicy.custom(): ระบบจะแสดงSpatialResizeEventและไม่ใช้ผลลัพธ์ของการปรับขนาดกับองค์ประกอบที่เกี่ยวข้องโดยอัตโนมัติ
เปลี่ยนลักษณะที่ปรากฏของ Composable
alpha
ตัวแก้ไข alpha จะตั้งค่าความทึบแสงขององค์ประกอบและองค์ประกอบย่อย โดย 0f หมายถึงโปร่งใสทั้งหมด และ 1.0f หมายถึงทึบแสงทั้งหมด
scale
ตัวแก้ไข scale จะปรับขนาดเนื้อหาของ Composable ตามแกนแนวนอน แนวตั้ง และความลึก
การทดสอบและการช่วยเหลือพิเศษ
semantics
ตัวแก้ไข semantics จะเพิ่มความหมายให้กับโหนดเลย์เอาต์เพื่อใช้ในการทดสอบและการช่วยเหลือพิเศษ ดูความหมายใน Jetpack Compose และ SemanticsModifier
testTag
ตัวแก้ไข testTag เป็นตัวย่อของ SemanticsPropertyReceiver.testTag ซึ่งช่วยให้เฟรมเวิร์กการทดสอบค้นหาองค์ประกอบในการทดสอบได้