ใช้พื้นผิวการแสดงผลเพื่อแสดงเนื้อหาของฉากอื่นเป็นพื้นผิว
สภาพแวดล้อมการตรวจสอบ
- หน้าต่าง
-
- หน้าต่าง 11
- บรรณาธิการ Unity
-
- ปี 2021.3.3f1
- แพ็คเกจระบบอินพุต
-
- 1.3.0
ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้
การตั้งค่าต่อไปนี้ได้ทําไว้ล่วงหน้าเพื่อเป็นหลักฐานสําหรับคําอธิบายของเคล็ดลับนี้
ทีแรก
การแสดงผลพื้นผิวช่วยให้คุณสามารถเขียนภาพวาดของคุณไปยังพื้นผิวแทนหน้าจอ สิ่งนี้ช่วยให้คุณสร้างพื้นผิวได้อย่างอิสระในระหว่างการดําเนินการเกมโดยไม่ต้องเตรียมภาพพื้นผิวล่วงหน้า
นอกจากนี้คุณยังสามารถเขียนไปยังพื้นผิวการแสดงผลที่เปลี่ยนแปลงแบบไดนามิกทุกเฟรมเช่นเพื่อฉายภาพที่แตกต่างจากกล้องหลักบนจอแสดงผลที่มีอยู่ในเกม
การเตรียมภาพ
เมื่อใช้พื้นผิวเรนเดอร์คุณไม่จําเป็นต้องเตรียมภาพ แต่คุณสามารถเตรียมเป็นตัวอย่างเพื่อให้เข้าใจผลการวาดภาพได้ง่ายขึ้น
การสร้างพื้นผิวการแสดงผล
สร้างเนื้อหาจากโครงการ จาก สร้าง ให้เลือก Render Texture
ชื่อสามารถโดยพลการ เนื่องจากไม่ได้ระบุชื่อโดยตรงจาก NewRenderTexture
ภายนอกในเวลานี้ให้ปล่อยให้เป็น .
เลือกพื้นผิวการแสดงผลและระบุขนาดจากตัวตรวจสอบ เนื่องจากพื้นผิวการแสดงผลเป็นพื้นที่วาดภาพคุณต้องระบุขนาด คราวนี้ฉันต้องการเขียนฉากที่สร้างขึ้นแยกต่างหากดังนั้นฉันจึงตั้งค่าอัตราส่วนภาพเป็น 16:9
การตั้งค่าปลายทางการแสดงผลพื้นผิว
เลือก "UI" > "Raw Image" จากลําดับชั้นของฉากที่สร้างขึ้นในตอนแรก แสดงเนื้อหาของพื้นผิวการแสดงผลในวัตถุนี้ มันเป็นวัตถุของ UI แต่สิ่งที่คุณต้องการคือส่วนประกอบ "ภาพดิบ" ซึ่งสามารถตั้งค่าเป็นวัตถุอื่นได้
RawImage ถูกวางไว้แล้ว เนื่องจากเป็นวัตถุ UI จึงถูกวางไว้ใน Canvas ฉันยังไม่ได้ตั้งค่าอะไรดังนั้นฉันเพิ่งได้รับสี่เหลี่ยมผืนผ้าสีขาว
เราต้องการให้สเกลเท่ากันดังนั้นเราจึงกําหนดขนาดของวัตถุ RawImage ให้เหมือนกับพื้นผิวการแสดงผล ถ้าคุณรักษาอัตราส่วนกว้างยาวให้เท่าเดิม ผลลัพธ์การวาดจะถูกปรับขนาดแม้ว่าคุณจะเปลี่ยนขนาด แต่ถ้าคุณเปลี่ยนอัตราส่วนกว้างยาว ผลลัพธ์การวาดจะถูกบดขยี้ในแนวตั้งหรือแนวนอน
ส่วนประกอบ Raw Image ของวัตถุ RawImage มี "พื้นผิว" ดังนั้นให้ตั้งค่าพื้นผิวการแสดงผลที่คุณเพิ่งสร้างขึ้นที่นั่น เนื้อหาของพื้นผิวการแสดงผลยังคงว่างเปล่าดังนั้นจึงโปร่งใสในมุมมอง
การสร้างฉากของเนื้อหาการวาดภาพพื้นผิว
จากนั้นสร้างฉากใหม่เพื่อสร้างเนื้อหาที่จะวาดในพื้นผิวการแสดงผล เลือก ไฟล์ จากเมนูแล้วเลือก ฉากใหม่
เนื่องจากตัวอย่างนี้เป็นแบบ 2 มิติ คุณจะเลือกฉาก 2 มิติได้เช่นกัน
สร้างในโฟลเดอร์ Scene SampleSceneTexture
ทิ้งชื่อไว้เป็น .
หลังจากสร้างฉากแล้วให้วางวัตถุอย่างเหมาะสม สิ่งที่คุณต้องทําคือตรวจสอบให้แน่ใจว่าคุณรู้เนื้อหาของพื้นผิวการแสดงผล เพื่อยืนยันว่าสิ่งที่ยื่นออกมานอกกล้องไม่ได้ถูกวาดสไปรท์จะถูกวางไว้ใกล้กับกรอบกล้องด้วย
หากวัตถุทับซ้อนกันบริบทของวัตถุจะไม่แน่นอนดังนั้นหากคุณมีพื้นหลังให้ลดลําดับของเลเยอร์พื้นหลัง
หลังจากเลือก "MainCamera" ให้ตั้งค่าพื้นผิวการแสดงผลใน "พื้นผิวเป้าหมาย" สิ่งนี้ทําให้ภาพวาดถูกวาดในพื้นผิวการแสดงผล
ถอดคอมโพเนนต์ Audio Listener ที่ตั้งค่าไว้เป็น MainCamera ออก สิ่งที่คุณต้องมีสําหรับพื้นผิวการแสดงผลคือการวาดภาพดังนั้นคุณไม่จําเป็นต้องมี Audio Listener คําเตือนจะปรากฏขึ้นหากมี "ผู้ฟังเสียง" หลายคนขณะรันไทม์
อย่างไรก็ตามหากคุณเรียกใช้ฉากสําหรับพื้นผิวการแสดงผลในสถานะนี้จะไม่มีอะไรปรากฏบนหน้าจอ นี่เป็นเพราะคุณกําลังวาดภาพบนพื้นผิวเรนเดอร์ หากคุณต้องการตรวจสอบบนหน้าจอให้ลบ "พื้นผิวเป้าหมาย" แล้วดําเนินการ
การตั้งค่าเลเยอร์
ในตัวอย่างนี้คุณจะต้องย้ายสองฉากในเวลาเดียวกัน แต่ถ้าคุณย้ายพวกเขาตามที่เป็นอยู่เนื้อหาที่จะวาดในพื้นผิวการแสดงผลจะปรากฏบนหน้าจอหลักดังนั้นเลเยอร์จะไม่ถูกวาดแยกต่างหาก
ขั้นแรกให้เลือก "แก้ไขเลเยอร์" จากเลเยอร์ที่มุมขวาบนของตัวแก้ไข
ชื่อและตําแหน่งเป็นไปตามอําเภอใจ แต่ที่นี่เราจะเพิ่มเลเยอร์ใหม่ RenderTarget
ชื่อ .
หลังจากเพิ่มเลเยอร์แล้วให้เปิดฉากสําหรับพื้นผิวการแสดงผลเลือกวัตถุทั้งหมดที่คุณต้องการวาดและเปลี่ยนค่าเลเยอร์เป็นสิ่งที่คุณเพิ่งสร้างขึ้นRenderTarget
SampleSceneTexture
การดําเนินการนี้จะสิ้นสุดการแก้ไขฉากดังนั้นโปรดบันทึก
การแสดงพื้นผิวการแสดงผล
SampleScene
เมื่อคุณเปิดฉากแล้ว ให้เพิ่มลงในลําดับชั้นSampleSceneTexture
โดยการลากและวางฉาก
จากนั้นควรมีสองฉากในลําดับชั้นและเนื้อหาของฉากควรแสดงบนหน้าจอSampleSceneTexture
SampleSceneTexture
เนื้อหาของฉากรบกวนดังนั้นคลิกไอคอนรูปตาของฉากจาก SampleSceneTexture
ลําดับชั้น
SampleSceneTexture
สิ่งนี้จะซ่อนวัตถุในฉากและจะมองเห็นเฉพาะเนื้อหาของฉาก SampleScene
เท่านั้น
อย่างไรก็ตามเนื่องจากการตั้งค่าพื้นผิวการแสดงผลทั้งหมดเสร็จสมบูรณ์SampleScene
เนื้อหาของพื้นผิวการแสดงผลควรแสดงในภาพดิบที่วางไว้ในฉาก
อย่างไรก็ตามไอคอนซ่อนด้วยตาเป็นเพียงการตั้งค่าเพื่อให้มองไม่เห็นในตัวแก้ไขดังนั้นหากคุณเรียกใช้SampleSceneTexture
เกมตามที่เป็นอยู่เนื้อหาของฉากจะปรากฏบนหน้าจอด้วย
SampleScene
จากนั้นเลือกฉากMain Camera
และยกเลิกการเลือกจาก RenderTarget
Culling Mask ในตัวCamera
ตรวจสอบ
สิ่งนี้จะป้องกันไม่ให้วัตถุในเลเยอร์ปรากฏขึ้นเมื่อRenderTarget
เกมทํางาน
ลองเล่นเกม มันควรจะปรากฏตามที่ตั้งใจไว้
ลองย้ายพื้นผิวการแสดงผล
อย่างไรก็ตามในสถานะนี้เป็นเรื่องยากที่จะทราบว่ามันทํางานเป็นพื้นผิวการแสดงผลจริงๆหรือเพียงแค่แสดงภาพเป็นพืชดังนั้นเรามาย้ายกัน
เนื้อหาสามารถเป็นอะไรก็ได้ แต่ที่นี่เราจะตั้งค่าการเคลื่อนไหวให้หมุนสไปรท์โดยอัตโนมัติ SelfRotate
สร้างสคริปต์และสร้างเป็น .
ที่นี่เราจะรวมกระบวนการง่ายๆในการหมุนตัวเองทีละเล็กทีละน้อย
using UnityEngine;
public class SelfRotate : MonoBehaviour
{
// 更新はフレームごとに 1 回呼び出されます
void Update()
{
transform.Rotate(0, 0, 0.1f);
}
}
หลังจากสร้างสคริปต์แล้ว ให้แนบกับวัตถุที่คุณต้องการหมุนมากขึ้นเรื่อยๆ
จากนั้นเรียกใช้เกมและดูว่ามันหมุนหรือไม่ ฉันคิดว่าคุณจะเห็นว่าวัตถุกําลังเคลื่อนที่ในพื้นผิวการแสดงผล
วิธีย้ายหลายฉากพร้อมกัน
ที่นี่เราได้สร้างตัวอย่างง่ายๆเพื่อให้เรามีสองฉากที่ทํางานตั้งแต่เริ่มต้น แต่ในเกมจริงมีหลายกรณีที่คุณต้องเริ่มต้นด้วยฉากเดียว ในกรณีนี้ฉันคิดว่าคุณจะต้องเพิ่มฉากแบบไดนามิกที่จุดเริ่มต้นของฉากเพื่อให้มีหลายฉาก
โปรดดู "การเพิ่มฉาก" สําหรับคําอธิบายวิธีการเพิ่มฉาก
SceneManager.LoadScene("<シーン名>", LoadSceneMode.Additive);
โดยทั่วไปการโทรควรแก้ปัญหาส่วนใหญ่
วิธีป้องกันไม่ให้เนื้อหาของพื้นผิวการแสดงผลปรากฏบนหน้าจอหลักโดยไม่ต้องใช้เลเยอร์
เนื้อหาของพื้นผิวการแสดงผลจะแสดงบนหน้าจอหลักเนื่องจากฉากหลักและฉากพื้นผิวการแสดงผลอยู่ในที่เดียวกัน ดังนั้นหากคุณย้ายเนื้อหาของพื้นผิวการแสดงผลไปยังสถานที่ที่ไม่เคยแสดงในฉากหลักจะไม่แสดงบนหน้าจอหลัก ตัวอย่างเช่น คุณสามารถย้ายวัตถุพื้นผิวหรือกล้องเรนเดอร์ไปยังตําแหน่ง (-10000, -10000) ได้ วิธีนี้ไม่จําเป็นต้องตั้งค่าเลเยอร์
เมื่อคุณต้องการทําให้เนื้อหาของพื้นผิวการแสดงผลเสร็จสมบูรณ์ในฉากเดียวโดยไม่ต้องแบ่งออกเป็นฉากต่างๆ
สิ่งนี้ทําได้โดยใช้เทคนิคเดียวกับวิธีการก่อนหน้านี้โดยไม่มีเลเยอร์ คุณสามารถย้ายเนื้อหาที่แสดงโดยพื้นผิวการแสดงผลไปยังตําแหน่งที่จะไม่แสดงบนกล้องหลัก ความแตกต่างจากวิธีการแยกฉากคือคุณต้องวางกล้องสองตัว แต่นอกเหนือจากนั้นโดยทั่วไปคุณจะมีการตั้งค่าเดียวกันกับวิธีการแยกฉาก
หากคุณต้องการจับภาพเนื้อหาที่ถ่ายจากมุมมองที่แตกต่างในเกม 3 มิติเป็นพื้นผิวเรนเดอร์
เคล็ดลับนี้ไม่ได้พูดถึง 3D มากนักเพราะเน้นที่ 2D แต่โดยพื้นฐานแล้ววิธีการนั้นเหมือนกัน เนื่องจากคุณกําลังฉายพื้นที่ 3 มิติเดียวจากหลายมุมมองคุณไม่จําเป็นต้องมีฉากมากกว่าสองฉาก สิ่งที่คุณต้องทําคือวางกล้องได้มากเท่าที่คุณต้องการตั้งค่าปลายทางการวาดภาพเป็นพื้นผิวการแสดงผลและตั้งค่าตําแหน่งที่จะแสดงพื้นผิวการแสดงผล