สารบัญ:

คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ:: 24 ขั้นตอน
คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ:: 24 ขั้นตอน

วีดีโอ: คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ:: 24 ขั้นตอน

วีดีโอ: คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ:: 24 ขั้นตอน
วีดีโอ: สร้างเกมแนวต่อสู้ด้วย Unity | Fighting Game [FULL COURSE] 2024, พฤศจิกายน
Anonim
คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ
คอนโทรลเลอร์เกม Arduino พร้อมไฟที่ตอบสนองต่อเกม Unity ของคุณ

ก่อนอื่นฉันเขียนสิ่งนี้ออกมาเป็นคำพูด นี่เป็นครั้งแรกที่ฉันใช้ Instrucable ดังนั้นเมื่อใดก็ตามที่ฉันพูดว่า: เขียนโค้ดออกมาเหมือนให้รู้ว่าฉันกำลังอ้างถึงภาพที่ด้านบนของขั้นตอนนั้น

ในโปรเจ็กต์นี้ ฉันใช้ Arduino 2 ตัวเพื่อรันโค้ด 2 บิตแยกกัน เนื่องจากฉันมีปัญหาในการทำงานกับโค้ดเพียงอันเดียว

เหล่านี้คือ Uno และ Leonardo

โดยรวมแล้วนี่คือสิ่งที่คุณจะต้องทำเพื่อเขียงหั่นขนมโครงการนี้

· 7 ปุ่มกด

· 23 สายจัมเปอร์

· 1 arduino Leonardo + สาย usb

· ตัวต้านทาน 4 ตัว · ไฟ LED 4 ดวง

· 1 arduino uno + สาย usb

· เขียงหั่นขนม 2 อัน

ขั้นตอนที่ 1: เชื่อมต่อปุ่มควบคุมกับ Arduino

การต่อปุ่มควบคุมเข้ากับ Arduino
การต่อปุ่มควบคุมเข้ากับ Arduino

สิ่งที่คุณจะต้องเชื่อมต่อส่วนนี้:

· 7 ปุ่มกด

· สายจัมเปอร์ 14 เส้น

· 1 arduino Leonardo + สาย usb

· เขียงหั่นขนม

ปุ่มต่างๆ ค่อนข้างง่ายต่อการเชื่อมต่อ แต่อาจกลายเป็นความยุ่งเหยิงในการแสดงในรูปแบบภาพได้อย่างรวดเร็ว

· ก่อนอื่นให้วางปุ่มกดในตำแหน่งที่ฉันทำเครื่องหมายไว้บนภาพด้านบน

· ประการที่สอง คุณต้องการเชื่อมต่อจัมเปอร์จากช่องเสียบกราวด์บน Arduino Leonardo เข้ากับแถวลบของเขียงหั่นขนม

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

· ถัดไปคุณต้องการต่อสายจัมเปอร์จากแถวที่สอดคล้องกับหมุดด้านซ้ายของปุ่มกดของคุณไปยังช่องอินพุตดิจิตอลของ Leonardo สำหรับปุ่มที่นี่ ฉันใช้ช่อง 2 - 3 – 4 – 5 - 6 - 7- 8

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

ขั้นตอนที่ 2: การเข้ารหัส Arduino Leonardo:

การเข้ารหัส Arduino Leonardo
การเข้ารหัส Arduino Leonardo

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

ตอนนี้ฉันจะแนะนำคุณว่ารหัสทีละขั้นตอน

ก่อนอื่นเรารวม Keyboard.h ไว้ที่ด้านบนสุด ซึ่งจะช่วยให้เราใช้ฟังก์ชันแป้นพิมพ์ที่เราจะใช้ในโค้ดของเราได้

ขั้นตอนที่ 3:

ภาพ
ภาพ

จากนั้นเราต้องกำหนดช่องอินพุตดิจิตอลที่เราจะใช้กับ

Leonardo สำหรับแต่ละปุ่ม

ฉันยังตั้งชื่อแต่ละอันตามคีย์ที่ฉันจะเลียนแบบด้วย

ขั้นตอนที่ 4:

ภาพ
ภาพ

จากนั้นเราเข้าสู่ฟังก์ชั่นการตั้งค่า นี้บอก

Arduino ทำอะไรเมื่อเริ่มต้น

ก่อนอื่นเราเขียน Serial.begin ซึ่งจะเปิดพอร์ตอนุกรมและตั้งค่าอัตราข้อมูลเป็น 9600 bps

และเรากำหนดชื่อพินทั้งหมดให้เป็นอินพุต

ขั้นตอนที่ 5:

ภาพ
ภาพ

และสุดท้ายเราเขียนฟังก์ชันวนรอบซึ่งจะตรวจสอบว่า

มีการกดปุ่มและบอก Arduino ว่าจะตอบสนองต่อสิ่งนั้นอย่างไร

ก่อนอื่นเราเขียน Keyboard.begin ซึ่งจะบอก Arduino ว่าเขาต้องมองหาเราโดยใช้ฟังก์ชันแป้นพิมพ์

ขั้นตอนที่ 6:

ภาพ
ภาพ
ภาพ
ภาพ
ภาพ
ภาพ

จากนั้นทุกปุ่มเราจะเขียนคำสั่ง if/else ที่เป็นเช่นนี้

สิ่งที่ฉันบอก Arduino ว่านี่คือ: หากปุ่มซ้ายของฉันถูกกดบนคอนโทรลเลอร์ทำให้คอมพิวเตอร์คิดว่าเรากำลังกดปุ่ม "a" และหากไม่ใช่กรณีนี้ทำให้คิดว่าเราปล่อยกุญแจแล้ว

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

ขั้นตอนที่ 7:

ภาพ
ภาพ

แป้นที่เราบอกให้คอมพิวเตอร์กดตรงนี้คือ W – A – S – D ซึ่ง

ค่อนข้างเป็นมาตรฐานสำหรับการเคลื่อนไหวในเกมพีซีและ E – Q – และสเปซบาร์ซึ่งในรหัสนี้เรียกว่า ‘‘ซึ่งเป็นปุ่มที่ฉันใช้เพื่อรับ – ยกเลิกและยิงในเกมของฉัน อย่าลังเลที่จะเปลี่ยนสิ่งเหล่านี้เป็นปุ่มใดก็ได้ที่คุณรู้สึกว่าทำงานได้ดีขึ้นสำหรับเกม/คอนโทรลเลอร์ของคุณ

สุดท้ายเราบอกให้ Arduino หยุดการตรวจสอบ Keyboard.end

ขั้นตอนที่ 8: การเข้ารหัสการเคลื่อนไหวในความสามัคคี:

การเข้ารหัสการเคลื่อนไหวในความสามัคคี
การเข้ารหัสการเคลื่อนไหวในความสามัคคี

ก่อนอื่น ให้ฉันบอกคุณว่าฉันทำสิ่งนี้สำหรับเกม 2d ดังนั้น

ตัวอย่างที่คุณจะเห็นสร้างขึ้นเพื่อสิ่งนั้น ส่วนใหญ่หมายถึงที่ฉันใช้ vector2 หากคุณทำงานในแบบ 3 มิติ คุณจะใช้ vector3 เพราะคุณจะต้องกังวลเกี่ยวกับมิติพิเศษของการเคลื่อนไหวในแบบ 3 มิติ

เหตุผลที่ฉันใช้การจำลองแป้นพิมพ์บนฝั่ง Arduino ก็เพราะว่า Unity มีบางอย่างในตัวเพื่อจดจำปุ่มบนแป้นพิมพ์ที่เราสามารถใช้ได้

หากคุณเปิดโปรเจ็กต์ด้วยความสามัคคี ให้ไปที่แก้ไข -> การตั้งค่าโปรเจ็กต์ -> อินพุต คุณสามารถเห็นได้ในตัวตรวจสอบของคุณว่ามันบูทตัวจัดการอินพุต หากคุณคลิกที่ Axes คุณจะเห็นชื่ออินพุตจำนวนมากเปิดขึ้น ซึ่งปกติแล้วจะใช้สำหรับคอนโทรลเลอร์พีซี เช่นเดียวกับที่เรากำลังสร้างอยู่ในขณะนี้ อินพุต 2 ช่องที่เราจะใช้คือแนวนอนและแนวตั้งซึ่งตรวจสอบให้คุณเดาได้ว่า W-A-S-D

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

ขั้นตอนที่ 9:

ภาพ
ภาพ

คุณต้องการมอบสิ่งของให้กับผู้เล่นคนนี้ 2 อย่าง กล่อง collider 2d และ

a Rigidbody 2d และแก้ไขให้เหมือนภาพด้านบน

ขั้นตอนที่ 10:

ภาพ
ภาพ

จากนั้นคุณต้องการไปที่โฟลเดอร์โครงการของคุณและสร้าง

สคริปต์ C# ซึ่งผมตั้งชื่อว่า PlayerMovement

ในสคริปต์นี้ คุณจะกำหนดตัวแปร 2 ตัว โฟลตสาธารณะที่ฉันเรียกว่า moveSpeed ซึ่งจะเป็นตัวกำหนดว่าคุณจะไปได้เร็วแค่ไหน และ Rigidbody2D ส่วนตัวที่ฉันเรียกว่า RigidPlayer ซึ่งจะมองหาผู้เล่นของคุณที่เข้มงวด

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

ขั้นตอนที่ 11:

ภาพ
ภาพ

ตอนนี้ใน Start() ของคุณ คุณต้องการทำสิ่งหนึ่งและนั่นคือเพื่อ

ตรวจสอบให้แน่ใจว่า RigidPlayer ของคุณสามารถค้นหาผู้ชำระเงินที่เข้มงวด 2d ได้ คุณทำอย่างนั้นด้วยรหัสบรรทัดต่อไปนี้:

ขั้นตอนที่ 12:

ภาพ
ภาพ

จากนั้นเราไปที่การอัพเดท () นี่เรากำลังจะไปไหน

เพื่อให้ผู้เล่นเคลื่อนไหว

เราทำอย่างนั้นด้วยคำสั่ง if ที่ค่อนข้างง่ายซึ่งจะพิจารณาถึงปุ่มลบและบวกจาก Horizontal (AD) และ Vertical (SW) และใช้เป็นตัวเลขเพื่อบังคับเราจะใส่ Rigidbody 2d ของเราเพื่อผลักผู้เล่นของเราเข้า ทิศทาง จำนวนนั้นจะถูกคูณด้วยตัวแปร moveSpeed

ขั้นตอนที่ 13:

ภาพ
ภาพ

สุดท้ายนี้ คุณต้องแน่ใจว่าเครื่องเล่นของคุณหยุดเคลื่อนไหวเมื่อ

คุณไม่กดอะไรเลย คุณชอบแบบนี้:

ตอนนี้ ถ้าคุณต้องการใช้ปุ่มอื่นอีก 3 ปุ่มสำหรับสิ่งที่คุณทำกับคำสั่ง if นี้: if(Input. GetKeyDown(Keycode. Space))

สำหรับสเปซบาร์และแทนที่จะเว้นวรรค ให้ใส่ตัวอักษรของคีย์อื่นๆ ที่คุณเลือกใช้สำหรับคีย์อื่นๆ

ขั้นตอนที่ 14: ต่อไฟเข้ากับ Arduino

การต่อไฟเข้ากับ Arduino
การต่อไฟเข้ากับ Arduino

·

สิ่งที่คุณจะต้องเชื่อมต่อส่วนนี้:

· สายจัมเปอร์ 9 เส้น

· ตัวต้านทาน 4 ตัว

· 4 leds

· 1 arduino uno + สาย usb

· เขียงหั่นขนม

การต่อไฟจะทำผ่าน Uno

มันจะมีลักษณะเหมือนภาพนี้ด้านบน:

คุณต่อตัวต้านทานเข้ากับด้านยาวของ LED จากนั้นคุณต่อจัมเปอร์จากหมายเลขพินดิจิทัลบน uno ไปยังตัวต้านทาน ในกรณีนี้ฉันใช้ช่องเสียบพินดิจิตอล 9 – 10 -11 -12 ตัวเลขเหล่านี้จะเกี่ยวข้องเมื่อเราไปถึงรหัสสำหรับไฟ

จากที่นั่นคุณต้องการต่อจัมเปอร์จากสล็อตกราวด์บน Arduino Uno ของคุณไปยังจุดบนกระดานของคุณตามที่เห็นด้วยลวดสีดำบนภาพด้านบน

จากนั้นคุณต้องการมีจัมเปอร์ 4 ตัวที่นำไปสู่ส่วนท้ายสั้น ๆ ของ LED แต่ละอัน

ขั้นตอนที่ 15: การเข้ารหัส Arduino Uno

การเข้ารหัส Arduino Uno
การเข้ารหัส Arduino Uno

เอาล่ะ ก่อนอื่นเราจะมากำหนดตัวแปรของเรากันอีกครั้ง

ก่อนอื่นเราใช้อินพุตดิจิตอลใดสำหรับไฟของเรา และเรากำลังจะสร้างตัวอักษรชื่อ myCol[20]

ขั้นตอนที่ 16:

ภาพ
ภาพ

จากนั้นในการตั้งค่าเราต้องการทำ Serial.begin อีกครั้ง วาง LED ทั้งหมดของเราไว้ที่เอาต์พุตแล้วปิดทั้งหมดเมื่อเริ่มต้น

ขั้นตอนที่ 17:

ภาพ
ภาพ

และสุดท้ายคุณต้องการเขียนฟังก์ชันลูปของคุณ

สิ่งนี้จะทำให้ Arduino อ่านข้อมูลใด ๆ ที่เข้ามาทางซีเรียลจนกว่าจะมีเหตุการณ์ใดเหตุการณ์หนึ่งเกิดขึ้น ตรวจพบอักขระการป้อนบรรทัด สิ่งนี้ถูกระบุโดย lf ซึ่งถูกตั้งค่าเป็น 10 และเป็นอาร์กิวเมนต์แรกหรืออ่านจำนวนไบต์จำนวนหนึ่งแล้ว นี่คืออาร์กิวเมนต์ที่สามและสำหรับตัวอย่างนี้ถูกตั้งค่าเป็นหนึ่งไบต์ ข้อมูลถูกเก็บไว้ในตัวแปร myCol ซึ่งตั้งค่าเป็น char และจำกัดที่ 20 ใน readBytesUntil นี่เป็นอาร์กิวเมนต์ที่สอง หรือวิธีอธิบายอีกอย่างคือ Serial.readBytesUntil(terminatorCharacter, buffer, byteLimit);

และคำสั่ง if จะทำให้แน่ใจว่าไฟบางดวงเปิดขึ้นเมื่อความสามัคคีให้สัญญาณ ในกรณีนี้ ฉันได้ไฟสีต่างกัน 4 ดวง ดังนั้นฉันจึงสร้างความสามัคคีส่ง g เพื่อให้ไฟ LED สีเขียวเปิดขึ้น b สำหรับไฟ LED สีน้ำเงินเพื่อเปิด r สำหรับไฟ LED สีแดงเปิดและ y สำหรับไฟ LED สีเหลืองเปิด

ขั้นตอนที่ 18: การเข้ารหัสไฟด้านความสามัคคี:

ไฟเข้ารหัสด้านความสามัคคี
ไฟเข้ารหัสด้านความสามัคคี

เอาล่ะ 2 สิ่งก่อนที่เราจะเข้าสู่เรื่องนี้

1. ในโปรแกรมเข้ารหัส Arduino ของคุณให้ไปที่ Tool -> Port -> และตรวจสอบว่า COM uno ของคุณเปิดอยู่หรือไม่ ในกรณีของฉัน COM3 (นี่จะมีความสำคัญในรหัส)

2. ในความสามัคคี ไปที่แก้ไข -> การตั้งค่าโครงการ -> ผู้เล่น จากนั้นในตัวตรวจสอบคลิกที่การตั้งค่าอื่น ๆ ไปที่ระดับความเข้ากันได้ของ Api และเปลี่ยนจากซับเน็ต. NET 2.0 เป็น. NET 2.0

โอเค เสร็จแล้ว เข้าไปกันเถอะ

คลิกขวาที่ลำดับชั้นของคุณแล้วคลิกสร้างว่าง

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

ขั้นตอนที่ 19:

ภาพ
ภาพ

จากนั้นไปที่แท็บโปรเจ็กต์ของคุณแล้วสร้างสคริปต์ C# ใหม่

และเรียกมันว่าการส่ง

สิ่งแรกที่คุณทำคือเขียนสิ่งเหล่านี้ลงในบรรทัดในส่วนการใช้โค้ดของคุณ:

ใช้ System. IO. Ports;

ใช้ System. Threading;

ทำให้เราสามารถใช้ตัวแปร SerialPort ได้

ขั้นตอนที่ 20:

ภาพ
ภาพ

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

ขั้นตอนที่ 21:

ภาพ
ภาพ

ในการเริ่มต้นเราบอกให้สคริปต์ที่ใช้คือ OpenConnection

ฟังก์ชันที่เราจะเขียนกันสักหน่อย

การอัปเดตเป็นการทดสอบมากกว่าสิ่งอื่นใด แต่ถ้าคุณต้องการรวมไว้เพื่อทดสอบข้อความที่ส่งไปยังความสามัคคี คุณสามารถเพิกเฉยได้อย่างแท้จริง

ขั้นตอนที่ 22:

ภาพ
ภาพ

ตกลงตอนนี้สำหรับฟังก์ชัน OpenConnection นี้ นี่แค่เรื่องใหญ่นะ

if/else คำสั่งที่เปิดการเชื่อมต่อไว้เพียงแค่คัดลอกเหมือนเขียนและคุณน่าจะสบายดี

ขั้นตอนที่ 23:

ภาพ
ภาพ

ตอนนี้จำจากรหัส Arduino ที่ฉันทำการตรวจสอบ

เป็นสัญญาณว่าความสามัคคีจะส่งไปถึง

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

ขั้นตอนที่ 24:

ภาพ
ภาพ

คุณอาจสงสัยว่าฉันจะเรียกสิ่งนี้ได้อย่างไร

การทำงาน? คุณทำได้โดยใช้บรรทัดเดียวในสคริปต์ c # อื่นๆ ที่คุณใช้สำหรับเกมของคุณ กำลังส่ง. NameFunctionhere();. ตัวอย่างเช่น ในเกมของฉัน ผู้เล่นได้รับมอบหมายให้รวบรวมลูกกลม 4 สี ดังนั้นฉันจึงเขียนสคริปต์เล็กๆ น้อยๆ เพื่อให้แน่ใจว่าเมื่อเขาเข้าใกล้และกดปุ่มขวา เขาจะหยิบขึ้นมาและส่งสัญญาณไปยัง Arduino ว่าในกรณีนี้ ลูกแก้วสีเหลืองถูกหยิบขึ้นมา เพื่อให้มันรู้ โอเค ฉันต้องเปิดไฟ LED สีเหลือง:

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

แนะนำ: