การใช้ฟังก์ชันแชทด้วยเสียง
Zepeto.Voice.Chat รุ่นพรีวิวช่วยให้สามารถสนทนาด้วยเสียงในโลกได้.
1) ติดตั้ง Windows → Package Manager → ZEPETO.Voice.Chat.
- ฟีเจอร์นี้สามารถใช้ได้ในโลกที่มีการใช้งานองค์ประกอบหลายผู้เล่น.
- การทดสอบสามารถทำได้เฉพาะในมือถือเท่านั้น ไม่สามารถทดสอบในตัวแก้ไขได้.
- เนื่องจากนโยบายของ iOS เสียงของอุปกรณ์จะไม่ลดลงเป็นศูนย์เมื่อไมโครโฟนเปิดในโลกที่เปิดใช้งานการสนทนาด้วยเสียง. เสียงของอุปกรณ์จะลดลงเป็นศูนย์เมื่อไมโครโฟนปิด.
2) คลิกปุ่ม [▼] ในเมนูกลางของหน้าจอโปรเจกต์ Unity ที่กำลังพัฒนา. คลิกปุ่ม [เปิดการตั้งค่าโลก] ในเมนูป๊อปอัพที่ปรากฏขึ้น.
3) หากติดตั้งแพ็คเกจ ZEPETO.Voice.Chat อย่างถูกต้อง คุณจะเห็นตัวเลือกโหมด Voice Chat เพิ่มเข้ามา
4) ในโหมด Voice Chat กรุณาตั้งค่าโหมดที่ต้องการ
- พื้นฐาน: ใช้ฟีเจอร์การสนทนาด้วยเสียงที่มีให้โดยค่าเริ่มต้น
- สคริปต์: ใช้ฟีเจอร์การสนทนาด้วยเสียงโดยการใช้ API การสนทนาด้วยเสียง
- คุณสามารถจัดการการเข้าหรือออกจากห้องสำหรับการสนทนาด้วยเสียงในระหว่างการทำงาน
- ดำเนินการสนทนาด้วยเสียงสำหรับทีมที่แตกต่างกัน (เช่น การสนทนาด้วยเสียงของทีมแดงและการสนทนาด้วยเสียงของทีมฟ้า)
- ตรวจจับผู้ใช้ที่กำลังพูดอยู่ในขณะนี้
โลกที่มีการแชทเสียงในโหมดพื้นฐานมีลักษณะดังนี้.
คุณยังสามารถสร้างการแชทเสียงที่สนุกสนานมากขึ้นโดยใช้ฟีเจอร์การปรับเสียง.
การแชทเสียงจะเปิดใช้งานโดยอัตโนมัติเมื่อเข้าสู่โลกที่มีฟังก์ชันการแชทเสียง.
👍 เมื่อคุณใช้ฟีเจอร์แชทเสียงใน ZEPETO เป็นครั้งแรก จะมีป๊อปอัพเกี่ยวกับการเข้าถึงไมโครโฟนปรากฏขึ้น. คุณต้องอนุญาตการเข้าถึงเพื่อใช้ฟังก์ชันการแชทเสียง.
- ในแอป ZEPETO เวอร์ชัน 3.26.000 ขึ้นไป ไอคอนลำโพงแชทเสียงจะไม่ปรากฏ
- หากคุณต้องการให้ไอคอนการพูดปรากฏ กรุณาเปลี่ยนเป็นโหมดสคริปต์และทำตามคำแนะนำเพื่อเขียนโค้ดของคุณเอง
โหมดสคริปต์เปิดใช้งานการสนทนาด้วยเสียงในช่องที่แยกตามทีม.
โปรดดูคำอธิบายฟังก์ชันและตัวอย่างด้านล่างเพื่อดำเนินการฟีเจอร์นี้.
API | คำอธิบาย |
---|---|
OnInitializedEvent | API การสนทนาด้วยเสียงจะพร้อมใช้งานหลังจากเกิดเหตุการณ์ True ในเหตุการณ์เริ่มต้น หากเหตุการณ์นี้เป็น True การสนทนาด้วยเสียงจะพร้อมใช้งาน และหากเป็น False การสนทนาด้วยเสียงจะไม่พร้อมใช้งาน. |
EnterRoom(RoomProperty roomProperty) | ฟังก์ชันเพื่อเข้าสู่ห้องสนทนาด้วยเสียง - หลังจากเข้าสู่ห้องสนทนาด้วยเสียงสำเร็จ ปุ่มสนทนาด้วยเสียงจะปรากฏขึ้น |
ExitRoom() | ฟังก์ชันเพื่อออกจากห้องสนทนาด้วยเสียง |
OnRoomConnectedEvent | เหตุการณ์เพื่อตรวจสอบสถานะการเข้าสู่ห้องสนทนาด้วยเสียง หากเหตุการณ์นี้เป็นจริง ผู้ใช้ได้เข้าสู่ห้องสนทนาด้วยเสียง; หากเป็นเท็จ ผู้ใช้ได้ออกจากห้องสนทนาด้วยเสียง. |
OnSpeechDetectedEvent<string, boolean> | เหตุการณ์เพื่อตรวจจับผู้ใช้ที่กำลังพูดในห้องสนทนาด้วยเสียง - string คือ userId ของผู้ใช้ที่พูด - boolean เป็นจริงเมื่อเริ่มพูด และเป็นเท็จเมื่อพูดจบ |
ChangeTeamID(number teamid) | ฟังก์ชันเพื่อเปลี่ยน TeamId ที่ใช้ในห้องสนทนาด้วยเสียง - สามารถตั้งค่าเป็นค่าจำนวนเต็ม 1 หรือมากกว่าเท่านั้น |
API | คำอธิบาย |
---|---|
SetAudioMode | โหมดเสียงที่จะใช้ในการสนทนาทางเสียง - AudioMode.Omnidirectional: โหมดสนทนาทางเสียงที่ไม่มีการลดเสียงตามระยะทาง (คุณสามารถใช้มันได้ทั้งกับหรือไม่มีตัวละคร ZEPETO) - AudioMode.Directional: โหมดสนทนาทางเสียงที่มีการลดเสียงตามระยะทาง (ตัวละคร ZEPETO ต้องมีอยู่ในฉาก เนื่องจากโหมดนี้ทำงานตามตำแหน่งของตัวละคร ZEPETO) |
SetTeamID | TeamId ที่จะใช้ในการสนทนาทางเสียงเพื่อเปิดใช้งานการสนทนาทางเสียงระหว่างผู้ใช้ที่มี TeamId เดียวกัน - สามารถตั้งค่าเป็นค่า int ที่ 1 หรือสูงกว่าเท่านั้น |
นี่คือตัวอย่างโค้ดเพื่อทดลองใช้ Voice Chat API.
1) เพิ่มปุ่มและบันทึกข้อความลงบนผืนผ้าใบตามที่แสดงในภาพด้านล่างเพื่อเข้าสู่ช่องทีม Voice Chat และแสดงบันทึกสถานะ
- ปุ่ม
- Button_blueTeam : ปุ่มเข้าสู่การสนทนาของทีมสีน้ำเงิน
- Button_redTeam : ปุ่มเข้าสู่การสนทนาของทีมสีแดง
- Button_exit : ปุ่มออกจากการสนทนา
- ข้อความ
- Text_log : ข้อความเพื่อแสดงบันทึกการสนทนา
- Text_team : ข้อความเพื่อแสดงรายชื่อสมาชิกในช่องทีม Voice Chat เดียวกัน
- Text_currentSpeaking : ข้อความเพื่อแสดง UserId ของผู้ที่กำลังพูดใน Voice Chat
2) สร้างโปรเจกต์ > สร้าง > ZEPETO > TypeScript และเปลี่ยนชื่อเป็น VoiceChatTest.
3) เขียนสคริปต์ตัวอย่างตามที่แสดงด้านล่าง.
- คำอธิบายโค้ด
- เมื่อสคริปต์ทำงาน มันจะลงทะเบียนเหตุการณ์บนปุ่มแต่ละปุ่มในฟังก์ชัน Start() และลงทะเบียนเหตุการณ์ OnInitialized, OnRoomConnected, และ OnSpeechDetected บน VoiceChatController.
- เมื่อปุ่มทีมสีน้ำเงินหรือปุ่มทีมสีแดงถูกคลิก ฟังก์ชัน EnterVoiceChatRoom() จะถูกเรียกใช้และผู้ใช้จะเข้าสู่ห้องแชทเสียงโดยการป้อน RoomProperty ที่กำหนดไว้ คุณสมบัติของห้องในตัวอย่างมีดังนี้
- roomProperty.SetAudioMode : AudioMode.Omnidirectional. โหมดเสียง Omnidirectional เป็นโหมดที่เสียงมีระดับเสียงเหมือนกันไม่ว่าจะอยู่ในตำแหน่งใดของผู้เล่น ในทางตรงกันข้าม โหมด Directional เป็นโหมดเสียง 3D ซึ่งหมายความว่าระดับเสียงจะฟังแตกต่างกันขึ้นอยู่กับตำแหน่งของตัวละคร ดังนั้นยิ่งตัวละครอยู่ไกล เสียงก็จะยิ่งเบาลง.
- roomProperty.SetTeamID : ช่อง 2 สำหรับทีมสีน้ำเงิน ช่อง 3 สำหรับทีมสีแดง SetTeamID ทำหน้าที่เหมือนช่องใน Voice Chat ทีมที่เข้าสู่ช่อง 2 สามารถแชทเสียงกับผู้เล่นในช่อง 2 เท่านั้น และทีมที่เข้าสู่ช่อง 3 สามารถแชทเสียงกับผู้เล่นในช่อง 3 เท่านั้น.
- ExitVoiceChatRoom() จะออกจากช่องทีมแชทเสียงปัจจุบัน.
- OnSpeechDetected() จะส่งออก ID ของผู้เล่นที่กำลังใช้แชทเสียงในช่องทีมไปยังข้อความบันทึก.
4) หลังจากเสร็จสิ้นสคริปต์ ให้กำหนดปุ่มและข้อความที่สร้างขึ้นในขั้นตอนที่ 1 ใน Inspector.
5) ทดสอบบนมือถือผ่าน QR code หรือลิงก์ทดสอบ และคุณจะเห็นว่าปุ่มเปิดใช้งานการสนทนาด้วยเสียงถูกสร้างขึ้นเมื่อกดปุ่ม Enter Team และเมื่อใดก็ตามที่ผู้เล่นพูด บันทึกจะแสดงว่าผู้เล่นคนใดอยู่ในการสนทนาด้วยเสียง ตามที่แสดงในหน้าจอด้านล่างนี้
ในแอป ZEPETO เวอร์ชัน 3.26.000 และเวอร์ชันที่ใหม่กว่า ไอคอนการพูดคุยด้วยเสียงจะไม่ปรากฏ หากคุณต้องการให้ไอคอนการพูดคุยปรากฏ กรุณาทำตามคำแนะนำและเขียนโค้ดของคุณเอง
1) เพื่อแสดงฟองพูดเหนือหัวตัวละครเมื่อผู้เล่นอยู่ในการสนทนาด้วยเสียง คุณจะต้องสร้าง prefab ที่ใช้ภาพฟองพูด นำเข้าภาพฟองพูด PNG ที่คุณต้องการใช้ตามที่แสดงด้านล่างและเปลี่ยนประเภท Texture Type เป็น Sprite
2) โครงการ > สร้าง > Prefab และเปลี่ยนชื่อเป็น ChatBubble
3) ดับเบิลคลิกที่ prefab ChatBubble เพื่อเข้าสู่โหมดแก้ไข prefab เลือก prefab ChatBubble และเลือก Transform > Position > เปลี่ยนค่า Y เป็น 0.35
4) สร้าง Canvas ภายในวัตถุ prefab.
- ดับเบิลคลิกที่ prefab ChatBubble เพื่อเข้าสู่โหมดแก้ไข prefab จากนั้นเพิ่ม Hierachy > UI > Canvas.
- เปลี่ยนค่าของส่วนประกอบ RectTransform ของ Canvas เป็นดังนี้
- PosX: 0 , posY: 0
- ความกว้าง: 100, ความสูง: 100
- ScaleX: 0.005, ScaleY: 0.005, ScaleZ: 0.005
- เปลี่ยน RenderMove ของส่วนประกอบ Canvas เป็น World Space.
5) สร้างภาพพูดคุยภายใน Canvas.
- เพิ่ม Hierarchy > UI > Image เป็นลูกของ Canvas และเปลี่ยนชื่อเป็น ChatBubbleImage.
- เปลี่ยนค่าของส่วนประกอบ RectTransform ของ ChatBubbleImage เป็นดังนี้
- ความกว้าง 42, ความสูง:42
- ลงทะเบียน Sprite รูปภาพที่คุณนำเข้ามาในขั้นตอนที่ 1 เป็น Source Image ในส่วนประกอบ Image.
👍 เคล็ดลับ
- คุณยังสามารถทำให้ภาพสปริงพูดคุยเคลื่อนไหวได้ด้วย.
- คุณยังสามารถใช้ภาพฟองที่แยกต่างหากสำหรับทีมที่แตกต่างกันได้.
6) โครงการ > สร้าง > ZEPETO > สร้าง TypeScript และเปลี่ยนชื่อเป็น VoiceChatBubbleController.
7) เขียนสคริปต์ตัวอย่างตามที่แสดงด้านล่างนี้.
- คำอธิบายโค้ด
- เมื่อสคริปต์ถูกเรียกใช้งาน มันจะลงทะเบียนเหตุการณ์บนปุ่มแต่ละปุ่มในฟังก์ชัน Start() และเหตุการณ์ OnInitialized, OnRoomConnected, และ OnSpeechDetected บน VoiceChatController.
- หลังจาก OnInitialized() ปุ่ม Voice Chat จะถูกแสดงบนหน้าจอของผู้เล่นเมื่อพวกเขาเข้าสู่โลก และเมื่อพวกเขากดปุ่ม EnterVoiceChatRoom() จะถูกเรียกใช้งานเพื่อเข้าสู่ห้อง Voice Chat.
- เมื่อใดก็ตามที่ผู้เล่นเปิดใช้งาน VoiceChat และพูด OnSpeechDetected() จะถูกเรียกใช้งาน และถ้า speechDetected เป็น true วัตถุ BubbleChat จะถูกเปิดใช้งาน และถ้า false จะถูกปิดใช้งาน.
- เมื่อฟังก์ชัน OnSpeechDetected() ถูกเรียกใช้งานครั้งแรก CreateVoiceBubble() จะสร้าง GameObject voiceChatPrefab เพื่อให้ลอยอยู่เหนือหัวของผู้เล่นและลงทะเบียนเป็นข้อมูลแผนที่ใน _voiceBubbleMap.
- เราใช้ LateUpdate() เพื่ออัปเดตการหมุนของฟองเสียงทุกเฟรมให้ตรงกับ CameraParent ของโลก ZEPETO ซึ่งทำให้แน่ใจว่าภาพฟองเสียงจะหันไปทางกล้องเสมอ มันจะตรวจสอบก่อนว่า _voiceBubbleMap ว่างหรือไม่ ถ้าไม่ว่างก็จะอัปเดตการหมุนของภาพฟองเสียง prefab.
8) หลังจากเขียนสคริปต์เสร็จแล้ว ให้กำหนด VoiceChatPrefab ใน inspector เป็น prefab ฟองเสียงที่คุณสร้างในขั้นตอนที่ 1.
9) เรียกใช้งานบนมือถือผ่าน QR code หรือลิงก์ทดสอบ และคุณควรเห็นภาพฟองเสียงปรากฏอยู่เหนือหัวของตัวละครเมื่อผู้เล่นใช้เสียงแชท.
เริ่มต้นด้วย Voice Chat เวอร์ชัน 0.2.1-preview คุณสามารถปรับเสียง Voice Chat ในโหมดสคริปต์ได้
ลองปรับเสียงด้วยการใช้คู่มือ API และโค้ดตัวอย่าง
ประเภทเสียง (enum) | ค่า | คำอธิบาย |
---|---|---|
ประเภท00 | 0 | ต้นฉบับ |
ประเภท01 | 1 | ชิปมังค์ |
ประเภท02 | 2 | ลุง |
ประเภท03 | 3 | เอคโค่ |
ประเภท04 | 4 | เสียงลึก |
ประเภท05 | 5 | หุ่นยนต์ |
ประเภท06 | 6 | สำเนียง |
ประเภท07 | 7 | เมกะโฟน |
ประเภท08 | 8 | สัตว์ร้าย |
ประเภท09 | 9 | เครื่องจักร |
ประเภท10 | 10 | กระแสไฟฟ้าแรง |
ประเภท11 | 11 | เด็ก |
ประเภท12 | 12 | เม่น |
นี่คือตัวอย่างสคริปต์การปรับเสียง.
- คำอธิบายโค้ด:
- เพิ่มผู้ฟัง onClick สำหรับแต่ละปุ่มเพื่อตั้งค่าประเภทการปรับเสียงที่แตกต่างกัน.
- องค์ประกอบของดัชนีเดียวกันใน ปุ่ม และ ประเภทเสียง จะถูกจับคู่.
- เมื่อเข้าสู่โลก, VoiceChatController ถูกเริ่มต้น และการเชื่อมต่อห้องจะถูกสร้างขึ้นโดยอัตโนมัติ.
- ประเภทการปรับเสียงเริ่มต้นถูกตั้งค่าเป็น Type00, และการวนกลับถูกเปิดใช้งานเพื่อฟังเสียงของคุณเอง.
- โปรดทราบว่าการเรียกใช้ SetVoiceType และ EnableLoopback, การเชื่อมต่อห้องเป็นสิ่งจำเป็น ดังนั้นการตั้งค่าเริ่มต้นจะถูกจัดการภายในผู้ฟังของOnRoomConnectedEvent.
คุณสามารถเปลี่ยนตำแหน่งการสนทนาด้วยเสียงของผู้เล่นท้องถิ่นโดยใช้ VoiceChatController.SetLocalPlayerTransform().
ใช้สิ่งนี้ คุณสามารถสร้างสถานการณ์ต่างๆ โดยการตั้งค่าตำแหน่งของคุณไปยังพื้นที่หรือวัตถุเฉพาะเมื่อพูดในแชทเสียง
📘 เคล็ดลับ การเปลี่ยนแปลงของแชทเสียงเชื่อมโยงกับการเปลี่ยนแปลงของตัวละคร ZEPETO ของผู้เล่นในท้องถิ่น
ดังนั้น หากตัวละคร ZEPETO ของผู้เล่นในท้องถิ่นยังไม่ได้ถูกสร้างในโลก เสียงของคุณอาจไม่ถูกส่งออกไป
ในกรณีนี้ คุณสามารถใช้แชทเสียงโดยการตั้งค่าตำแหน่งการเล่นเสียงภายในฉากปัจจุบันโดยใช้ SetLocalPlayerTransform().
API | คำอธิบาย |
---|---|
public static SetLocalPlayerTransform($transform: UnityEngine.Transform):void | ฟังก์ชันในการเปลี่ยนตำแหน่งการเล่นเสียงของผู้เล่นในท้องถิ่น |
❗️ คำเตือน SetLocalPlayerTransform() ต้องถูกเรียกใช้หลังจาก VoiceChatController.OnInitializedEvent(true) เมื่อแชทเสียงถูกเริ่มต้น
1) ด้านล่างนี้คือตัวอย่างสคริปต์สำหรับฟังก์ชันการเปลี่ยนตำแหน่งเสียง
คำอธิบายโค้ด
- เมื่อฉากเริ่มต้น สร้างวัตถุเกมที่เรียกว่า voiceTransformObject ใน Start() ฟังก์ชันและลงทะเบียน Transform ใน voiceTransform.
- เมื่อการสนทนาเสียง OnInitialized ถูกเรียก กรุณาใช้การตั้งค่าต่อไปนี้:
- ตั้งค่าการสนทนาเสียงเป็นโหมดเสียง 3D ผ่าน SetAudioMode(AudioMode.Directional).
- ตั้งค่าตำแหน่งการสนทนาเสียงของผู้เล่นท้องถิ่นเป็น voiceTransform ผ่าน VoiceChatController.SetLocalPlayerTransform().
- buttonCloserTransform ตั้งค่าตำแหน่งของ voiceTransform เป็นจุดกำเนิด (0, 0, 0) เมื่อปุ่มถูกคลิก.
- buttonFartherTransform ตั้งค่าตำแหน่งของ voiceTransform เป็น (10, 0, 0) เมื่อปุ่มถูกคลิก.
2) ลงทะเบียนปุ่มบน Canvas ในฉากไปยัง buttonCloserTransform และ buttonFartherTransform ของคอมโพเนนต์ VoiceTransformSample.
3) หากคุณใช้งานบนโทรศัพท์มือถือโดยใช้ QR code หรือลิงก์ทดสอบ คุณสามารถตรวจสอบสิ่งต่อไปนี้ได้.
- เมื่อคุณกดปุ่ม Closer เสียงของคุณจะดังใกล้ชิดกับคนอื่นๆ.
- เมื่อคุณกดปุ่ม Farther เสียงของคุณจะได้ยินห่างไกลจากคนอื่นๆ.