วิธีการสร้างเกม Android ขั้นพื้นฐานด้วย Unity

ในบทแนะนำ Appual ก่อนหน้าที่หัวข้อวิธีสร้าง Unity Platform Game ( และส่วนที่ 2) เราใช้ Unity และปลั๊กอิน WebGL ในตัวเพื่อสร้างเว็บเบราเซอร์ที่ใช้ HTML5 แบบง่ายๆ - เราจะพูดถึงวิธีสร้างเกม Android ขั้นพื้นฐานโดยใช้ Unity

ที่ต้องการ:

  • เอกภาพ
  • แก้ไขข้อความที่ดีเช่น Notepad + + (ตัวเลือก แต่แนะนำ)
  • Android SDK
หากคุณยังไม่ได้ใช้คุณควรเริ่มต้นด้วยการดาวน์โหลดและติดตั้ง Unity SDK และ Android SDK เราต้องการ Android SDK เพื่อให้เราสามารถทดสอบ APK ของเกมในสภาพแวดล้อมระบบ Android

เปิด Unity และสร้างโครงการใหม่ ทำให้เป็นโครงการ 2D

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

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

ลากและวางสไปรต์ของคุณลงในหน้าต่างฉากหลัก (หน้าต่างใหญ่ที่สุด) - นอกจากนี้ยังจะปรากฏในแผงลำดับชั้นทางด้านซ้าย

ดังนั้นตอนนี้เราจะสร้างแพลตฟอร์มไม่กี่ซึ่งอาจเป็นสี่เหลี่ยมจัตุรัสง่ายๆเพราะเราสามารถปรับขนาดได้ง่ายเพื่อสร้างกำแพงและแพลตฟอร์มอื่น ๆ

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

ตอนนี้เราจำเป็นต้องสั่ง Unity เพื่อให้ฟิสิกส์กับตัวละครหลักของเราคลิกที่ตัวละครหลักของสไปรต์ (ควรเน้นสีฟ้าในหน้าต่าง Scene) จากนั้นในแผงควบคุมให้ค้นหา GameObjects

คลิกที่ Add Component> Physics 2D> RigidBody2D นี้จะเพิ่มฟิสิกส์เพื่อสไปรต์ของคุณซึ่งคุณจะต้องมีสคริปต์อื่นด้วยตัวคุณเองใน SDK อื่น

เราต้องการป้องกันไม่ให้ตัวละครสไปรท์หลักปั่นออกจากการควบคุม - เพื่อหาแท็บ Constraints ในแผงควบคุม (กับสไปรต์หลักยังคงเน้นในหน้าต่าง Scene) และทำเครื่องหมายที่ช่องสำหรับ Freeze Rotation Z

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

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

เพื่อที่จะหยุดตัวละครสไปรท์หลักของเราจากการล้มลงเรื่อย ๆ เราจะต้องเพิ่มคอลเดอร์ นี่เป็นเพียงเค้าร่างที่มั่นคงของรูปร่างที่เราจะเพิ่มลงในตัวละครสไปรท์หลัก เน้นตัวละครสไปรท์หลักของคุณคลิกเพิ่มคอมโพเนนต์> ฟิสิกส์ 2D> BoxCollider2D

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

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

นี่เป็นสิ่งสำคัญโดยเฉพาะอย่างยิ่งหากคุณสร้าง นักวิ่งที่ใช้ 3D เช่น Slope ที่คุณต้องการให้กล้องอยู่ตลอดเวลาหลังเกมหลัก (ตัวละครสไปรท์หลักของคุณ)

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

ดังนั้นในบทแนะนำเกมนี้เราจะสร้างเกมประเภท runner แบบไม่มีที่สิ้นสุดเช่น Run 3 ซึ่งตัวละครหลักของคุณจะวิ่งข้ามหน้าจอและหลบสิ่งกีดขวาง (หรือเล่นเกมต่อ ๆ ไปถ้าคุณประสบปัญหาอุปสรรค) เพื่อใช้สคริปบางส่วนซึ่งส่วนใหญ่จะมีให้ในคู่มือนี้

คลิกขวาที่โฟลเดอร์ Assets และสร้างโฟลเดอร์ใหม่ - ตั้งชื่อว่า Scripts ตอนนี้คลิกขวาที่โฟลเดอร์ใหม่นี้แล้วกด Create> C # Script และตั้งชื่อว่า PlayerControls สคริปต์นี้จะกำหนดพฤติกรรมของตัวละครสไปรต์หลักของเรา

เมื่อคุณคลิกสองครั้งที่สคริปต์ใหม่นี้ ควร เปิดขึ้นใน Visual Studio - หรือ (และความชอบส่วนตัวของฉัน) คุณสามารถแก้ไขได้ในบางอย่างเช่น NotePad + +

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

เหนือบรรทัด void Start ():

ประชาชน Rigidbody2D rb;

บิตถัดไปของโค้ดที่เราต้องการจะเพิ่มขึ้นจะอยู่ภายใน Start () และใช้เพื่อหาคนที่แข็ง - โดยทั่วไปเรากำลังสอน Unity เพื่อหาฟิสิกส์ที่เราแนบมากับ GameObjects (ตัวละครสไปรท์หลักของเรา) และ Start () จะถูกเรียกใช้เมื่อมีการสร้างอ็อบเจ็กต์หรือสคริปต์ใหม่

ต่อไปหาวัตถุฟิสิกส์

 rb = GetComponent < Rigidbody2D > (); 

และคุณจะเพิ่มบรรทัดนี้ภายใน Update ()

 rb.velocity = new เวกเตอร์ 2 (3, rb.velocity.y); 

Update () จะรีเฟรชอยู่ตลอดเวลาดังนั้นโค้ดใด ๆ ที่เพิ่มเข้าไปจะทำงานอย่างต่อเนื่อง (เว้นแต่วัตถุจะถูกทำลาย) ดังนั้นสิ่งที่เราได้ทำคือสั่งให้สคริปต์ที่เราต้องการให้ตัวยึดแข็งมีเวกเตอร์ใหม่โดยใช้ความเร็วเท่ากันที่แกน Y (rb.velocity.y) แต่มีความเร็ว 3 ที่แกนนอน ในอนาคตคุณสามารถใช้ ' FixedUpdate ()' ซึ่งคล้ายกัน แต่ต่างกันเนื่องจากมีคุณสามารถควบคุมจำนวนอัพเดต / รีเฟรชของสคริปต์ได้

บันทึกสคริปต์และกลับไปที่ Unity จากนั้นคลิกที่ไอคอนหลักของสไปรท์เพื่อไฮไลต์ ในแผงควบคุมให้ไปที่ Add Component> Scripts และเพิ่มสคริปต์ที่เราเพิ่งบันทึกไว้ ตอนนี้เมื่อคุณคลิกที่ปุ่ม Play อักขระหลักของสไปรท์จะเคลื่อนไปที่ขอบของแพลตฟอร์มอย่างต่อเนื่อง

PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่

การสร้างตัวควบคุมการป้อนข้อมูลของ Player

ดังนั้นเนื่องจากนี่เป็นเกมสไตล์นักวิ่งที่ไม่มีที่สิ้นสุดซึ่งมีอุปสรรคเราจำเป็นต้องเพิ่มตัวควบคุมสำหรับโปรแกรมเล่นเช่นปุ่ม 'กระโดด'

เปิดสคริปต์อีกครั้งจากก่อนหน้านี้และเราจะเพิ่มโค้ดเพิ่มเติมนี้:

 if (Input.GetMouseButtonDown (0)) {rb.velocity = เวกเตอร์ ใหม่ (rb.velocity.x, 5); } 

คุณจะใส่ข้อมูลนั้นในวิธี Update () และสิ่งที่เป็นพื้นฐานก็คือบอก Unity ว่าเมื่อผู้เล่นคลิกที่ปุ่มเมาส์ (ซึ่งจะแปลเป็นหน้าจอแตะบน Android) อักขระสไปรท์หลักจะกระโดดขึ้น อากาศ. เนื่องจากเราได้เพิ่มความเร็วบนแกน Y ด้วยค่า 5 (ค่าที่สูงกว่าหมายถึงการกระโดดสูงขึ้นแน่นอน)

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

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

ต่อไปเราจะเพิ่มอุปสรรคของเรา (ซึ่งสามารถทำลายสไปรท์ตัวหลัก) คะแนนเกมและเกมเหนือเมนู

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

ในสคริปต์ให้เพิ่มโค้ด ด้านบนนี้ลง ใน Update () method:

 การ แปลง groundCheck สาธารณะ การเริ่มต้นการแปลงข้อมูล สาธารณะ groundCheckRadius ลอย สาธารณะ ; สาธารณะ LayerMask whatIsGround; ส่วนตัว bool onGround; จากนั้นเพิ่มบรรทัดต่อไปนี้ลงในแนวทางการอัปเดตเหนือคำสั่ง If: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); และต่อไปคุณจะเปลี่ยนบรรทัดต่อไปนี้เพื่อรวม && onGround ถ้า (Input.GetMouseButtonDown (0) && onGround) {ดังนั้นสคริปต์ทั้งหมดของเราควรมีลักษณะดังนี้: PlayerControls ระดับ สาธารณะ : MonoBehaviour { public Rigidbody2D rb; การ แปลง groundCheck สาธารณะ การเริ่มต้นการแปลงข้อมูล สาธารณะ groundCheckRadius ลอย สาธารณะ ; สาธารณะ LayerMask whatIsGround; ส่วนตัว bool onGround; โมฆะ เริ่ม () {rb = GetComponent (); } void Update () {rb.velocity = เวกเตอร์ ใหม่ (3, rb.velocity.y); onGround = ฟิสิกส์2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); if (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = new Vector2 (rb.velocity.x, 5); }}} 

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

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

ตอนนี้ให้คลิกขวาที่ลำดับชั้นและสร้างวัตถุว่างเปล่าใหม่และลากเพื่อให้อยู่ใต้ตัวละครหลักสไปรท์ในหน้าต่างฉากหลักวางตำแหน่งของวัตถุที่ว่างเปล่านี้ไว้ในตำแหน่งที่เราต้องการตรวจพบพื้น เปลี่ยนชื่อวัตถุเพื่อตรวจสอบ Ground แล้วลากไปวางไว้ใต้วัตถุเกมของผู้เล่นเช่นที่เราทำไว้ก่อนหน้านี้กับกล้อง (เพื่อสร้างความสัมพันธ์ระหว่างแม่กับลูก) ตอนนี้วัตถุที่ว่างเปล่าจะทำตามตัวละครหลักเทพดาเช่นเดียวกับกล้องและมันอย่างต่อเนื่องจะตรวจสอบ floor.cam ชั้น

ตอนนี้เลือกตัวละครสไปรต์หลักและไปที่แผงตรวจสอบ - ลากวัตถุ Check Ground ลงในช่องว่างที่เรียกว่า groundCheck ตำแหน่ง 'transform' ควรเท่ากับตำแหน่งของวัตถุใหม่นี้และตำแหน่งที่บอกว่า Radius ให้ 0.1

เราจำเป็นต้องกำหนดชั้นดิน เพียงเลือกพื้นดินและใน Inspector ให้หาปุ่มสำหรับเลเยอร์: ค่าเริ่มต้น (เป็นช่องแบบเลื่อนลง) และเลือกเพิ่มเลเยอร์

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

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

เกมที่เกี่ยวกับความขัดแย้งและเมนูเกม

ดังนั้นสิ่งสุดท้ายที่เราต้องทำคือการทำให้เกิดปัญหากับอุปสรรคในเกมและ B: สร้างเกมผ่านเมนูหน้าจอด้วยปุ่มเล่นอีกครั้ง

สิ่งที่คุณต้องการทำโดยทั่วไปคือ:

  1. เพิ่มวัตถุ Player และกำหนด rigidbody และ collider ให้ คุณเลือก
  2. เพิ่มวัตถุ ศัตรู และกำหนด rigidbody และ collider ของ choise ของคุณไป (และเลือกเพิ่ม แท็ก Enemy ลงไป)
  3. สร้าง สคริปต์ C # ใหม่และเพิ่มเป็นส่วนหนึ่งของ Player (หรือใช้สคริปต์ใด ๆ ที่เชื่อมต่อกับผู้เล่นไม่จำเป็นต้องสร้างสคริปต์ใหม่หากมีอยู่แล้ว)
  4. เพิ่มข้อมูลนี้ในสคริปต์ของคุณ:
 เป็นโมฆะ OnCollisionEnter (collision coll) {Debug.Log ("ชน"); // ตรวจสอบดูว่ามีการลงทะเบียนการชนกันหรือไม่ถ้าทำได้คุณสามารถลบบรรทัดนี้ได้ ถ้า (coll.gameobject.tag == "Enemy") { // เห็นว่าวัตถุที่ผู้เล่นของคุณชนเข้ากับมีแท็กชื่อ "Enemy" "นี้สามารถถูกแทนที่ด้วย if (coll.gameobject.name == ... แต่การใช้แท็กเป็นวิธีง่ายๆในการทำ // เพิ่มโค้ดของคุณที่นี่เช่น: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // ถ้าใช้งานคุณสามารถลบบรรทัดนี้ได้ } 

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

ตอนนี้เพื่อดูวิธีการสร้างระดับ GameOver ด้วยปุ่ม Play ให้ดูที่ส่วนสุดท้ายของ Appual วิธีการสร้าง Basic Unity Platform Game Pt 2

PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่

Facebook Twitter Google Plus Pinterest