สร้างเกม - pause game : หยุดก่อนเข้าห้องน้ำแปป !!!
แน่นอนครับ เกมส์ทุกเกมส์ส่วนใหญ่บนโลกใบนี้ จะต้องสามารถที่หยุดเกมส์เอาไว้ก่อน แล้วค่อยกลับมาเล่นต่อได้ ซึ่งวิธีใน Unity มีขั้นตอนในการหยุดเกมที่ทำได้หลายวิธี บางคนเขียนโค้ดเทพ อาจจะเขียนโค้ดเพื่อสั่งหยุดการทำงานขงสคริปทุกตัวในออบเจกทุกตัวได้ แต่สำหรับเบื้องต้นมีวิธีง่ายๆอยู่
วิธีที่เราจะใช้ในโค้ดนี้คือการปรับค่าของตัวแปร 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 testPause : MonoBehaviour {
void Update () {
if (Input.GetKeyDown (KeyCode.Mouse0))
{
if(Time.timeScale == 1)
Time.timeScale = 0;
else Time.timeScale = 1;
}
}
}
ลองดูกันครับ เป็นวิธีที่ง่าย แต่วิธีนี้มันหยุดทุกอย่างของเกมส์ ซึ่งบางครั้งบางอย่างของเกมส์ไม่สามารถหยุดได้ เราก็ต้องเขียนโค้ดเพื่อหยุดการทำงานของ script นั้นๆ แล้วมันทำยังไงละ
ก็ขออธิบายง่ายๆ ก็คือโค้ดส่วนไหนที่ทำงานในฟังชั่น update() เราก็ไป if else ให้มันสะ เช่น
bool gamePause = false;
void Update () {
if (gamePause)
{
debug.Log("pause");
}
else {
โค้ดที่เกมส์ทำงาน
}
}
ก็ประมาณนี้ ส่วนเราจะสั่งให้ gamePause เป็น true ตอนไหน ก็อยู่ที่เราแล้วจัดไป สู้ๆครับ
วิธีที่เราจะใช้ในโค้ดนี้คือการปรับค่าของตัวแปร 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 testPause : MonoBehaviour {
void Update () {
if (Input.GetKeyDown (KeyCode.Mouse0))
{
if(Time.timeScale == 1)
Time.timeScale = 0;
else Time.timeScale = 1;
}
}
}
ลองดูกันครับ เป็นวิธีที่ง่าย แต่วิธีนี้มันหยุดทุกอย่างของเกมส์ ซึ่งบางครั้งบางอย่างของเกมส์ไม่สามารถหยุดได้ เราก็ต้องเขียนโค้ดเพื่อหยุดการทำงานของ script นั้นๆ แล้วมันทำยังไงละ
ก็ขออธิบายง่ายๆ ก็คือโค้ดส่วนไหนที่ทำงานในฟังชั่น update() เราก็ไป if else ให้มันสะ เช่น
bool gamePause = false;
void Update () {
if (gamePause)
{
debug.Log("pause");
}
else {
โค้ดที่เกมส์ทำงาน
}
}
ก็ประมาณนี้ ส่วนเราจะสั่งให้ gamePause เป็น true ตอนไหน ก็อยู่ที่เราแล้วจัดไป สู้ๆครับ
ดีมากๆ
ตอบลบใช่
ลบอืม
ลบจริงด้วย
ตอบลบครับ
ตอบลบ