ทำกระเป๋า Punching ใน Arduino และ Unity โดยใช้ Joystic และ Balloon: 5 ขั้นตอน

ทำกระเป๋า Punching ใน Arduino และ Unity โดยใช้ Joystic และ Balloon: 5 ขั้นตอน

สารบัญ:

Anonim

คำแนะนำนี้เป็นเรื่องเกี่ยวกับการอ่านอินพุตจาก arduino joystic แต่มีการบิดเล็กน้อย! เรากำลังจะเปลี่ยนจอยสติกของเราให้กลายเป็นกระเป๋าเจาะ:) และยิ่งกว่านั้นเราจะเห็นภาพกระบวนการทั้งหมดในเอกภาพ 3 มิติ

โปรดทราบว่าคำแนะนำทั้งหมดนี้มีให้ใช้งานเป็นเพลย์ลิสต์ในช่อง YouTube ของฉันหากคุณกำลังมองหาคำแนะนำโดยละเอียดเพิ่มเติมโปรดดูลิงก์ด้านล่าง:

เพลย์ลิส

วัสดุ:

ขั้นตอนที่ 1: ให้รวบรวมองค์ประกอบ

สิ่งที่คุณต้องการสำหรับสิ่งนี้คือ

1- จอยสติ๊ก

2- บอลลูน

3- ซิลิกอนและเบา

4-4 ชายกับสายหญิง

ขั้นตอนที่ 2: ทำให้กระเป๋า Punching ของเรา

1- ขยายบอลลูนตามขนาดที่คุณต้องการ

2- ห่อหัวของปมบอลลูนกับลูกบิดของจอยสติ๊ก

* ถ้าเราจะต่อยบอลลูนในเวลานี้มันจะไม่เลื่อนจอยสติ๊กเนื่องจากปมทำหน้าที่เป็นข้อต่อดังนั้นเราจะต้อง:

3- ใช้ซิลิกอนร้อนแนบปมกับลูกบิด

และขอแสดงความยินดีกระเป๋าเจาะของเราพร้อม:)

ขั้นตอนที่ 3: รหัส Arduino

ใน arduino เราแค่ไปอ่านค่าจอยสติ๊ก x และ y แต่คำถามหลักคือเมื่อไหร่ที่ฉันจะส่งค่าของฉันและวิธีที่จะทำให้พวกเขาเข้าใจ ฉันต้องการส่งตลอดเวลาหรือไม่ คำตอบคือไม่อย่างที่คุณจะเห็นในภายหลังเราจะเพิ่มพลังในความสามัคคีและมีการเพิ่มอย่างต่อเนื่องโดยไม่คำนึงว่าขนาดเล็กจะทำให้มันทำงานอย่างบ้าคลั่งดังนั้นเราจำเป็นต้องกำหนดค่าที่บ่งชี้ว่าจอยสติกขยับพอคือ เจาะ

สังเกตุว่าจอยสติกที่ตำแหน่งพักไม่ได้ให้ 0,0 แต่แทนค่ามัธยฐานระหว่าง 0 และค่าสูงสุดที่อ่านซึ่งเป็นค่าเริ่มต้น 1,023 ผมก็แมปค่าสำหรับการคำนวณง่ายขึ้นจาก (0, 255) ดังนั้นตำแหน่งพักผ่อนของเราคือ ประมาณ (124,124) และจากนั้นฉันพิจารณาว่าครึ่งทางระหว่าง 124 และ 255 (186) และ 124 และ 0 (62) จะบ่งบอกถึงการเคลื่อนไหวที่สำคัญและนั่นคือเมื่อฉันต้องการค่าของฉัน

การตั้งค่าเป็นโมฆะ () {

// ใส่รหัสการตั้งค่าของคุณที่นี่เพื่อเรียกใช้ครั้งเดียว:

Serial.begin (9600); }

void loop () {// ใส่รหัสหลักของคุณที่นี่เพื่อทำงานซ้ำ ๆ:

int x = analogRead (A0); int y = analogRead (A2); x = แผนที่ (x, 0, 1023, 0, 255); y = แผนที่ (y, 0, 1023, 0, 255); ถ้า (x> 185 || x <62 || y> 185 || y <62) {Serial.flush (); Serial.print (x); Serial.print (''); Serial.print (y); Serial.println (); ล่าช้า (20); }

ล่าช้า (20); // writetimout

}

ขั้นตอนที่ 4: รหัส Unity ตอนที่ 1

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

แก้ไข> การตั้งค่าโครงการ> โปรแกรมเล่น> เลื่อนลงเพื่อปรับให้เหมาะสมและเปลี่ยนความเข้ากันได้ของ api เป็น. NET 2.0

1- สร้างกระบอกซึ่งจะออกถุงเจาะ

2- แนบองค์ประกอบ rigidbody กับมัน คนที่แข็งทื่อเพียงแค่อนุญาตให้วัตถุนั้นอยู่ภายใต้กฎหมายของฟิสิกส์เอกภาพเช่นแรงโน้มถ่วงแรงมวล … ฯลฯ

3- ต่อข้อต่อสปริงเข้ากับมันและตรวจสอบให้แน่ใจว่าได้วางเดือย (กึ่งกลางของการหมุน) ที่ตรงกลางด้านบนของกระบอกสูบ

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

a- เปลี่ยนลากเชิงมุมถึง 10

b-change สปริงเป็น 70

c- ตั้งค่าแดมเปอร์เป็น 40

ขั้นตอนที่ 5: ความสามัคคีส่วนที่ 2 ให้อ่านและย้ายกระเป๋า

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

ใช้ UnityEngine;

ใช้ System.Collections; ใช้ System.IO.Ports;

Punch ระดับสาธารณะ: MonoBehaviour {

int สาธารณะ x, y; พลัง int สาธารณะ มุมลอยสาธารณะ เครื่องเล่น AudioSource สาธารณะ

Vector3 punchDir ส่วนตัว Rigidbody ส่วนตัวเจาะกระเป๋า; สตรีม SerialPort ส่วนตัว = ใหม่ SerialPort (@ ". " + "COM11", 9600);

// ใช้สำหรับการเริ่มต้นเป็นโมฆะเริ่มต้น () {

stream.Open (); stream.ReadTimeout = 25; StartCoroutine (readData ()); punchingBag = GetComponent (); } // Update เรียกว่าหนึ่งครั้งต่อเฟรมเป็นโมฆะ Update () {punchDir = new Vector3 (x, 0, y); มุม = Vector2.Angle (Vector2.up, punchDir); if (มุม <0) {Debug.Log ("ค่าลบ"); }}

โมฆะสาธารณะ punchIt (int _x, int _y) {punchDir = ใหม่ Vector3 (_x, 0f, _y); punchingBag.AddForce (power * punchDir); player.Play (); }

IEnumerator readData () {

ในขณะที่ (จริง) {ถ้า (สตรีม IsIspen) {

ลอง {

ค่าสตริง = stream.ReadLine (); string values ​​= value.Split (','); int x1 = int.Parse (ค่า 0); int y1 = int.Parse (ค่า 1); Debug.Log (x1); if (x1> = 62 && x1 <= 185) {x1 = 0;

} ถ้า if (x1> 185) {x1 = -1; } ถ้า if (x1 <62) {x1 = 1; }

ถ้า (y1> = 62 && y1 <= 185) {y1 = 0;

} อื่นถ้า (y1> 185) {y1 = -1; } อื่นถ้า (y1 <62) {y1 = 1; Debug.Log (x1); //Debug.Log(y1); punchIt (x1, y1); } catch (System.Exception) {// Debug.Log ("การยกเว้น TimeOut"); }

} ผลตอบแทนเป็นโมฆะ;

}

} }