วิธีหนึ่งที่รวดเร็วในการรับคู่คีย์ - ค่าในตัวตรวจสอบของ Unity คือการกำหนด class entry ที่ต่อเนื่องกันได้จากนั้นใช้ array หรือ List <> ของพวกเขา เช่น...
public class SpellAnimationMap : ScriptableObject
{
[System.Serializable]
public class SpellAnimationEntry
{
public Spell spell;
public AnimationClip animation;
}
public SpellAnimationEntry[] spellAnimations;
}
โดยอัตโนมัตินี่จะให้รายการที่ปรับขนาดได้ในตัวตรวจสอบซึ่งคุณสามารถป้อนคีย์และค่าโดยไม่จำเป็นต้องเขียนตัวตรวจสอบที่กำหนดเอง
ผลลัพธ์จะเป็นดังนี้:
(เคล็ดลับหนึ่ง: หากคลาสรายการที่ทำให้เป็นอนุกรมมีฟิลด์ "ชื่อ" สตริงนั้นจะถูกแสดงแทนส่วนหัว "องค์ประกอบ 0" ที่มีประโยชน์ซึ่งมีประโยชน์ถ้าคุณมีข้อมูลที่ซับซ้อนมากขึ้นที่คุณต้องการนำทางได้อย่างมีประสิทธิภาพ)
การทำให้เป็น ScriptableObject ช่วยให้คุณสามารถใช้เป็นสินทรัพย์ที่ใช้ร่วมกันระหว่างประเภท / อินสแตนซ์ที่ต้องการชุดภาพเคลื่อนไหวเดียวกันโดยหลีกเลี่ยงค่าใช้จ่ายในการทำซ้ำรายการสำหรับแต่ละรายการ (คลาสอื่นมักจะถูกทำให้เป็นอนุกรมต่ออินสแตนซ์ใน Unity) ที่จะไปเส้นทางนี้คุณจะต้องเพิ่มสคริปต์แก้ไขเล็ก ๆ ที่จะช่วยให้คุณสร้างอินสแตนซ์ของเหล่านี้ในโฟลเดอร์สินทรัพย์ของคุณ
แก้ไข:ตอนนี้มันง่ายยิ่งขึ้น - คุณสามารถเพิ่มแอททริบิวนี้เหนือ ScriptableObject ของคุณ:
[CreateAssetMenu(fileName = "fileName.asset", menuName = "Some Folder/Menu Label")]
สิ่งนี้ทำให้ ScriptableObject ในเมนูสร้างของคุณเช่น:
คุณสามารถเลือกให้อาร์เรย์เป็นแบบส่วนตัวและต่อเนื่องเพื่อให้ยังคงปรากฏในตัวตรวจสอบ แต่เพิ่ม Public Dictionary (หรือพจนานุกรมส่วนตัวด้วยเมธอด GetAnimation (Spell สะกด) สาธารณะสำหรับลูกค้าเพื่อให้การค้นหามีประสิทธิภาพมากขึ้น ในเมธอด OnEnable () SpellAnimationMap สามารถวนซ้ำผ่านอาร์เรย์ที่มีตัวตรวจสอบเพื่อสร้างพจนานุกรมนี้อีกครั้งแบ่งปันผลประโยชน์ระหว่างอินสแตนซ์ไคลเอ็นต์ทั้งหมดอีกครั้ง (โปรดทราบว่า OnEnable () จะถูกเรียกในตัวแก้ไขเมื่อสินทรัพย์ถูกสร้างขึ้นเป็นครั้งแรกดังนั้นโปรดตรวจสอบให้แน่ใจว่าอาร์เรย์ของคุณไม่เป็นโมฆะก่อนที่คุณจะพยายามอ่าน)
สุดท้ายคุณสามารถเพิ่มประเภทข้อมูลนี้ได้มากเท่าที่คุณต้องการ มันอาจรวมรูปแบบสำเร็จรูปด้วยเช่นหรือบิตของข้อมูลอื่น ๆ ที่คุณต้องการเชื่อมโยงไปยังปุ่มสะกด
นอกจากนี้ยังเป็นไปได้ที่จะเขียนผู้ตรวจสอบที่กำหนดเองเพื่อเติมข้อมูลในช่อง Dictionary <,> โดยตรง แต่ความประทับใจที่ฉันได้รับคือการทำงานให้ราบรื่น