ฉันสามารถโหลดข้อมูลในพื้นหลังในขณะที่หน้าจอ Unity splash ได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
ฉันกำลังพยายามเรียกใช้รหัสในหน้าจอเริ่มต้นไม่ใช่แค่โหลดเนื้อหา
ฉันยังไม่ได้สามารถที่จะหาข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ใน Google หรือเอกสารสามัคคี
ฉันสามารถโหลดข้อมูลในพื้นหลังในขณะที่หน้าจอ Unity splash ได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
ฉันกำลังพยายามเรียกใช้รหัสในหน้าจอเริ่มต้นไม่ใช่แค่โหลดเนื้อหา
ฉันยังไม่ได้สามารถที่จะหาข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ใน Google หรือเอกสารสามัคคี
คำตอบ:
ฉันเพิ่งทำการทดสอบและพบว่าตัวสร้างของวัตถุในฉากแรกนั้นถูกเรียกจริง ๆ ในขณะที่หน้าจอยังคงปรากฏขึ้น
นี่คือเวลาที่ฉันวัดด้วยนาฬิกาจับเวลาแบบคงที่:
Constructed 0 s
Awake 2.118 s
OnEnable 2.12 s
Start 2.744 s
First Update 2.919 s
ดังนั้นดูเหมือนว่าเราสามารถทริกเกอร์สคริปต์ให้ทำงานเกือบ 3 วินาทีก่อนสิ้นสุดหน้าจอเริ่มต้น (ด้วยการตั้งค่าเริ่มต้น) โดยการปิดสคริปต์จากตัวสร้าง คุณสามารถลองเรียกรหัสโหลดของคุณ (อาจเป็นไปได้ในเธรดของตนเอง) จากที่นั่น
เพียงแค่ระวังว่าสิ่งนี้อาจถูกเรียกจากเธรดการโหลดดังนั้นเนื่องจากเราไม่ได้อยู่ในเธรดหลักเราจะมีข้อ จำกัด อีกเล็กน้อยกับสิ่งที่เราได้รับอนุญาตให้ทำที่นี่ หากมีบางสิ่งที่คุณพยายามทำซึ่งไม่ได้รับการสนับสนุนบนเธรดการโหลดให้ลองโพสต์คำถามใหม่พร้อมรายละเอียดแอปพลิเคชันของคุณและเราสามารถลองหาวิธีแก้ปัญหาสำหรับกรณีนี้
Update()
ติ๊กครั้งแรก2.9 วินาทีหลังจากตัวสร้างเริ่มทำงาน นั่นคือทั้งหมดที่ฉันสามารถมองเห็นได้ด้วยเครื่องมือปัจจุบัน
ทางออกที่ดีที่สุดของคุณคือสร้างหน้าจอการโหลดของคุณเองและตั้งเป็นฉากเริ่มต้น จากฉากง่าย ๆ นั้นให้ใช้ตัวจัดการฉากเพื่อโหลดฉากถัดไปในพื้นหลังแบบอะซิงโครนัสในพื้นหลังถ่ายทอดสด
ฉันไม่พบข้อมูลเพื่อยืนยันสิ่งนี้ แต่จากการสังเกตของฉันดูเหมือนว่า Unity กำลังโหลดฉากเริ่มต้นของคุณในขณะที่กำลังแสดงหน้าจอสแปลช
ในบางแพลตฟอร์มเกมจะเริ่มทำงานก่อนที่หน้าจอเริ่มต้นจะหายไปหากการโหลดเร็วพอ
ทั้งหมดนี้สามารถเปลี่ยนแปลงได้ตลอดเวลาบนแพลตฟอร์มใด ๆ ในการปรับปรุงรุ่นใด ๆ ไม่มีการรับประกันว่าสิ่งนี้จะสอดคล้องกันดังนั้นคุณจึงควรใช้หน้าจอการโหลดของคุณเอง
คำตอบสั้น ๆ คือไม่คุณไม่สามารถทำได้
คำตอบทั้งสองข้างต้นนั้นถูกต้องในแง่ของการจัดการฉาก คุณสามารถใช้โปรแกรมจัดการฉากเพื่อโหลดฉากและเนื่องจากมันเป็น async คุณจึงสามารถเรียกใช้รหัสอื่นในแบบคู่ขนาน
ดูที่เอกสารของSceneManager.LoadSceneสำหรับรายละเอียดเพิ่มเติม
สิ่งที่ใกล้เคียงที่สุดที่คุณสามารถเรียกใช้รหัสของคุณให้เร็วที่สุดเท่าที่จะเป็นไปได้หลังจากที่เกมเริ่มขึ้นแล้วเรียกใช้จากฉากแรกด้วยรอยขนาดเล็ก ขอเรียกว่าฉากสาด สิ่งเดียวที่มันจะมีคือภาพสแปลชและคอนโทรลเลอร์ที่ใช้งานโค้ดที่จำเป็นและโหลดฉากอื่น
เนื่องจากมีขนาดเล็กจึงสามารถโหลดได้อย่างรวดเร็วและทำให้โค้ดของคุณทำงานเกือบจะทันที จากนั้นคุณสามารถทำสิ่งที่คุณต้องทำและโหลดฉากอื่น ๆภายหลัง
อีกสิ่งที่คุณสามารถลองได้คือการลบ "หน้าจอเริ่มต้น" ลบภาพใด ๆ ที่คุณต้องการแสดงที่นั่น มันจะเร็วขึ้นอีกเล็กน้อยเนื่องจากจะไม่โหลดในตอนแรก
ดังนั้นการไหลจะเป็นดังนี้:
ฉากที่เล็กลงก็จะโหลดเร็วขึ้น คุณสามารถใช้สิ่งที่ต้องการเช่นตัวควบคุมการสาดที่แนบกับวัตถุใด ๆ ในหน้าจอเริ่มต้นที่โหลด
using UnityEngine;
using UnityEngine.SceneManagement;
public class SplashController: MonoBehaviour
{
void Start()
{
// RunSomeSyncMethod();
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}