วันจันทร์ที่ 30 มีนาคม พ.ศ. 2558

แชร์โค้ด Unity : การหยุดเกมด้วย timeScale


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



วิธีที่เราจะใช้ในโค้ดนี้คือการปรับค่าของตัวแปร Time.deltaTime ซึ่งเป็นตัวแปรที่ควบคุมการคำนวณที่อ้างอิงเวลา(ความเร็ว)ภายในเกมนั่นเองได้แก่พวก rigidbody และคำสั่งที่มีการคูณ Time.deltaTime ภายในโค้ด โดยตามปกติค่านี้จะอยู่ที่ 1.0 ถ้าเราปรับเป็น 0.5 เกมก็จะช้าลงครึ่งนึง ถ้าปรับเป็น 2.0 เกมจะเร็วสองเท่า แต่สำหรับโค้ดตัวนี้จะเซตค่าให้เท่ากับ 0.0 เพื่อเป็นการหยุดเกมครับ ใครขี้เกียจอ่านก็ดูในคลิปได้เลยครับ



ในโค้ดตัวนี้จะให้เชคการคลิกปุ่มซ้ายของเมาส์ เมื่อมีการคลิกจะเชคว่า
- ถ้า timeScale เดิมเป็น 1 (เกมเล่นอยู่ปกติ)ให้หยุดเกม(โดยเปลี่ยนเป็น 0)
- ถ้า timeScale เดิมเป็น 0 (เกมหยุดอยู่)ให้เดินเกมต่า(โดยเปลี่ยนเป็น 1)

using UnityEngine;
using System.Collections;

public class pauseScript : MonoBehaviour 
{
 void Update () 
 {
  if (Input.GetKeyDown (KeyCode.Mouse0)) 
  {
   if(Time.timeScale == 1)
    Time.timeScale = 0;
   else
    Time.timeScale = 1;
  }
 }
}

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

 #7 - สารบัญโค้ด
 อ้างอิง docs.unity3d.com/ScriptReference/Time-timeScale.html