แสดงบทความที่มีป้ายกำกับ unity แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ unity แสดงบทความทั้งหมด

วันจันทร์ที่ 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 สารบัญแชร์โค้ด

วันศุกร์ที่ 19 ธันวาคม พ.ศ. 2557

ข้อจำกัดของการทำเกมบน iOS ด้วย Unity



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

ข้อมูลส่วนนี้ผมขออนุญาติดึงมาจากเว็บหลัก
ของ Unity มาแปลให้อ่านกันง่ายๆจากต้นฉบับนี้

ฟีเจอร์ต่างๆที่ไม่สามารถใช้งานในแพลตฟอร์ม 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 ต้องมี ให้ทุกท่านได้รู้จักและนำไปใช้กัน

วันพฤหัสบดีที่ 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 ก็ไม่พ้นการเขียนโปรแกรม เนื่องจากการเขียนโปรแกรมทำให้สามารถถ่ายทอดความต้องการได้อย่างยืดหยุ่นและครบถ้วนไม่ว่าเราต้องการจะให้เกมของเราเป็นอย่างไรเราก็สามารถทำให้มันเกิดขึ้นจริงได้หมด

วันอาทิตย์ที่ 4 พฤษภาคม พ.ศ. 2557

สอน Unity : วิธีลงลายเซ็น keystore ให้กับ apk สำหรับลงขายใน Google Play



Android เป็นระบบ OS ที่มีแอพเยอะมาก มากจนเสี่ยงกับมัลแวร์ที่แฝงมากับแอพ
Android เลยประกาศว่า แอพพลิเคชั่นบนแอนดรอยทุกแอพฯ
จะต้องถูกเซ็นด้วยรหัสรูปแบบนึงที่เรียกว่า keystore certification
ใช้เพื่อป้องกันแอพปลอมที่ใช้ชื่อ และ package name เดียวกัน เพราะใครๆก็ตั้งเองได้ทั้งนั้น

วันเสาร์ที่ 19 เมษายน พ.ศ. 2557

โหลดติดตั้ง Unity Game Engine แบบฟรีไม่เสียตังค์


จะเขียนเกมด้วย Unity อย่างแรกก็ต้องมี Unity มาประทับไว้ในเครื่องของเราซะก่อน
Unity มีระบบป้องกันแฮคที่ค่อนข้างดี เลยทำให้มีขั้นตอนติดตั้งและเปิดใช้งานต่างจากโปรแกรมอื่นนิดหน่อย ตามเสต็บนี้เลยครับ (บน Windows นะ)

STEP 1 โหลด
  • ตามลิ้งค์นี้ unity3d.com/unity/download
  • เวอร์ชั่นล่าสุดคือ 4.3.4 ณ วันที่ 19 เมษา 2556
  • ขนาดประมาณ 1 GB

วันเสาร์ที่ 12 เมษายน พ.ศ. 2557

การปรับมิติของกล้องสำหรับเกม 2D และ 3D



เมื่อพูดถึงกราฟฟิกของเกม เรามักจะแบ่งเป็น

  • กราฟฟิกที่เหมือนวาดรูปขึ้นมา เรียกว่า 2D เช่น FlappyBird - GravityGuy - CandyCrushSaga
  • กราฟฟิกที่มีมิติมีความลึกของฉากเเละตัวละคร เรียกว่า 3D เช่น TitanFall - MineCraft
  • แต่ถ้าบางอย่างก็เป็น 2D แต่บางอย่างเป็น 3D อาจจะเรียกว่า 2.5D ก็ได้ เช่น A.R.E.S - FruitNunja

วันศุกร์ที่ 11 เมษายน พ.ศ. 2557

เตรียมเครื่องมือสำหรับการ Build เกมลง Android



สำหรับการจะทำให้เกมที่เราเพียรสร้างขึ้นมาให้กลายเป็นไฟล์ apk
เพื่อใช้ในการติดตั้งลง android device หรืออัพโหลดไปขายบน store
จะต้องทำการติดตั้ง tools เพิ่มลงไปในคอมพิวเตอร์ที่จะทำการ Build ออกมาเป็น apk

วันอาทิตย์ที่ 23 มีนาคม พ.ศ. 2557

Time.deltaTime เอาไว้ทำอะไร?

เจาะลึกความหมายและที่มาของค่า Time.deltaTime และวิธีการใช้งานเบื้องต้น
เพื่อใช้แก้ไขปัญหาเฟรมเรต (fps) ไม่คงที่ในแต่ละเครื่อง

วันพฤหัสบดีที่ 13 มีนาคม พ.ศ. 2557

การรับ input จากคีย์บอร์ดด้วยคำสั่ง GetKey...

ลักษณะของคำสั่ง Input.GetKey...() แบบต่างๆใช้ในการรับ input จากผู้เล่น
ซึ่งมีจังหวะการกดที่แตกต่างกัน ทั้งคีย์บอร์ด/เมาส์บน PC รวมทั้งการสัมผัสจอบนอุปกรณ์มือถือ
เช่น Input.GetKeyDown() , Input.GetKeyUp()

วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557

LERP คืออะไร?

LERP() เป็นฟังชั่นทางคณิตศาสตร์ ใช้เพื่อขยับค่าของตัวแปรเป็นอัตราส่วน เมื่อทำซ้ำๆกับค่าเดิม
จะทำให้ค่าเปลี่ยนแปลงไปด้วยอัตราที่ช้าลงหรือเร็วขึ้นเรื่อยๆ 
จึงมักจะนำไปใช้กับการเคลื่อนที่และการตอบสนองของ GUI (Graphic User Interface)

วันเสาร์ที่ 1 มีนาคม พ.ศ. 2557

แอพ "กระดานหมาก"




แอพนี้เป็นของแอดเองครับ
ตอนแรกทำมาเล่นด้วยกันกับเพื่อน พอมีโอกาสเลยปล่อยลง google play