วันเสาร์ที่ 13 มิถุนายน พ.ศ. 2558

แชร์ไฟล์โปรเจค : เขียน AI บอตคลั่งวิ่งไล่

ไฟล์โปรเจคจากคลิปสอน "เขียน AI บอตคลั่งวิ่งไล่"
ไฟล์โปรเจคก่อนทำ [คลิกที่นี่]
ไฟล์โปรเจคหลังทำ [คลิกที่นี่]

วันพุธที่ 13 พฤษภาคม พ.ศ. 2558

แชร์ไฟล์โปรเจค : เกมตอบคำถาม

ไฟล์โปรเจคจากคลิปสอน "ทำเกมตอบคำถามง่ายๆ ด้วย Unity 5 UI"
[โหลดตรงได้จาก mediafire] คลิกที่นี่
[ดูคลิป] คลิกที่นี่

วันจันทร์ที่ 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 ในการเชคกันครับ

วันเสาร์ที่ 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 / 2i < quality / 2i++)
            {
                audio.GetOutputData(soundBit0);
                lineRend.SetPosition(i + quality / 2new Vector3(i * (float)((float)len / (float)quality), soundBit[i + quality / 2] * amplitude0));
            }
        }
    }
}


วันเสาร์ที่ 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<GameObjectseeingObj = new List<GameObject>();

    float angle = 0;

    void Update () 
    {
        seeingObj.Clear();

        for (int ct1 = 0ct1 < resolutionct1++)
        {
            for (int ct2 = -1ct2 <= 1ct2 += 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), 0Mathf.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 = 0ct1 < resolutionct1++)
        {
            for (int ct2 = -1ct2 <= 1ct2 += 2)
            {
                angle = angleRange / resolution * ct1 * ct2;
                Gizmos.color = Color.yellow;
                Gizmos.DrawRay(transform.positionrange * new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
            }
        }
    }
}


#6 สารบัญแชร์โค้ด