จากนั้นไปที่ Other Settings
ในส่วนของ Render Path* เปลี่ยนเป็น Deferred Lighting
เท่านี้ก็สามารถเปิดใช้งาน shadow ของ point light และ spot light ได้แล้วครับ
ไปที่ Edit -> Project Settings -> Player
จากนั้นไปที่ Other Settings ในส่วนของ Render Path* เปลี่ยนเป็น Deferred Lighting เท่านี้ก็สามารถเปิดใช้งาน shadow ของ point light และ spot light ได้แล้วครับ
0 Comments
วิธีการแก้ปัญหา "LocalizedStrings" does not exist in the namespae ในส่วนของ Windows Phone18/12/2013 วิธีการแก้
1. ปิด Visual Studio 2. ไปที่ folder : "%LOCALAPPDATA%\Microsoft\Phone Tools\CoreCon\" เช่น C:\Users\username\AppData\Local\Microsoft\Phone Tools\CoreCon\ 3. ลบสิ่งที่อยู่ใน folder ของ 10.0 และ 11.0 4. เปิด Visual Studio และ Compile อีกที IOS
1. Apple Developer Account ($99 / year) 2. Xcode IDE 3. เครื่อง Mac 4. iPhone, iPad Android 1. Android SDK ==> https://developer.android.com/sdk/index.html 2. JDK 32 bit (เพราะ Unity รันบน 32 bit) => http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 3. Android device 4. PC ที่สามารถรัน Unity3D ได้ Windows Phone 8 1. Windows Phone 8 SDK ==> http://www.microsoft.com/en-us/download/details.aspx?id=35471 2. มือถือที่ติดตั้ง Windows 8 3. PC ที่ติดตั้ง Windows 8 (ต่ำกว่า Windows 8 ไม่ได้) Kindle ไม่รู้เพราะไม่มีเครื่อง ปัญหาที่เจอใน IOS ปัญหาที่เจอเป็นส่วนของ Screen Offset ซึ่งทำให้ไม่สามารถคลิกในส่วนบนสุดของ Screen ได้ ดังนั้น ไม่ควรที่จะว่างปุ่ม ไว้ในจุดที่ offset ปัญหาที่เจอใน Windows Phone 8 (Nokia Lumia 520) ปัญหาหลักที่เจอเป็นส่วนของ 520 เป็นเรื่องของ Input.touchCount บางครั้งจะเจอสถานการณ์ที่ จำนวณเลข touchCount ที่ค้างซึ่งทำให้เกิดการประมวณผลเกิดความจำเป็น หรือ เกิด Error เช่น Array out of rang, etc. จากรูป เห็นได้ว่าแม้ไม่ได้ touch บนหน้าจอ จำนวณ touchCount ยังคงอยู่ที่ 32
Android ยังไม่เจอปัญหาเท่าไหร่ Draw Calls ใน Unity เกิดจากการวาด Objects ที่แสดงผลในหน้าจอ ซึ่งจะมีผลต่อการทำงานของ CPU และ GPU ดังนั้นควรที่จะลดจำนวน Draw Calls ให้มากที่สุด ซึ่ง Unity เองก็มีการจัดการตัว Draw Calls เรียกว่า "Batching" ซึ่งจำนวนที่ Unity สามารถ batch จะช่วยลดการคำนวณของ CPU วิธีการลด Draw Calls นั้นมีหลายวิธี 1. แชร์ Material และ Texture 2. Combine Mesh ใน Maya ให้เป็น Mesh เดียว แล้วทำการ Import ลงใน Unity และแชร์ Material และ Texture ให้น้อยที่สุด 3. Import Mesh ที่มีขนาด Vertex น้อยกว่า 300 (ใน Unity) + แชร์ Material และ Texture 4. ถ้าเป็น Mesh ที่ไม่มีการเคลื่อนไหว ให้ทำการ check Static batching ใน Editor 5. เปิดใช้งาน Occlusion Culling (Unity Pro Only)
6. Bake Lightmapping 7. ถ้าใช้ directional light ควรใช้เพียง 1 ดวง (ถ้า directional light ใช้ draw calls 100 directional light ดวงที่ 2 จะดับเบิ้ล draw calls) ปล. เท่าที่คิดออกก็มีประมาณนี้นะครับ ไว้เพิ่มที่หลังถ้าคิดออกหรือเจอข้อมูลใหม่ๆ เมื่อวันที่ 4 ธันวาคม 2556 (Dec 4, 2013) ได้มีโอกาส interview กับบริษัท Havok เกม engine ที่ใช้กันในเกมค่ายใหญ่หลายเกม เช่น Final Fantasy XIV, Metal Gear Rising, etc. เลยอยากแชร์ว่าสิ่งที่ควรจะรู้มีอะไรบ้าง ฟังหูไว้หูนะครับเป็นความคิดส่วนตัวเท่านั้น
1. Data Structures พวก O(1), O(n), O(logn) 2. Assembly ควรรู้เกี่ยวกับ Memory Management 3. Math - สำหรับ Engine หรือ Graphics Developer ควรทราบ Matrix และ Quotation 4. Design Patterns 5. Programming Languages (C++, C#, Lua etc.) ปล. ขึ้นอยู่กับว่าบริษัทที่ทำงานนะครับ บริษัทเล็กอาจจะไม่ซีเรียสมากครับ สาเหตุของการเกิด Fatal error in gc นั้นมีได้หลายสาเหตุ 1. Antivirus เข้าไปรบกวนการทำงานของ Unity 2. Unity มีปัญหาในการเปิดโปรเจ็คที่ทำค้างไว้ระหว่างที่กำลังเริ่มโปรแกรม Unity ทางแก้ Antivirus เข้าไปรบกวนการทำงานของ Unity ให้ทำการลองปิด antivirus ชั่วคราวแล้ว ทำการเปิด Unity ใหม่ จะทำให้ไม่เจอ error นี้ (แก้ปัญหาเบื้องต้นครับ) ทางแก้ Unity มีปัญหาในการเปิดโปรเจ็คที่ทำค้างไว้ระหว่างกำลังเริ่มโปรแกรม Unity โดยปกติแล้ว Unity จะทำการเปิดโปรเจ็คล่าสุดที่เราทำไว้โดยอัตโนมัติเมื่อเราเปิดใช้งาน Unity ในหลายครั้ง ระบบนี้ทำให้เกิดปัญหา Fatal error in gc ขั้นตอนที่อธิบายไว้ข้างล่างนี้เป็นวิธีที่ใช้ในการปิดระบบที่ว่าครับ โดยจะเปลี่ยนไปเป็นการถามโปรเจ็คที่เราจะทำงานในทุกครั้งที่โปรแกรมเริ่มทำงานครับ ขั้นตอนแก้ไข #1 รีเซ็ต Unity ให้กลับไปที่การตั้งค่าดั้งเดิม (Default Setting) โดยการ กดปุ่ม Alt ค้างไว้หลังจากที่เปิดโปรแกรม Unity (ดับเบิ้ลคลิ๊กที่ไอคอน Unity แล้วกด Alt ค้างไว้) #2 หลังจากที่กด Alt ค้างไว้ Unity จะสามารถรันโดยไม่เกิด error แต่ Unity จะเปิดหน้าต่าง Project Wizard เพื่อถามเราว่าจะให้เปิดโปรเจ็คที่ทำไว้หรือจะสร้างโปรเจ็คใหม่ #3 หลังจากที่ Unity สามารถทำงานได้โดยไม่เกิด Error เราต้องทำการตั้งค่า Unity เพื่อไม่ให้ Unity ทำการเปิดโปรเจ็คระหว่างการรันโปรแกรมอีก โดยการเข้าไปที่ Edit -> Preference #4 ในหน้าต่าง Unity Preferences แถบ General ให้เติมเครื่องหมายถูกลงไปในตัวเลือก Always Show Project Wizard เป็นอันเสร็จสิ้น
จากนี้ไปเวลาที่เปิดโปรแกรม Unity ตัวโปรแกรมก็จะเปิดหน้าต่าง Project Wizard ขึ้นมาให้เราเลือกโดยจะไม่เกิดอาการ Fatal error in gc อีกครับ คำสั่งที่ใช้ในการตรวจสอบการ Touch Screen สำหรับ IOS, Android (คิดว่าน่าจะใช้ได้กับ Windows phone เหมือนกัน) นั้นคือ Input.GetTouch ตัวอย่างการใช้งาน void Update() สาเหตุ
Unity ใน Windows 8.1 ประสบปัญหาในการเลือกใช้งานระหว่าง กราฟฟิคออนบอร์ดกับการ์ดจอแยกครับ และทำให้โปรแกรม Unity ปิดตัวหลังในช่วงที่กำลัง Import ไฟล์ภาพ คอมพิวเตอร์ปัจจุบันนั้นได้มีการฝังระบบการประมวลผลกราฟฟิคลงไปใน CPU โดยตรง ซึ่งทำให้นับได้ว่าคอมพิวเตอร์ในสองปีที่ผ่านมานั้นมีกราฟฟิคออนบอร์ดติดตัวไว้ตลอดครับ ถึงแม้เราจะใช้งานกราฟฟิคการ์ดที่แยกตัวออกมาต่างหากก็ตาม ตรงจุดนี้เราสามารถแก้ไขได้สองวิธี 1.ปิดการทำงานของกราฟฟิคออนบอร์ดใน Bios (วิธีการปิดจะแตกต่างกันไปตามระบบ Bios ของแต่ละเมนบอร์ด ต้องใช้คู่มือของเมนบอร์ดนั้่นๆในการปิดการทำงานของกราฟฟิคออนบอร์ดครับ) 2.บังคับให้ Unity รันโปรแกรมด้วย DirectX 10 หรือ 11* ขั้นตอนวิธีการแก้ให้ Unity รันบน DirectX ที่ต้องการครับ
เท่านี้ก็จะสามารถเปิด Unity ใน Windows 8.1 ได้แล้วครับ * วิธีการบังคับให้ Unity รันบน DirectX ที่ต้องการนั้นเป็นตัวเลือกที่ดีที่สุด แต่การบังคับใช้ DirectX11 นั้นจะทำให้การทำงานของ Shaderที่ดัดแปลงเอง หรือระบบเรนเดอร์บางตัวนั้นผิดเพี้ยนไป หากพบว่าภาพนั้นผิดเพี้ยนไปจากเดิม ก็ใช้คำสั่ง -force-d3d10 บังคับให้รันด้วย DirectX10 ครับ แต่ถ้าหากว่าใช้ Shader ที่ Uinty มีให้ หรือ Shader พิเศษที่รองรับการแสดงผลด้วย DirectX 11 อยู่แล้ว จะไม่เกิดปัญหาใดๆ ก็จะแนะนำให้รันบน DirectX11 ครับ |
ผู้เขียนก้องเกียรติ เลียวประเสริฐพร Archives
October 2020
Categories
All
|