แสดงบทความที่มีป้ายกำกับ script แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ script แสดงบทความทั้งหมด
วันจันทร์ที่ 30 มีนาคม พ.ศ. 2558
แชร์โค้ด Unity : การหยุดเกมด้วย timeScale
การหยุดเกมทำได้หลายวิธี บางคนเขียนโค้ดเทพ อาจจะเขียนโค้ดเพื่อสั่งหยุดการทำงานขงสคริปทุกตัวในออบเจกทุกตัวได้ แต่สำหรับเบื้องต้นมีวิธีง่ายๆอยู่เหมือนกันแต่อาจจะมีข้อจำกัดบ้างซึ่งผมจะพูดถึงทีหลัง
วิธีที่เราจะใช้ในโค้ดนี้คือการปรับค่าของตัวแปร Time.deltaTime ซึ่งเป็นตัวแปรที่ควบคุมการคำนวณที่อ้างอิงเวลา(ความเร็ว)ภายในเกมนั่นเองได้แก่พวก rigidbody และคำสั่งที่มีการคูณ Time.deltaTime ภายในโค้ด โดยตามปกติค่านี้จะอยู่ที่ 1.0 ถ้าเราปรับเป็น 0.5 เกมก็จะช้าลงครึ่งนึง ถ้าปรับเป็น 2.0 เกมจะเร็วสองเท่า แต่สำหรับโค้ดตัวนี้จะเซตค่าให้เท่ากับ 0.0 เพื่อเป็นการหยุดเกมครับ ใครขี้เกียจอ่านก็ดูในคลิปได้เลยครับ
วันเสาร์ที่ 28 มีนาคม พ.ศ. 2558
การเชคปุ่มที่ถูกกดว่าเป็นปุ่มอะไร
เกมส่วนใหญ่เรามักจะกำหนดเองว่าจะให้ผู้เล่นกดปุ่มไหนเพื่อทำแอคชั่นอะไร
เช่น w a s d เพื่อเดิน spacebar เพื่อกระโดด แต่สำหรับบางเกมเราต้องคอยเชคว่าผู้เล่นกดปุ่มไหนเพื่อนำไปเชคว่าผู้เล่นกดถูกปุ่มหรือเปล่า เช่นเกมแนวกดตาม เกมพิมดีด เกมเต้น
ที่นี้ตามปกติในเกมประเภทแรกเราจะใช้ Input.GetKey("a") ในการเชคว่าเอ้ะมีการกดปุ่ม A ในเฟรมนี้มั้ยส่วนในเกมประเภทหลังที่พูดถึงถ้าจะทำแบบเดียวกันจะต้องไล่เชคปุ่มบนคีบอร์ดที่มีเป็นร้อยปุ่ม(มั้ง) เปลืองทั้งเวลาและทรัพยากรณ์ CPU เพราะฉะนั้นปกติเราจะใช้ Event ในการเชคกันครับ
เช่น w a s d เพื่อเดิน spacebar เพื่อกระโดด แต่สำหรับบางเกมเราต้องคอยเชคว่าผู้เล่นกดปุ่มไหนเพื่อนำไปเชคว่าผู้เล่นกดถูกปุ่มหรือเปล่า เช่นเกมแนวกดตาม เกมพิมดีด เกมเต้น
ที่นี้ตามปกติในเกมประเภทแรกเราจะใช้ Input.GetKey("a") ในการเชคว่าเอ้ะมีการกดปุ่ม A ในเฟรมนี้มั้ยส่วนในเกมประเภทหลังที่พูดถึงถ้าจะทำแบบเดียวกันจะต้องไล่เชคปุ่มบนคีบอร์ดที่มีเป็นร้อยปุ่ม(มั้ง) เปลืองทั้งเวลาและทรัพยากรณ์ CPU เพราะฉะนั้นปกติเราจะใช้ Event ในการเชคกันครับ
วันเสาร์ที่ 17 มกราคม พ.ศ. 2558
แชร์โค้ด Unity : การตรวจจับวัตถุของ BOT
โค้ดนี้ได้ทำคลิปสอนวิธีการใช้งานคร่าวๆไว้ใน Youtube ครับ
ตัวโค้ดค่อนข้างยาวเลยขอแปะรูปไว้ให้อ่านกันง่ายๆนะครับ
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class botVision : MonoBehaviour
{
public float range = 5;
public float angleRange = 45;
public int resolution = 10;
public List<GameObject> seeingObj = new List<GameObject>();
float angle = 0;
void Update ()
{
seeingObj.Clear();
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
int oldListLen = seeingObj.Count;
bool[] existListHash = new bool[oldListLen];
angle = angleRange / resolution * ct1 * ct2;
Ray ray = new Ray(transform.position,new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
RaycastHit hitData;
if (Physics.Raycast(ray,out hitData,range))
{
if (hitData.collider.gameObject != gameObject)
if(seeingObj.Contains(hitData.collider.gameObject) == false)
seeingObj.Add(hitData.collider.gameObject);
}
}
}
}
//DEBUGGING ZONE//
void OnDrawGizmos()
{
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
angle = angleRange / resolution * ct1 * ct2;
Gizmos.color = Color.yellow;
Gizmos.DrawRay(transform.position, range * new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
}
}
}
}
#6 สารบัญแชร์โค้ด
ตัวโค้ดค่อนข้างยาวเลยขอแปะรูปไว้ให้อ่านกันง่ายๆนะครับ
สำหรับวิธีการใช้งาน
(ตอนก้อบโค้ดไปวางอย่าลืมเปลี่ยนชื่อไฟล์นะ)
using System.Collections;
using System.Collections.Generic;
public class botVision : MonoBehaviour
{
public float range = 5;
public float angleRange = 45;
public int resolution = 10;
public List<GameObject> seeingObj = new List<GameObject>();
float angle = 0;
void Update ()
{
seeingObj.Clear();
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
int oldListLen = seeingObj.Count;
bool[] existListHash = new bool[oldListLen];
angle = angleRange / resolution * ct1 * ct2;
Ray ray = new Ray(transform.position,new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
RaycastHit hitData;
if (Physics.Raycast(ray,out hitData,range))
{
if (hitData.collider.gameObject != gameObject)
if(seeingObj.Contains(hitData.collider.gameObject) == false)
seeingObj.Add(hitData.collider.gameObject);
}
}
}
}
//DEBUGGING ZONE//
void OnDrawGizmos()
{
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
angle = angleRange / resolution * ct1 * ct2;
Gizmos.color = Color.yellow;
Gizmos.DrawRay(transform.position, range * new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
}
}
}
}
#6 สารบัญแชร์โค้ด
วันศุกร์ที่ 19 ธันวาคม พ.ศ. 2557
ข้อจำกัดของการทำเกมบน iOS ด้วย Unity
เพราะวันนึงถ้าคิดเปลี่ยนใจจะมาเพิ่มแพลตฟอร์ม iOS นี้แล้ว ก็จะรู้ว่ามันไม่ใช่งาน
ง่ายๆเลยล่ะครับที่จะทำให้เกมของเราซัพพอร์ต iOS โดยที่ไม่เตรียมมาก่อนหน้า
ฟีเจอร์ต่างๆที่ไม่สามารถใช้งานในแพลตฟอร์ม iOS แบ่งเป็นหัวข้อตามนี้เลยครับ
วันอาทิตย์ที่ 21 กันยายน พ.ศ. 2557
สอน Unity : มาทำเกมกันเถอะ [Gunner Dodger]
เกม 2D แนว Surviving&Shooting วิ่ง หลบ ยิ่ง มุมมอง TopView
Tutorial ตอนนี้มีทั้งหมด 3 Part (ยังไม่เสร็จ) เกมหน้าตาเป็นยังไง คลิก
วันศุกร์ที่ 23 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 6 : Transform หมุน ขยับ ปรับขนาด
จากตอนที่แล้วได้พูดถึงการดึงค่าตัวแปรและการเรียกใช้งานฟังชั่นจากใน component กันไปเรียบร้อยแล้ว ตอนที่ 6 นี้จะมาสานต่อจากตอนที่ 5 ด้วยการแนะนำ component สุดฮิต Transform ที่ทุก GameObject ต้องมี ให้ทุกท่านได้รู้จักและนำไปใช้กัน
วันอังคารที่ 13 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 4 : คำสั่งที่เขียนไปทำงานตอนไหน?
ปกติในกานเขียนโปรแกรมธรรมดา จะมีลักษณะการเขียนคำสั่งเป็นชุด แล้วตั้งชื่อให้กลุ่มคำสั่งนั้น
แล้วเรียกใช้จากชื่อ ทำให้ไม่ต้องเขียนคำสั่งยาวๆซ้ำ เราเรียกลักษณะของชุดคำสั่งแบบนั้นว่า function
วันศุกร์ที่ 9 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 3 : สิ่งสำคัญสิ่งสุดท้าย if... else....
เอาละครับ ก่อนจะมาลงมือเขียนสคริปให้เกมของเรา ยังมีอีกอย่างนึงที่จำเป็นมากในการเขียนเกม
นั่นคือเงื่อนไข หรืออาจจะเรียกว่ากฎก็ได้ ว่าถ้าสิ่งไหนเกิดขึ้นเเล้วจะมีอะไรเกิดขึ้นตามมา
- ถ้าโดนยิง -> ตาย จบเกม
- ถ้าคลิกโดนและเวลายังไม่หมด -> ได้คะแนน
- ถ้ากดปุ่ม spacebar -> กระโดด
วันพฤหัสบดีที่ 8 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 2 : ตัวแปร
ตัวแปรเป็นสิ่งที่ขาดไม่ได้เลยในการโปรแกรมเกม
นึกดูสิถ้าคุณเล่น flappy bird อยู่แต่กลับไม่มีตัวแปรเก็บคะแนนที่เราอุตส่าบินผ่านท่อเขียวๆพวกนั้นมา
เเล้วเราก็จะเบื่อกับเกมนั้นเพราะไม่มีคะแนนไปอวดเพื่อนและชวนไฝ้ว์ต่อ
วันพุธที่ 7 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 1 : สคริป C# เบื้องต้น
ใน Unity สคริป จะถือว่าเป็น Component ชนิดหนึ่งไม่ต่างจาก component ที่ทำให้วัตถุไปอยู่ตามตำแหน่งต่างๆอย่าง transform หรือ component ที่ทำให้มีคุณสมบัติทางฟิสิกส์อย่าง rigidbody
วัตถุที่มี component ที่เป็น script อยู่จะมีคุณสมบัติเป็นอย่างไรก็ขึ้นอยู่กับว่าเราจะใส่อะไรเข้าไปบ้าง โดยวิธีถ่ายทอดความต้องการของเราเข้าไปในวัตถุผ่าน script ก็ไม่พ้นการเขียนโปรแกรม เนื่องจากการเขียนโปรแกรมทำให้สามารถถ่ายทอดความต้องการได้อย่างยืดหยุ่นและครบถ้วนไม่ว่าเราต้องการจะให้เกมของเราเป็นอย่างไรเราก็สามารถทำให้มันเกิดขึ้นจริงได้หมด
สมัครสมาชิก:
บทความ (Atom)