เมื่อใดที่ฉันจะใช้ "สคริปต์" หรือ "สคริปต์" ในเกมเมื่อเทียบกับภาษาหลัก?


13

สคริปต์คำศัพท์และการเขียนสคริปต์ดูเหมือนจะใช้แทนกันได้ใน Game Development Stack Exchange แต่นอกเหนือจากการอ่านคำถามเกี่ยวกับการเลือกภาษาสคริปต์ฉันไม่เข้าใจความสัมพันธ์ระหว่างสคริปต์และสคริปต์และภาษาหลัก โดยทั่วไปแล้วสคริปต์จะทำอะไรเมื่อจะใช้และสคริปต์ในบริบทบางอย่าง (ตามที่กำหนดโดยโปรแกรมเมอร์เกม) แตกต่างจากภาษาสคริปต์



@ Tetrad ขอบคุณสำหรับลิงค์ แต่ฉันคิดว่าคำถามอื่น ๆ กล่าวถึงคำถามสถาปัตยกรรมพื้นฐานเพิ่มเติมของ "ทำไม" เมื่อเทียบกับอะไรและเมื่อไหร่

2
"อะไร" และ "เมื่อ" จะเป็นกรณีที่คุณใช้เฉพาะ "ทำไม" ช่วยให้คุณมีความสามารถในการตัดสินใจ คำถามนี้เป็นล่อลวง (ในสายตาของฉัน)
Tetrad

คำตอบ:


15

สคริปต์ถูกเขียนขึ้นสำหรับภาษาสคริปต์ ผู้คนสามารถใช้คำในประโยคสแลงเพื่อให้ได้รับความยุ่งเหยิงที่คุณอ้างถึง แต่ขอให้ทุกคนสำหรับคำจำกัดความของสคริปต์, สคริปต์และภาษาสคริปต์และคุณจะได้รับสิ่งที่ชอบ: สคริปต์คือการเขียนสคริปต์โดยใช้ภาษาสคริปต์

เมื่อคุณฝังภาษาสคริปต์ลงในเอ็นจิ้นเกมหรือภาษาหลักตามที่คุณอ้างถึงคุณกำลังแสดงให้เห็นไม่เพียง แต่วัตถุภายในเอ็นจิ้นเกม แต่ยังอนุญาตให้เขียนตรรกะสำหรับเอ็นจิ้นเกม สิ่งที่ควรทราบอีกประการหนึ่งคือการเปลี่ยนเกมของคุณให้กลายเป็นเสมือนเครื่องจักรเนื่องจากภาษาสคริปต์ไม่ค่อยรวบรวมเป็นภาษาเครื่องและแทนที่จะใส่ในรูปแบบของรหัสไบต์และตีความโดยโปรแกรมเกมของคุณ

สิ่งนี้มีประโยชน์อย่างมากสำหรับทีมพัฒนาซึ่งคุณสามารถดูได้จากรายการต่อไปนี้:

  • ภาษาการเขียนสคริปต์มักจะมีการจัดการหน่วยความจำดังนั้นคุณไม่ต้องกังวลกับการจัดสรร
  • พวกเขามักจะเป็นภาษาที่พิมพ์อย่างหลวม ๆ ซึ่งไม่จำเป็นต้องตรวจสอบให้แน่ใจว่าคุณกำลังใช้ประเภทตัวแปรสำหรับสิ่งที่คุณกำลังทำอยู่เพียงแค่สร้างตัวแปรและไปกับมัน
  • ภาษาตัวเองมักจะง่ายมากในขณะที่มอบการควบคุมค่อนข้างน้อยให้กับผู้ที่ไม่ใช่โปรแกรมเมอร์
  • การปรับเปลี่ยนสคริปต์ไม่ต้องการเอ็นจิ้นหลักเพื่อทำการคอมไพล์ใหม่
  • การเขียนสคริปต์ vs การเข้ารหัสมักจะช่วยลดเวลาที่จำเป็นสำหรับการปรับแต่งซ้ำของตรรกะของเกม
  • ขึ้นอยู่กับการออกแบบและภาษาคุณสามารถโหลดสคริปต์ซ้ำในขณะที่เกมกำลังทำงานเพื่อการปรับแต่ง / ทดสอบที่ง่ายยิ่งขึ้น

ฉันแน่ใจว่ารายการสามารถดำเนินต่อไปและฉันมั่นใจโดยเฉพาะอย่างยิ่งเมื่อคุณได้รับในประเภทเกมพิเศษและวิธีการเขียนสคริปต์สามารถช่วยกำหนดกฎการสร้างกลุ่มสำหรับการย้ายกลุ่มของหน่วยใน RTS หรือวิธีที่คุณสามารถสร้างตรรกะของ UI ใน ภาษาการเขียนสคริปต์เพื่อมอบ UI แบบขยายได้ให้กับผู้ใช้ปลายทางของคุณและสิ่งที่คล้ายกัน


9

การใช้สคริปต์มีข้อดีกว่า "ภาษาหลัก" บางส่วนของเหล่านี้รวมถึง:

  • การย้ายเนื้อหา (เพิ่มเติม) จากนักพัฒนาหลักไปยังศิลปินปล่อยนักพัฒนาหลักไปยังเครื่องมืองานจากงานเล่นเกม
  • สคริปต์มักจะถูก sandboxed ไม่สามารถทำอะไรอันตรายได้
  • การปรับเปลี่ยนสคริปต์ไม่ต้องการการคอมไพล์ซ้ำและการเรียกใช้เกมอีกครั้ง

สำหรับสัญลักษณ์แสดงหัวข้อแรกของคุณคุณสามารถให้ตัวอย่างของฟังก์ชันการทำงานหนึ่งชิ้นที่จะถูกย้ายไปยังสคริปต์เพื่อให้ศิลปินแก้ไขได้หรือไม่

@Brian Reindel ตัวอย่างจะเป็นสถิติอาวุธ / NPC, AI และแผนที่ / ระดับ
Hackworth

1
@ แฮ็คเวิร์ ธ คุณกำลังบอกว่าการเขียนโปรแกรม AI นั้นทำโดยศิลปินหรือไม่? สคริปต์ที่ศิลปินจะทำนั้นจะรวมถึงสคริปต์สำหรับภาพเคลื่อนไหวและการแสดงวัตถุ 3 มิติและอื่น ๆ
KRB

3
ศิลปินไม่ควรเขียนโปรแกรมเพื่ออะไร คุณแยกเอ็นจิ้นออกจากตรรกะของเกมเพื่อประโยชน์ในการแยกส่วนไม่ใช่เพื่อประโยชน์ในการลดการพัฒนาไปสู่ผู้ที่มีจุดแข็ง
Jon Purdy

1
@ James ดีประเด็นคือพวกเขาเขียนโปรแกรม "เบา" แต่พวกเขาอยู่ในค่าย "เนื้อหา" ดังนั้นคำศัพท์จึงเป็นเรื่องยาก =)
Jari Komppa

6

โดยปกติสคริปต์จะเป็นโค้ดที่ทำงานนอกเอ็นจิ้นหลักของคุณ มันมักจะมีอยู่ในไฟล์ข้อความทุกที่ที่คุณต้องการเก็บไว้ จากนั้นจะถูกโหลดโดยเอ็นจินแยกวิเคราะห์และดำเนินการตอนรันไทม์

สิ่งที่เกิดขึ้นโดยทั่วไปคือภาษาใดก็ตามที่คุณใช้ (เช่น Lua, Angelscript) ภาษานี้มักจะมีสิ่งอำนวยความสะดวกบางอย่างที่ทำให้โปรแกรมเมอร์โปรแกรมเมอร์สามารถแสดงฟังก์ชั่นของเครื่องยนต์หรือแม้แต่คลาสทั้งหมดกับอินสแตนซ์ของ "สคริปต์สคริปต์" .

ตัวอย่างเช่น (ตัวอย่างโง่โดยสิ้นเชิง แต่เพียงเพื่อให้ได้คะแนน) รหัสเกมของคุณอาจมีฟังก์ชั่นสาธารณะที่วางไข่ซอมบี้ที่ไหนสักแห่ง:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

ภาษาสคริปต์ที่คุณใช้ตอนนี้ช่วยให้คุณสามารถเปิดเผยฟังก์ชันนี้กับตัวแยกวิเคราะห์สคริปต์ที่กำลังทำงานอยู่ สิ่งนี้หมายความว่าคุณสามารถเปิดไฟล์ข้อความเขียน "SpawnZombie (200,300,1337)" และเมื่อเอ็นจิ้นของคุณรันโค้ดแล้วซอมบี้จะวางไข่ที่ตำแหน่งนั้น

คำตอบอื่น ๆ แสดงรายการตัวอย่างที่ดีของวิธีการใช้งานนี้โดยทั่วไปแล้ว แต่พวกเขาก็ทิ้งประเด็นหนึ่งซึ่งฉันพบว่าสำคัญมาก:

สคริปต์ประเภทนี้ทำให้ง่ายต่อการตรวจแก้จุดบกพร่องหรือทดสอบการเล่นเกมระหว่างรันไทม์

สมมติว่าคุณต้องการหาวิธีที่สมบูรณ์แบบในการวางซอมบี้ลงบนแผนที่เพื่อให้มันมีเอฟเฟกต์หวาดกลัวสูงสุดต่อผู้เล่นเมื่อพวกเขาค้นพบมัน หากไม่มีการสนับสนุนสคริปต์คุณจะต้องออกจากแอปพลิเคชันเปลี่ยนหมายเลขเวทย์มนตร์บางอย่างในรหัสทำการคอมไพล์ใหม่และทดสอบ

ด้วยการสนับสนุนการเขียนสคริปต์ (ให้คุณมีวิธีการป้อนข้อความระหว่างรันไทม์ตัวอย่างเช่นคอนโซลการดีบัก) คุณเพียงพิมพ์ "SpawnZombie (333,444,555)" และดูว่ามันมีลักษณะอย่างไร

ในลักษณะเดียวกันอาจเป็นไปได้ที่คุณจะวางไข่อาวุธยานพาหนะโหลดแผนที่ที่แตกต่างเปลี่ยนค่าของบางสิ่งในเกม ฯลฯ ศัตรู instakill เพราะคุณไม่ต้องการเสียเวลาไปกับส่วนที่ต้องมี ผ่านการทดสอบ ฯลฯ

วิธีนี้จะช่วยให้คุณประหยัดเวลาได้มากในเกมที่ซับซ้อนมากขึ้น


2

1) สคริปต์มักจะปรับเปลี่ยนได้ง่ายกว่าโค้ด

2) สคริปต์มักแก้ไขฟิลด์ได้ วิธีนี้จะทำให้การดัดแปลงเกม


ดังนั้นจะเป็นการดีไหมถ้าจะบอกว่าสคริปต์ของคุณนั้นถูกสร้างขึ้นด้วยภาษาที่ไม่ได้ถูกคอมไพล์เพื่อให้ทุกคนสามารถแก้ไขได้?

@Brian Reindel: โดยทั่วไปใช่
Loren Pechtel

2

ภาษาสคริปต์ส่วนใหญ่มีความหมายมากกว่าภาษาในเอ็นจิ้นหลัก บ่อยครั้งที่เอ็นจิ้นเขียนด้วยภาษาระดับต่ำ (เช่น C ++) สำหรับเหตุผลด้านประสิทธิภาพ แต่รหัสการเล่นเกมไม่จำเป็นต้องเป็นนักแสดงและลำดับความสำคัญจึงเปลี่ยนไปสู่

ตัวอย่างเช่นการพิมพ์แบบไดนามิกและแบบคงที่ ตัวอย่างอื่น: การรวบรวมขยะกับการจัดการหน่วยความจำด้วยตนเอง


0

การเขียนสคริปต์ช่วยให้คุณสามารถเขียนตรรกะในระดับที่สูงขึ้น กล่าวอีกนัยหนึ่งคุณเขียนรหัสน้อยลงด้วยฟังก์ชันการทำงานมากขึ้น

ตัวอย่างต่อไปนี้แสดงความแตกต่างระหว่างการเขียนบางอย่างในโค้ดและการเขียนในภาษาสคริปต์

รหัสเกม

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

รหัสสคริปต์

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

ดูการเข้ารหัสที่นักออกแบบต้องทำน้อยลงถ้าคุณใช้ภาษาสคริปต์?

เหตุผลก็คือในรหัสเกมคุณต้องแยกเหตุการณ์ออกเป็นหลาย ๆ เฟรมและเขียนโค้ดจากมุมมองหลายเฟรม ในทางกลับกันการเขียนสคริปต์ช่วยให้คุณคิดว่าเหตุการณ์หลายเฟรมเป็นเพียงบรรทัดเดียวของรหัสเพราะรหัสพิเศษทั้งหมดถูกแยกออกหลังฟังก์ชั่นสคริปต์

คุณอาจถาม แต่ฟังก์ชั่นนั้นไม่สามารถเขียนด้วยรหัสเกมได้ใช่ไหม ใช่แล้ว แต่นั่นหมายความว่าผู้ออกแบบจะต้องเปิดซอร์สโค้ดของเอ็นจิ้นเกมและเขียนโค้ดทั้งหมดที่อยู่ในนั้นและคุณไม่ต้องการให้นักออกแบบของคุณต้องผ่านซอร์สโค้ดของเอ็นจิ้นเกม (อาจเปลี่ยนแปลงโดยไม่ตั้งใจ โค้ดอื่นและความผิดพลาดทั้งหมด)

คุณต้องการให้นักออกแบบของคุณทำสิ่งนี้แทน: คลิกขวาที่รถยนต์ใน Map Editor คลิกที่แทรกสคริปต์พิมพ์รหัสสคริปต์ ไม่มีการล้อเล่นกับซอร์สโค้ดเอ็นจินของเกมที่สำคัญ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.