วันพฤหัสบดีที่ 3 กันยายน พ.ศ. 2558

[Unity 2D] สร้างเกมง่ายๆ Tappy Plane ตอนที่ 11 : สร้างสิ่งกีดขวางและสุ่มตำแหน่ง

สร้างสิ่งกีดขวาง

สร้างเกมออบเจ็คใหม่ในที่นี้ตั้งชื่อว่า Rocks โดยจะให้เกมออบเจ็คนี้มีลูก 2 ตัวคือหินที่อยู่ข้างบนและหินที่อยู่ข้างล่าง ตั้งชื่อว่า RockTop และ RockButtom ตามลำดับ โดยให้เพิ่ม Component Sprite Renderer จากนั้นเพิ่มภาพเข้าไปในที่นี้ใช้ rockDown สำหรับ RockTop และ rock สำหรับ RockButtom
จากนั้นเพิ่ม Component PolygonCollider2D ให้ทั้ง RockTop และ RockButtom
จะได้ผลลัพธ์ดังนี้
ที่ Rocks เพิ่มคอมโพเนนท์ BoxCollider2D เพื่อกำหนดความกว้างให้เกมออบเจ็คสำหรับการวนลูป โดยกำหนดค่า Size X เท่ากับ 5 และ Size Y เท่ากับ 10
จะได้ผลลัพธ์ดังนี้
ปรับตำแหน่ง Z ให้เป็น -1 เนื่องจากเราอยากให้หินอยู่ใต้พื้นแล้วเพดานถ้ำ
คลิกดูใน 3D โหมดจะได้ดังนี้
หลังจากนั้นให้สร้าง Tag Rock และเพิ่มแท็กให้กับเกมออบเจ็ค Rocks เสร็จเรียบร้อยแล้วให้สร้างเกมออบเจ็ค Rocks เป็น Prefab
นำ Prefab Rocks ที่สร้างมาใช้งานใน Hierarchy เพิ่มอีก 5 ตัว เปลี่ยนชื่อเป็น Rock1 Rock2 Rock3 Rock4 Rock5 และ Rock6 จากนั้นเปลี่ยนตำแหน่ง X เป็น 0, 5, 10, 15, 20, 25 ตามลำดับ เนื่องจากแต่ละอันมีความกว้างเท่ากับ 5 จะได้ผลลัพธ์ดังนี้

สร้างตัวจัดการวนลูป

ไปที่ Child ของ Main Camera ให้ก๊อปปี้ตัว GroundLooper ในที่นี้เปลี่ยนชื่อเป็น RockLooper โดยให้ตำแหน่ง X เป็น -15

ที่ Script Looper ที่ Number Object ให้เปลี่ยนเป็น 6 เพราะเรามีเกมออบเจ็คหินทั้งหมด 6 ตัว ส่วนที่ Tag Name ให้เปลี่ยนเป็น Rock
ให้ลองรันและทดสอบเกมจะเห็นว่าตอนนี้เรามีสิ่งกีดขวางแบบ Infinity แล้ว

สุ่มตำแหน่ง

ต่อไปเราจะมาทำการสุ่มตำแหน่งความสูงของหินให้สูงต่ำไม่เท่ากันเพื่อเพิ่มความยากของตัวเกม
ให้สร้าง Script C# ขึ้นมาใหม่สำหรับการสุ่มความสูงของหิน ในที่นี้ใช้ชื่อว่า RockRandom

สร้างตัวแปร public float _Min; สำหรับค่าความสูงต่ำสุดที่จะนำมาสุ่ม และตัวแปร public float _Max; สำหรับค่าความสูงสูงสุดที่จะมาสุ่ม จากนั้นใช้ฟังก์ชั่น Random.Range(_Min, _Max); ในการสุ่มค่า โดยฟังก์ชั่นนี้จะ return ค่าเป็น float ระหว่างค่า _Min และ _Max ที่เราำหนดให้

จากนั้นเราจะกำหนดตำแหน่ง Y ให้กับออบเจ็ค Rocks ในฟังก์ชั่น Start() โดยใช้ transform.position ที่เคยใช้กันมาแล้วในหลายๆตอนที่ผ่านมา โดยจะได้โค้ดดังนี้

public class RockRandom : MonoBehaviour
{
  public float _Min;
  public float _Max;

  private void Start()
  {
    float y = Random.Range(_Min, _Max);
    Vector3 pos = new Vector3(transform.position.x, y, transform.position.z);
    transform.position = pos;
  }
}

จากนั้นเพิ่ม Script ให้กับเกมออบเจ็ค Rock1 ที่ Min ในที่นี้จะให้เท่ากับ -1.25 และ Max เท่ากับ 1.25 โดยค่า Min และ Max ผู้เรียนสามารถปรับเปลี่ยนได้ตามความเหมาะสม จากนั้นกด Apply ให้กับ Prefab
เมื่อรันเกมจะเห็นว่าหินมีการสุ่มตำแหน่ง Y เรียบร้อย



ไม่มีความคิดเห็น:

แสดงความคิดเห็น