สร้างโลกของคุณเอง
แชท

การใช้ฟังก์ชันแชทด้วยเสียง

23min

Zepeto.Voice.Chat รุ่นพรีวิวช่วยให้สามารถสนทนาด้วยเสียงในโลกได้.



ติดตั้ง ZEPETO.Voice.Chat และตั้งค่าโหมด

1) ติดตั้ง Windows → Package Manager → ZEPETO.Voice.Chat.

  • ฟีเจอร์นี้สามารถใช้ได้ในโลกที่มีการใช้งานองค์ประกอบหลายผู้เล่น.
  • การทดสอบสามารถทำได้เฉพาะในมือถือเท่านั้น ไม่สามารถทดสอบในตัวแก้ไขได้.
  • เนื่องจากนโยบายของ iOS เสียงของอุปกรณ์จะไม่ลดลงเป็นศูนย์เมื่อไมโครโฟนเปิดในโลกที่เปิดใช้งานการสนทนาด้วยเสียง. เสียงของอุปกรณ์จะลดลงเป็นศูนย์เมื่อไมโครโฟนปิด.



Document image


2) คลิกปุ่ม [▼] ในเมนูกลางของหน้าจอโปรเจกต์ Unity ที่กำลังพัฒนา. คลิกปุ่ม [เปิดการตั้งค่าโลก] ในเมนูป๊อปอัพที่ปรากฏขึ้น.

Document image




3) หากติดตั้งแพ็คเกจ ZEPETO.Voice.Chat อย่างถูกต้อง คุณจะเห็นตัวเลือกโหมด Voice Chat เพิ่มเข้ามา

Document image




4) ในโหมด Voice Chat กรุณาตั้งค่าโหมดที่ต้องการ

  • พื้นฐาน: ใช้ฟีเจอร์การสนทนาด้วยเสียงที่มีให้โดยค่าเริ่มต้น
  • สคริปต์: ใช้ฟีเจอร์การสนทนาด้วยเสียงโดยการใช้ API การสนทนาด้วยเสียง
    • คุณสามารถจัดการการเข้าหรือออกจากห้องสำหรับการสนทนาด้วยเสียงในระหว่างการทำงาน
    • ดำเนินการสนทนาด้วยเสียงสำหรับทีมที่แตกต่างกัน (เช่น การสนทนาด้วยเสียงของทีมแดงและการสนทนาด้วยเสียงของทีมฟ้า)
    • ตรวจจับผู้ใช้ที่กำลังพูดอยู่ในขณะนี้



โหมดพื้นฐาน: การใช้ฟีเจอร์แชทเสียง

โลกที่มีการแชทเสียงในโหมดพื้นฐานมีลักษณะดังนี้.

คุณยังสามารถสร้างการแชทเสียงที่สนุกสนานมากขึ้นโดยใช้ฟีเจอร์การปรับเสียง.

การแชทเสียงจะเปิดใช้งานโดยอัตโนมัติเมื่อเข้าสู่โลกที่มีฟังก์ชันการแชทเสียง.

👍 เมื่อคุณใช้ฟีเจอร์แชทเสียงใน ZEPETO เป็นครั้งแรก จะมีป๊อปอัพเกี่ยวกับการเข้าถึงไมโครโฟนปรากฏขึ้น. คุณต้องอนุญาตการเข้าถึงเพื่อใช้ฟังก์ชันการแชทเสียง.

เมื่อคุณเปิดใช้งานฟีเจอร์แชทเสียง ปุ่มจะปรากฏขึ้นโดยอัตโนมัติใน UI
เมื่อคุณเปิดใช้งานฟีเจอร์แชทเสียง ปุ่มจะปรากฏขึ้นโดยอัตโนมัติใน UI

คุณสามารถใช้มันได้โดยการสัมผัสปุ่มแชทเสียง
คุณสามารถใช้มันได้โดยการสัมผัสปุ่มแชทเสียง




  • ในแอป ZEPETO เวอร์ชัน 3.26.000 ขึ้นไป ไอคอนลำโพงแชทเสียงจะไม่ปรากฏ
  • หากคุณต้องการให้ไอคอนการพูดปรากฏ กรุณาเปลี่ยนเป็นโหมดสคริปต์และทำตามคำแนะนำเพื่อเขียนโค้ดของคุณเอง



โหมดสคริปต์ : การใช้ VoiceChat API

โหมดสคริปต์เปิดใช้งานการสนทนาด้วยเสียงในช่องที่แยกตามทีม.

โปรดดูคำอธิบายฟังก์ชันและตัวอย่างด้านล่างเพื่อดำเนินการฟีเจอร์นี้.

API

คำอธิบาย

OnInitializedEvent

API การสนทนาด้วยเสียงจะพร้อมใช้งานหลังจากเกิดเหตุการณ์ True ในเหตุการณ์เริ่มต้น หากเหตุการณ์นี้เป็น True การสนทนาด้วยเสียงจะพร้อมใช้งาน และหากเป็น False การสนทนาด้วยเสียงจะไม่พร้อมใช้งาน.

EnterRoom(RoomProperty roomProperty)

ฟังก์ชันเพื่อเข้าสู่ห้องสนทนาด้วยเสียง - หลังจากเข้าสู่ห้องสนทนาด้วยเสียงสำเร็จ ปุ่มสนทนาด้วยเสียงจะปรากฏขึ้น

ExitRoom()

ฟังก์ชันเพื่อออกจากห้องสนทนาด้วยเสียง

OnRoomConnectedEvent

เหตุการณ์เพื่อตรวจสอบสถานะการเข้าสู่ห้องสนทนาด้วยเสียง หากเหตุการณ์นี้เป็นจริง ผู้ใช้ได้เข้าสู่ห้องสนทนาด้วยเสียง; หากเป็นเท็จ ผู้ใช้ได้ออกจากห้องสนทนาด้วยเสียง.

OnSpeechDetectedEvent<string, boolean>

เหตุการณ์เพื่อตรวจจับผู้ใช้ที่กำลังพูดในห้องสนทนาด้วยเสียง - string คือ userId ของผู้ใช้ที่พูด - boolean เป็นจริงเมื่อเริ่มพูด และเป็นเท็จเมื่อพูดจบ

ChangeTeamID(number teamid)

ฟังก์ชันเพื่อเปลี่ยน TeamId ที่ใช้ในห้องสนทนาด้วยเสียง - สามารถตั้งค่าเป็นค่าจำนวนเต็ม 1 หรือมากกว่าเท่านั้น

คลาส RoomProperty

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
Document image




2) สร้างโปรเจกต์ > สร้าง > ZEPETO > TypeScript และเปลี่ยนชื่อเป็น VoiceChatTest.

3) เขียนสคริปต์ตัวอย่างตามที่แสดงด้านล่าง.

VoiceChatTest




  • คำอธิบายโค้ด
    • เมื่อสคริปต์ทำงาน มันจะลงทะเบียนเหตุการณ์บนปุ่มแต่ละปุ่มในฟังก์ชัน 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.

Document image




5) ทดสอบบนมือถือผ่าน QR code หรือลิงก์ทดสอบ และคุณจะเห็นว่าปุ่มเปิดใช้งานการสนทนาด้วยเสียงถูกสร้างขึ้นเมื่อกดปุ่ม Enter Team และเมื่อใดก็ตามที่ผู้เล่นพูด บันทึกจะแสดงว่าผู้เล่นคนใดอยู่ในการสนทนาด้วยเสียง ตามที่แสดงในหน้าจอด้านล่างนี้

Document image




ตัวอย่างการแสดงภาพฟองสนทนาด้วยเสียง

ในแอป ZEPETO เวอร์ชัน 3.26.000 และเวอร์ชันที่ใหม่กว่า ไอคอนการพูดคุยด้วยเสียงจะไม่ปรากฏ หากคุณต้องการให้ไอคอนการพูดคุยปรากฏ กรุณาทำตามคำแนะนำและเขียนโค้ดของคุณเอง

1) เพื่อแสดงฟองพูดเหนือหัวตัวละครเมื่อผู้เล่นอยู่ในการสนทนาด้วยเสียง คุณจะต้องสร้าง prefab ที่ใช้ภาพฟองพูด นำเข้าภาพฟองพูด PNG ที่คุณต้องการใช้ตามที่แสดงด้านล่างและเปลี่ยนประเภท Texture Type เป็น Sprite

Document image




2) โครงการ > สร้าง > Prefab และเปลี่ยนชื่อเป็น ChatBubble

Document image




3) ดับเบิลคลิกที่ prefab ChatBubble เพื่อเข้าสู่โหมดแก้ไข prefab เลือก prefab ChatBubble และเลือก Transform > Position > เปลี่ยนค่า Y เป็น 0.35

Document image




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.
Document image




5) สร้างภาพพูดคุยภายใน Canvas.

  • เพิ่ม Hierarchy > UI > Image เป็นลูกของ Canvas และเปลี่ยนชื่อเป็น ChatBubbleImage.
  • เปลี่ยนค่าของส่วนประกอบ RectTransform ของ ChatBubbleImage เป็นดังนี้
    • ความกว้าง 42, ความสูง:42
  • ลงทะเบียน Sprite รูปภาพที่คุณนำเข้ามาในขั้นตอนที่ 1 เป็น Source Image ในส่วนประกอบ Image.
Document image




👍 เคล็ดลับ

  • คุณยังสามารถทำให้ภาพสปริงพูดคุยเคลื่อนไหวได้ด้วย.
  • คุณยังสามารถใช้ภาพฟองที่แยกต่างหากสำหรับทีมที่แตกต่างกันได้.



6) โครงการ > สร้าง > ZEPETO > สร้าง TypeScript และเปลี่ยนชื่อเป็น VoiceChatBubbleController.

7) เขียนสคริปต์ตัวอย่างตามที่แสดงด้านล่างนี้.

VoiceChatBubbleController




  • คำอธิบายโค้ด
    • เมื่อสคริปต์ถูกเรียกใช้งาน มันจะลงทะเบียนเหตุการณ์บนปุ่มแต่ละปุ่มในฟังก์ชัน 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.

Document image




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

เม่น



นี่คือตัวอย่างสคริปต์การปรับเสียง.

JS

  • คำอธิบายโค้ด:
    • เพิ่มผู้ฟัง onClick สำหรับแต่ละปุ่มเพื่อตั้งค่าประเภทการปรับเสียงที่แตกต่างกัน.
      • องค์ประกอบของดัชนีเดียวกันใน ปุ่ม และ ประเภทเสียง จะถูกจับคู่.
    • เมื่อเข้าสู่โลก, VoiceChatController ถูกเริ่มต้น และการเชื่อมต่อห้องจะถูกสร้างขึ้นโดยอัตโนมัติ.
    • ประเภทการปรับเสียงเริ่มต้นถูกตั้งค่าเป็น Type00, และการวนกลับถูกเปิดใช้งานเพื่อฟังเสียงของคุณเอง.
      • โปรดทราบว่าการเรียกใช้ SetVoiceType และ EnableLoopback, การเชื่อมต่อห้องเป็นสิ่งจำเป็น ดังนั้นการตั้งค่าเริ่มต้นจะถูกจัดการภายในผู้ฟังของOnRoomConnectedEvent.



Document image




เปลี่ยนตำแหน่งการเล่นเสียงของผู้เล่นท้องถิ่น



คุณสามารถเปลี่ยนตำแหน่งการสนทนาด้วยเสียงของผู้เล่นท้องถิ่นโดยใช้ VoiceChatController.SetLocalPlayerTransform().

ใช้สิ่งนี้ คุณสามารถสร้างสถานการณ์ต่างๆ โดยการตั้งค่าตำแหน่งของคุณไปยังพื้นที่หรือวัตถุเฉพาะเมื่อพูดในแชทเสียง



📘 เคล็ดลับ การเปลี่ยนแปลงของแชทเสียงเชื่อมโยงกับการเปลี่ยนแปลงของตัวละคร ZEPETO ของผู้เล่นในท้องถิ่น

ดังนั้น หากตัวละคร ZEPETO ของผู้เล่นในท้องถิ่นยังไม่ได้ถูกสร้างในโลก เสียงของคุณอาจไม่ถูกส่งออกไป

ในกรณีนี้ คุณสามารถใช้แชทเสียงโดยการตั้งค่าตำแหน่งการเล่นเสียงภายในฉากปัจจุบันโดยใช้ SetLocalPlayerTransform().



API

คำอธิบาย

public static SetLocalPlayerTransform($transform: UnityEngine.Transform):void

ฟังก์ชันในการเปลี่ยนตำแหน่งการเล่นเสียงของผู้เล่นในท้องถิ่น



❗️ คำเตือน SetLocalPlayerTransform() ต้องถูกเรียกใช้หลังจาก VoiceChatController.OnInitializedEvent(true) เมื่อแชทเสียงถูกเริ่มต้น



1) ด้านล่างนี้คือตัวอย่างสคริปต์สำหรับฟังก์ชันการเปลี่ยนตำแหน่งเสียง

VoiceTransformSample


คำอธิบายโค้ด

  • เมื่อฉากเริ่มต้น สร้างวัตถุเกมที่เรียกว่า 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.

Document image




3) หากคุณใช้งานบนโทรศัพท์มือถือโดยใช้ QR code หรือลิงก์ทดสอบ คุณสามารถตรวจสอบสิ่งต่อไปนี้ได้.

  • เมื่อคุณกดปุ่ม Closer เสียงของคุณจะดังใกล้ชิดกับคนอื่นๆ.
  • เมื่อคุณกดปุ่ม Farther เสียงของคุณจะได้ยินห่างไกลจากคนอื่นๆ.