แสดงบทความที่มีป้ายกำกับ programming แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ programming แสดงบทความทั้งหมด
วันจันทร์ที่ 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 ในการเชคกันครับ
วันเสาร์ที่ 31 มกราคม พ.ศ. 2558
แชร์โค้ด Unity : แสดงผลกราฟคลื่นเสียง (Sound Wave Visualizer) - AudioSource.GetOutputData()
ผมเลยเขียนโปรแกรมด้วย Unity เพื่อใช้ประโยชน์ในการนำเสนองาน
ซึ่งผมจะเอาส่วนนึงมาแชร์ เป็นการนำข้อมูลของกระแสเสียงที่ออกผ่านลำโพง
( ดึงค่าจาก audio.GetOutputData() ) มาแสดงผลเป็นกราฟของเสียง
ด้วย Component LineRenderer
การใช้งาน เดี๋ยวจะทำคลิปตามทีหลังนะครับ
ที่จริงลองไปเล่นดูก่อนได้ครับ มีตัวแปรให้ปรับสองสามตัว
จะเป็นพวกขนาด visualizer และก็ความละเอียดของกราฟครับ
ส่วนหน้าตาของโค้ดก็ประมาณนี้ครับ
รายละเอียดติดตามภายในคลิปนะครับ(เสร็จแล้วจะลงเพจอีกที)
รายละเอียดเพิ่มเติมในคลิปครับ
โค้ดดิบสำหรับก้อบ
using UnityEngine;
using System.Collections;
public class soundWave : MonoBehaviour
{
public LineRenderer lineRend;
public int quality = 50;
public float len = 25;
public float amplitude = 20;
void Update ()
{
float[] soundBit = new float[quality];
lineRend.SetVertexCount(quality);
if (audio.isPlaying)
{
for (int i = -quality / 2; i < quality / 2; i++)
{
audio.GetOutputData(soundBit, 0);
lineRend.SetPosition(i + quality / 2, new Vector3(i * (float)((float)len / (float)quality), soundBit[i + quality / 2] * amplitude, 0));
}
}
}
}
using System.Collections;
public class soundWave : MonoBehaviour
{
public LineRenderer lineRend;
public int quality = 50;
public float len = 25;
public float amplitude = 20;
void Update ()
{
float[] soundBit = new float[quality];
lineRend.SetVertexCount(quality);
if (audio.isPlaying)
{
for (int i = -quality / 2; i < quality / 2; i++)
{
audio.GetOutputData(soundBit, 0);
lineRend.SetPosition(i + quality / 2, new Vector3(i * (float)((float)len / (float)quality), soundBit[i + quality / 2] * amplitude, 0));
}
}
}
}
#7 - สารบัญโค้ด
วันเสาร์ที่ 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 (ยังไม่เสร็จ) เกมหน้าตาเป็นยังไง คลิก
วันพฤหัสบดีที่ 15 พฤษภาคม พ.ศ. 2557
[สอน C# for Unity] ตอนที่ 5 : การเข้าถึง Component
เราใช้สคริปเพื่อเปลี่ยนแปลงค่าและเรียกใช้คำสั่ง(ฟังชั่น)ใน component เพื่อให้เกิด action ต่างๆ,เกิดการเคลื่อนไหว,เปลี่ยนสี ,เล่นเสียง,เอฟเฟกประกอบ ให้ประสานกันกลายเป็นรูปแบบของการตอบสนองของเกม
วันอังคารที่ 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 ก็ไม่พ้นการเขียนโปรแกรม เนื่องจากการเขียนโปรแกรมทำให้สามารถถ่ายทอดความต้องการได้อย่างยืดหยุ่นและครบถ้วนไม่ว่าเราต้องการจะให้เกมของเราเป็นอย่างไรเราก็สามารถทำให้มันเกิดขึ้นจริงได้หมด
วันอาทิตย์ที่ 23 มีนาคม พ.ศ. 2557
Time.deltaTime เอาไว้ทำอะไร?
เจาะลึกความหมายและที่มาของค่า Time.deltaTime และวิธีการใช้งานเบื้องต้น
เพื่อใช้แก้ไขปัญหาเฟรมเรต (fps) ไม่คงที่ในแต่ละเครื่อง
วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557
LERP คืออะไร?
LERP() เป็นฟังชั่นทางคณิตศาสตร์ ใช้เพื่อขยับค่าของตัวแปรเป็นอัตราส่วน เมื่อทำซ้ำๆกับค่าเดิม
จะทำให้ค่าเปลี่ยนแปลงไปด้วยอัตราที่ช้าลงหรือเร็วขึ้นเรื่อยๆ
จึงมักจะนำไปใช้กับการเคลื่อนที่และการตอบสนองของ GUI (Graphic User Interface)
วันเสาร์ที่ 22 กุมภาพันธ์ พ.ศ. 2557
สอน unity : พื้นฐานเกี่ยวกับ collider แบบต่างๆ
รายละเอียดเบื้องต้นเกี่ยวกับความหมายของ collider ลักษณะของ collider แบบต่างๆ
ข้อดีข้อเสียของการใช้งาน วิธีเพิ่มประสิทธิภาพการใช้งาน collider และวิธีเช็คการชน
วันศุกร์ที่ 14 กุมภาพันธ์ พ.ศ. 2557
สอน unity : เช็คและควบคุมวัตถุที่ถูกยิงด้วย RayCastHit สำหรับ FPS
วิธีการใช้ RayCast เช็ควัตถุที่อยู่ในวิถีของกระสุน
เพื่อแก้ปัญหาการเบี่ยงองศาของกระสุนที่ทำให้ปลายทางของกระสุนไม่ใช่จุดกลางเป้าเล็ง
วันเสาร์ที่ 8 กุมภาพันธ์ พ.ศ. 2557
สอน unity : การเช็ควัตถุในระยะด้วย RayCast
การเช็ควัตถุที่มี collider ในระยะที่กำหนด สำหรับการเคลื่อนที่หรือตอบสนองตามสภาพเเว้ดล้อม
เช่น ระยะมองเห็นของมอนสเตอร์หรือ AI
วันพุธที่ 5 กุมภาพันธ์ พ.ศ. 2557
สอน unity : รู้จักกับ Event ต่างๆ Monobehavior
Monobehavior จะมีการตรวจจับ Event ที่เกิดขึ้นเเล้วทำคำสั่งที่เราเขียนไว้ใน Event นั้นๆ(หรือที่เรียกฟังชั่น/เมธอด) เช่น การคลิกบนวัตถุ การเริ่มเกม การชนของวัตถุ ฯลฯ
วันจันทร์ที่ 3 กุมภาพันธ์ พ.ศ. 2557
สอน unity : สร้างระบบยิง FPS + shooting effect
การสร้างระบบยิงกระสุน โดยใช้ prefab และ rigidbody
การใส่เอฟเฟกวิถีกระสุนด้วย trail renderer
สมัครสมาชิก:
บทความ (Atom)