บทความนี้ให้คำอธิบายที่เป็นประโยชน์แม้ว่าจะมาก่อน 4.3:
หากคุณกำลังมองหา“ ศิลปะภาพพิกเซล” ขนาดของกล้องของกล้องก็มีความสำคัญอย่างยิ่ง นี่เป็นส่วนที่ยากที่สุดในการตอกย้ำ 2D ใน Unity
ขนาดภาพ orthographic แสดงว่ามีหน่วยของโลกอยู่ในครึ่งบนของการฉายภาพของกล้อง ตัวอย่างเช่นหากคุณตั้งค่าขนาด orthographic เป็น 5 ขอบเขตของแนวตั้งของวิวพอร์ตจะมีพื้นที่โลก 10 หน่วย (ขอบเขตแนวนอนนั้นขึ้นอยู่กับอัตราส่วนภาพ)
จงจำไว้ว่ารูปสี่เหลี่ยมจตุรัสของคุณคือ 1 หน่วยข้างหนึ่ง นั่นหมายถึงขนาดภาพออโธแกรมบอกให้คุณทราบถึงจำนวนสไปรต์ที่คุณสามารถซ้อนในแนวตั้งในวิวพอร์ต (หารด้วย 2)
ในการแสดงภาพพิกเซลให้ดูสะอาดตาคุณต้องแน่ใจว่าแต่ละพิกเซลของแหล่งที่มาของสไปรต์แมป 1: 1 กับจอแสดงผลวิวพอร์ต คุณไม่ต้องการให้พิกเซลต้นทางถูกข้ามหรือเพิ่มเป็นสองเท่ามิเช่นนั้นสไปรต์ของคุณจะดูผิดเพี้ยนและ“ สกปรก” เคล็ดลับในการตรวจสอบอัตราส่วน 1: 1 นี้คือการตั้งค่าขนาดภาพแบบออโธกราฟที่ตรงกับความละเอียดหน้าจอแนวตั้งของคุณหารด้วยความสูงพิกเซลของสไปรต์
สมมติว่าคุณกำลังทำงานที่ 960x640 และคุณใช้สไปรต์ 64x64 การแบ่งความละเอียดหน้าจอแนวตั้ง (640) ด้วยความสูงพิกเซลของสไปรท์ (64) ให้ผลตอบแทนที่ 10 จำนวนของสไปรต์ 64x64 ที่สามารถวางซ้อนกันในแนวตั้งเป็น 640 พิกเซล โปรดจำไว้ว่าขนาดการันต์มีความสูงครึ่งหนึ่งดังนั้นขนาดออร์โทกราฟของคุณในกรณีนี้จะเท่ากับ 5 (ครึ่งหนึ่งของ 10) ควรมีลักษณะเช่นนี้:
หากคุณตั้งค่าขนาด orthographic ของคุณเป็นครึ่งหนึ่งหรือสองเท่าของเป้าหมายคุณยังอาจได้รับผลลัพธ์ที่ใช้ได้เนื่องจากขนาดแนวตั้งของสไปรท์จะยังคงแบ่งเท่า ๆ กันตามขนาดแนวตั้งของวิวพอร์ต แต่ถ้าคุณตั้งค่าขนาด orthographic ไม่ถูกต้องคุณจะเห็นบางพิกเซลถูกข้ามหรือเพิ่มเป็นสองเท่าและมันจะดูไม่ดีอย่างแน่นอน:
ความละเอียดตัวแปร
คุณไม่จำเป็นต้อง จำกัด อยู่ที่ความละเอียดคงที่เดียวเพื่อให้ภาพพิกเซลสะอาด วิธีที่ง่ายที่สุดในการจัดการความละเอียดของตัวแปรคือการแนบสคริปต์ที่กำหนดเองกับกล้องของคุณซึ่งตั้งค่าขนาด orthographic ตามความละเอียดแนวตั้งในปัจจุบันและขนาดสไปรท์ที่รู้จัก (คงที่) :
// set the camera to the correct orthographic size
// (so scene pixels are 1:1)
s_baseOrthographicSize = Screen.height / 64.0f / 2.0f;
Camera.main.orthographicSize = s_baseOrthographicSize;
แม้ว่าจะเป็นการแก้ไขที่ง่าย แต่ก็มีข้อเสียคือเมื่อความละเอียดหน้าจอลดลงคุณจะเห็นโลกน้อยลงเรื่อย ๆ และสไปรต์จะใช้หน้าจอมากขึ้นเรื่อย ๆ นั่นเป็นผลมาจากการรักษาอัตราส่วน 1: 1 ระหว่างพิกเซลต้นทางและพิกเซลหน้าจอ: สไปรท์ 64x64 ใช้พื้นที่ที่ชัดเจนมากขึ้นที่ 640x480 มากกว่าที่ 1920x1200 ไม่ว่าจะเป็นปัญหาหรือไม่นั้นขึ้นอยู่กับความต้องการของเกมเฉพาะของคุณ
หากคุณต้องการให้สไปรต์ของคุณยังคงมีขนาดที่ชัดเจนโดยไม่คำนึงถึงความละเอียดของหน้าจอให้ตั้งค่าขนาดภาพเป็นค่าคงที่และคงไว้โดยไม่คำนึงถึงความละเอียดของหน้าจอ ข้อเสียคือสไปรต์ของคุณจะไม่มีอัตราส่วนพิกเซลต่อแหล่ง 1: 1 อีกต่อไป คุณสามารถลดผลกระทบที่ไม่ดีของสิ่งนั้นได้โดยอนุญาตให้ใช้ความละเอียดเพียงครึ่งเดียวหรือสองเท่าของความละเอียดเป้าหมายของคุณ
(เน้นบางอย่างเพิ่ม)
เห็นได้ชัดว่าใช้งานได้ดีกว่าถ้าความละเอียดสูงสามารถหารได้ด้วยขนาดของสไปรต์ แต่แม้ว่าจะไม่เป็นเช่นนั้นมันก็ยังให้การประมาณที่ดีของผลลัพธ์ที่ดี
TL; DR :cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;