ทำระบบนับเวลาเปิดกล่องแม้ผู้เล่นจะปิดเกมไปแล้วกันดีกว่า

//ทำระบบนับเวลาเปิดกล่องแม้ผู้เล่นจะปิดเกมไปแล้วกันดีกว่า

สวัสดีครับ กลับมาพบกับเทคนิคดีๆในการเขียนเกมด้วย Unity กันอีกครั้งนะครับ วันนี้ผมก็มีเทคนิคเกี่ยวกับการเก็บค่าเวลาแบบ Offline มานำเสนอครับ


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

สิ่งที่เราต้องมีก่อนขึ้นแรกก็คือ

using System;

เป็นการเรียกใช้คลาสที่อยู่ใน System ทั้งหมดครับ ซึ่งจะมีคลาสที่เกี่ยวกับการทำงานกับเวลาอยู่ในนี้ครับ

DateTime currentDate;

ประกาศตัวแปร currentDate เพื่อเอาไว้เรียกเวลา ณ ปัจจุบันครับ

เมื่อเราต้องการจะเช็คเวลาก็ให้ทำการเรียก

currentDate = System.DateTime.Now;

เพื่อเอาเวลาตอนนี้ก่อนครับ

long temp = Convert.ToInt64(PlayerPrefs.GetString(“SaveTime”, “00”));

บรรทัดนี้คือคำสั่งดึงค่า String ที่เราเซฟไว้ในตัวแปรที่ชื่อว่า SaveTime ซึ่งถ้าไม่มีค่านี้เซฟไว้จะคืนค่าเป็น 00 ครับ

ตัวแปร String ที่ได้มาจะต้องแปลงกลับเป็นรูปแบบ DateTime ก่อนเพื่อให้สามารถเปรียบเทียบกับ currentDate ได้ครับ

DateTime SaveTime = DateTime.FromBinary(temp);

จากนั้นเราจะสร้างตัวแปรแบบ TimeSpan เพื่อดูว่า currentDate กับ Save time ต่างกันเท่าไหร่

TimeSpan difference = currentDate.Subtract(SaveTime);

แล้วเราจะเปรียบเทียบ Time Span เป็นหน่วยวินาทีครับ

Debug.Log(“Difference: ” + difference.TotalSeconds);

ค่าที่ได้ออกมาก็จะเป็นความแตกต่างว่าเวลาตอนนี้กับเวลาที่เราเซฟไว้ต่างกันเท่าไหร่ครับ ก็ใส่เงื่อนไขของเกมที่เราต้องการไป และถ้าอยากจะเซฟเวลาตอนนี้ให้เป็นค่ Save time เราก็ใช้คำสั่งนี้ครับ

PlayerPrefs.SetString(“SaveTime “, System.DateTime.Now.ToBinary().ToString());

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

 

 


By | 2017-12-26T01:48:11+00:00 December 26th, 2017|การใช้งาน Unity|0 Comments