irpg Community
Toggle navigation
Member List
Portal
Calendar
Login
Register
Login
Username:
Password:
Lost Password?
Remember me?
irpg Community
irpg Other Game Engines School
Others
[วิเคราะห์] ไฟล์ข้อมูลที่ได้จาก SGB Exporter for Unity #1
XthemeCore
06-23-2018, 02:20 AM
#1
SMILE GAME BUILDER Exporter for Unity เป็น DLC ของโปรแกรมสร้างเกมสำเร็จรูป Smile Game Builder (SGB)
ใช้ในการแปลงไฟล์เกมเพื่อนำไปพัฒนาต่อบน Unity
บทความนี้จะวิเคราะห์ไฟล์ข้อมูลต่างๆที่ถูกแปลงมาลงใน Unity ว่าพอมีแนวทางในการที่จะอ่าน/เแก้ไข ไฟล์เหล่านั้นได้อย่างไร
หมายเหตุ: บทความนี้ เหมาะสำหรับผู้ที่มีพื้นฐาน Unity และโปรแกรมมิ่งในระดับหนึ่ง
เมื่อทำการกด export โปรเจคจาก SGB ไปเป็นโปรเจคบน Unity แล้ว
จะได้โฟลเดอร์โปรเจคของ Unity มา ซึ่งจะมาพร้อมด้วยโฟลเดอร์ Assets เสมอ
ภายในจะมีโฟลเดอร์ที่น่าสนใจอยู่ 3 โฟลเดอร์มีรายละเอียดดังนี้
map : เก็บไฟล์ scene ของแผนที่ในเกม ตรงนี้ใช้ในการตกแต่งหรือเพิ่มแสงเงาให้ฉากแผนที่ได้
Resource: เก็บไฟล์ข้อมูลทั้งหมดของเกม
src: เก็บโค้ดของเอนจิ้นที่จะรันบน Unity (C#)
สำหรับบทความนี้เราจะมาวิเคราะห์สิ่งที่อยู่ในโฟลเดอร์ Resource กัน
ภายใน Resource นั้นจะมีโฟลเดอร์อีก 2 โฟลเดอร์ ได้แก่
map : เก็บไฟล์ข้อมูลของแผนที่ในเกม (ไม่ใช่ไฟล์ scene ที่ใช้กับ Unity ได้โดยตรง)
samples: เก็บไฟล์ทรัพยากรในเกม เช่นไฟล์รูปภาพ ไฟล์เพลง
เราจะไม่สนใจสิ่งที่อยู่ในโฟลเดอร์ samples เพราะเป็นไฟล์ที่สามารถเปิดมาแก้ไขได้โดยตรงอยู่แล้ว
สิ่งที่น่าสนใจคือไฟล์นามสกุล .sgr.bytes จริงๆแล้วไฟล์นี้คือ binary file นั่นแหละ
ซึ่งการอ่านหรือเขียนไฟล์เหล่านี้ จะต้องรู้ pattern ของมันว่ามีวิธีการอ่านหรือเขียนอย่างไร
วิเคราะห์จากโค้ดของเอนจิ้น
ในโฟลเดอร์ src มีไฟล์โค้ดที่น่าสนใจอยู่ 2 ไฟล์คือ FileUtil.cs และ common\Catalog.cs
FileUtil.cs
เป็นคลาสที่รวบรวมฟังก์ชั่นในการจัดการไฟล์ มี method ที่น่าสนใจคือ getFileStream
ซึ่งจะอ่านไฟล์นามสกุล .bytes ที่ลงท้ายด้วย .sgr (.sgr.bytes) มาเป็น byte data
TextAsset:
https://docs.unity3d.com/ScriptReference...bytes.html
common\Catalog.cs
เป็นคลาสที่สำคัญอย่างมาก เพราะเป็นส่วนที่นำ byte data มาแปลงให้เป็นไฟล์ที่สามารถอ่านได้
หลังจากวิเคราะห์วิเคราะห์ดูสรุปได้ดังนี้
1.ทุกไฟล์ข้อมูลจะมีหัว header ขึ้นต้นด้วย YUKAR เสมอ ดังภาพด้านล่าง
ในคลาสมีอ้างอิงถึง YUKAR ให้เป็นตัวแปร ROM_HEADER
มีการตรวจว่าไฟล์ต้องขึ้นต้นด้วย Header นี้เสมอ
2.ถัดจากนั้นจะเป็นขนาด chunk และ signature โดยเป็นตัวแปร Int32 และ Int16 ตามลำดับ
3.Signature ดูเหมือนจะเป็น byte data ที่ระบุว่าข้อมูลนี้เป็นข้อมูลชนิดใด ดังภาพด้านล่าง
นอกเหนือจากนี้มีการจับคู่ signature กับ object type ด้วย โดยใส่ไว้ในตัวแปร dictionary
4.มี method ชื่อ load มีการเรียกใช้ฟังก์ชั่น createItem โดยใช้ dictionary
ฟังก์ชั่น createItem จะให้ผลลัพธ์เป็น Object RomItem
5.object Hero มี base class เป็น RomItem เช่นกัน
แล้วยังไงต่อ?
จากที่กล่าวมาข้างต้น ทำให้มีความเป็นไปได้ที่เราจะแปลงไฟล์ข้อมูลมาอยู่ในรูปที่เราเข้าใจได้ โดยการแปลงมันเป็น object ตาม signature ของมัน
ส่วนวิธีการแก้ไขข้อมูล ก็ให้แก้ไขที่ตัว object นั้นเลย แล้วแปลงกลับไปเป็น byte data
อย่างไรก็นี่เป็นการวิเคราะห์จากการมองโค้ดแบบผ่านๆ ที่เหลือคงต้องไปศึกษาในเชิงลึกดูอีกที
ครั้งหน้าอาจจะวิเคราะห์การทำงานของเอนจิ้นหลังแปลงมาอยู่บน Unity ยังไงก็ติดตามละกันครับ
This post was last modified: 11-08-2019, 10:49 PM by
XthemeCore
.
Search Thread
Next Oldest
Next Newest
Users browsing this thread:
3 Guest(s)
Contact Us
Forum Team
irpg
Return to Top
Mark all forums read
RSS Syndication
Help
Default
--irpg Default
----irpg Default (Dreamknight backup)
Alpha Gaming
NDesign
--NDesign (bak)
Flatty
--Flatty IRPG
Curves UI-alpha
--IRPG - CurvesUI
Go
Powered By
MyBB
, © 2002-2024
MyBB Group
.
Made with
by
Curves UI
.