สร้างโลกของคุณเอง
ผู้เล่นและตัวละคร: ขั้นสูง
เลเยอร์การชนของกล้อง
7นาที
ภาพรวม zepetocamera ที่สร้างขึ้นผ่าน zepetoplayers สามารถควบคุมการชนทางกายภาพระหว่างกล้องและวัตถุในเกมได้ผ่านการตั้งค่าการชนของกล้อง การชนของกล้องคือเมื่อกล้องชนกับวัตถุในฉาก หากตั้งค่าการชนของกล้อง เมื่อกล้องชนกับวัตถุ มันจะไม่สามารถเคลื่อนที่ไปข้างหน้าของวัตถุได้ ทำให้กล้องอยู่ข้างหน้าของวัตถุแทนที่จะผ่านมันไป มาดูตัวอย่างสองตัวอย่างต่อไปนี้กันเถอะ ในหน้าจอทางซ้าย การชนของกล้องไม่ได้ตั้งค่า ทำให้กล้องเคลื่อนที่ได้อย่างอิสระโดยไม่ถูกวัตถุรอบตัวละครหรือพื้นกระทบ ทางขวา การชนของกล้องถูกเปิดใช้งาน ดังนั้นกล้องจะไม่สามารถทะลุผ่านกำแพงและพื้นเมื่อมันเคลื่อนที่ โดยการเปิดใช้งานการชนของกล้อง การเคลื่อนไหวของกล้องจะได้รับผลกระทบทางกายภาพ ซึ่งหมายความว่าสถานที่ที่ผู้เล่นไม่สามารถมองเห็นจะไม่สามารถถูกส่องสว่างโดยกล้อง ซึ่งช่วยให้มีการแสดงผลที่สมจริงมากขึ้น การตั้งค่าการชนของกล้อง zepetoplayers 1\) คุณสามารถตั้งค่าการชนที่กล้องตรวจจับต่อเลเยอร์ได้ ในการตั้งค่าหรือเพิ่มเลเยอร์ผู้ใช้ ให้กดเมนูเลเยอร์ในหน้าต่าง inspector และเลือก เพิ่มเลเยอร์ เลเยอร์ที่ผู้ใช้สามารถเพิ่มได้สามารถมีหมายเลขเป็น layer3 และ layer6 หรือสูงกว่า เลเยอร์0 2 และ layer4 5 เป็นเลเยอร์เริ่มต้นของ unity 2\) เลือกวัตถุที่คุณต้องการให้กล้องใช้การตัดสินใจเกี่ยวกับการชน และจากนั้นเลือกเลเยอร์ที่คุณตั้งค่าไว้ 3\) ตอนนี้ในส่วนกล้องของ zepetoplayers คุณสามารถเลือกเลเยอร์ที่ต้องการลงทะเบียนเป็นการชนโดยการกดปุ่มดรอปดาวน์สำหรับการชน ตรวจสอบเลเยอร์ที่คุณได้เพิ่มเข้าไปแล้ว 4\) ตอนนี้กดปุ่มเล่นเพื่อเรียกใช้งานและคุณจะเห็นว่ากล้อง zepeto เคลื่อนที่ผ่านพื้นและผนังโดยไม่ทำลายมัน ตั้งค่าเป็นสคริปต์ในระหว่างการทำงาน คุณสามารถกำหนดการชนของกล้องแบบไดนามิกในระหว่างการทำงานได้ ด้านล่างนี้คือสคริปต์เพื่อกำหนดหมายเลข collisionlayer ที่ลงทะเบียนเป็นตัวแปรสาธารณะในฐานะเลเยอร์มาสก์ในระหว่างการทำงาน กุญแจคือการกำหนดเลเยอร์มาสก์ที่จะเลือกใน zepetoplayers instance cameradata layer cameracollisionmanager import { layermask } from 'unityengine'; import { spawninfo, zepetoplayers } from 'zepeto character controller' import { zepetoscriptbehaviour } from 'zepeto script' import { worldservice } from 'zepeto world'; export default class cameracollisionmanager extends zepetoscriptbehaviour { // ประกาศสมาชิกสาธารณะเพื่อเก็บอาร์เรย์ของหมายเลขเลเยอร์การชน public collisionlayer number\[]; start() { // สร้างผู้เล่นท้องถิ่น zepetoplayers instance createplayerwithuserid(worldservice userid, new spawninfo(), true); // เพิ่มผู้ฟังเหตุการณ์เมื่อผู้เล่นท้องถิ่นถูกเพิ่มลงในฉาก zepetoplayers instance onaddedlocalplayer addlistener(() => { // ตั้งค่าเลเยอร์การชนของกล้องเป็นเลเยอร์มาสก์ใหม่ zepetoplayers instance zepetocamera collisionlayer = this setnewlayermask(); }); } // วิธีการสร้างและตั้งค่า layermask ใหม่ตามเลเยอร์การชน private setnewlayermask() layermask { let layermaskvalue = 0; // ทำซ้ำผ่านอาร์เรย์เลเยอร์การชนและอัปเดตค่าเลเยอร์มาสก์ this collisionlayer foreach(layernumber => { layermaskvalue |= 1 << layernumber; }); // สร้าง layermask ใหม่และตั้งค่าค่าของมันเป็นค่าที่คำนวณได้ let newlayermask layermask = new layermask; newlayermask value = layermaskvalue; return newlayermask; } } 3\ คำอธิบายสคริปต์ เพื่อที่จะเขียนสคริปต์เลเยอร์และนำไปใช้กับกล้อง เราจำเป็นต้องใช้ layermask layermask จะมีค่าที่ป้อนผ่านการดำเนินการแบบบิตไวส์ layermask แสดงเป็นค่าจำนวนเต็ม โดยที่แต่ละบิตบ่งบอกว่าเลเยอร์นั้นรวมอยู่ด้วยหรือไม่ ตัวอย่างเช่น หาก layermask มีค่าเป็น 5 (00000101 ในฐานสอง) เราสามารถพูดได้ว่าเลเยอร์ 0 และเลเยอร์ 2 รวมอยู่ด้วย layermaskvalue |= การดำเนินการแบบบิตไวส์นี้รวมค่า layermaskvalue ที่มีอยู่และค่าที่คำนวณใหม่ในปฏิบัติการ or หากค่า layermaskvalue ที่มีอยู่เป็น 00000001 ในฐานสอง และค่าที่คำนวณใหม่เป็น 00000100 การ or ค่าทั้งสองจะส่งผลให้ได้ 00000101 ในฐานสอง สิ่งนี้ทำให้แน่ใจว่าเลเยอร์ 0 และเลเยอร์ 2 รวมอยู่ใน layermask 📘 unity layer mask https //docs unity3d com/2020 3/documentation/scriptreference/layermask html https //docs unity3d com/2020 3/documentation/scriptreference/layermask html ในกรณีของ enhancedcamera เลเยอร์ player จะไม่ถูกตั้งค่าเป็นเลเยอร์การชนของกล้องเพื่อป้องกันไม่ให้กล้องตัดกันกับตัวละคร