วันพุธที่ 31 ธันวาคม พ.ศ. 2557

แชร์โค้ด Unity : เปลี่ยนสี background กล้อง

ใช้ฟังชั่น Color.Lerp() ในการเขยิบค่าสีเดิมของแบคกราวกล้อง ให้ค่อยๆกลายไปเป็นสีใหม่ตามค่าสีที่ใส่ตัวแปร changeTo

การใช้งานให้ทำการใส่ค่าสีที่ต้องการเข้าไปในตัวแปร changeTo
อาจจะสั่งเปลี่ยนสีจากสคริปอื่นหรือตั้งเงื่อนไขการเปลี่ยนสีในสคริปนี้เลยก็ได้

using UnityEngine;
using System.Collections;

public class cameraBG : MonoBehaviour 
{
    public Color changeTo;

    void Update () 
    {
        camera.backgroundColor = Color.Lerp(camera.backgroundColorcurrentColor , Time.deltaTime);    
    }
}

แชร์โค้ด Unity : ตัวหนังสือลอยจาง

เป็นโค้ดควบคุมเอฟเฟกตัวหนังสือให้ลอยขึ้นและจางหายไป
ใช้กับตัวคู่กับวัตถุที่แสดงผลตัวอักษรด้วย TextMesh นะครับ

การใช้งานให้ลากวัตถุใส่ในตัวแปรก่อนจากใน Editor 
ใส่ข้อความที่ต้องการให้แสดงใน  text
ใส่ตำแหน่งที่ต้องการแสดงผลใน  popPos
ใส่สีเริ่มต้นใน startColor (สีจะจางลง)

using UnityEngine;
using System.Collections;

public class floatText : MonoBehaviour
{
    public TextMesh tm;
    public Vector3 popPos;
    public string text;
    public Color startColor;


    float timeCount = 0;

    void Start()
    {
        tm.text = text;
        transform.position = popPos;
        tm.color = startColor;
    }

    void Update () 
    {
        transform.position += Vector3.up *Time.deltaTime;
    
        timeCount += Time.deltaTime;

        if(timeCount > 1)
            tm.color -= new Color(000Time.deltaTime*5f);
    }
}

แชร์โค้ด Unity : เอฟเฟกสีจาง

ใช้วิธีค่อยๆลดค่า alpha ของสีที่อยู่ใน component ที่ควบคุมการแสดงผบของวัตถุนั้นอยู่ สำหรับเกม 3D ปกติจะเป็น mesh renderer สามารถดึงค่าสีได้จาก gameObject.renderer.material.color ส่วนในเกม 2D ที่ใช้ SpriteRenderer จะต้องทำการลากตัวนี้ขึ้นมาใส่เข้ามาก่อนถึงจะปรับเปลี่ยนค่าสีได้

โค้ดนี้ผมใช้บ่อยมากครับ ถ้าใครมีโค้ดที่ดีกว่านี้ก็แนะนำด้วยนะครับ :)

โค้ดสำหรับ 3D ที่ใช้ mesh renderer

using UnityEngine;
using System.Collections;

public class fadeOut3D : MonoBehaviour 

{
    void Update () 
    {
        renderer.material.color -= new Color (000Time.deltaTime);

        //พอสีจางจนมองไม่เห็นก็ Destroy วัตถุ
        if (renderer.material.color.a <= 0)
            Destroy (gameObject);
    }

}


วันอังคารที่ 30 ธันวาคม พ.ศ. 2557

แชร์โค้ด Unity : บอลเด้งขอบจอ

ปัญหาใหญ่ของการทำการเด้งแบบนี้คือถ้าเราใช้การเด้งกับ collider ตามปกติ เราจะไม่รู้ว่าขอบจออยู่ตรงไหนเราเอา collider ไปวางไม่ถูกที่เพราะจอของแต่ละเครื่องมันอัตราส่วนหรือขนาดไม่เท่ากัน เลยเลยใช้คำสั่ง Camera.main.ScreenToWorldPoint() เพื่อหาตำแหน่งขอบจอแล้วนำมากำหนดระยะการเด้งของลูกบอล โค้ดอาจจะยาวๆก็ลองแกะกันดูเนาะ โค้ดส่วนนี้ได้เอาไปใช้งานจริงในเกม Kick it Up! บน Android ก็ลองเล่นกันดูได้

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

รวมโค้ดทั้งหมดที่แชร์บนบล้อก(6)
กด Ctrl + F เพื่อค้นหาจากชื่อ

ตัวหนังสือลอยจาง
บอลเด้งขอบจอ
เปลี่ยนสี background กล้อง
ส่งตัวแปรข้ามคลาส
เอฟเฟกสีจาง
อักษรลอยจาง
การมองเห็นของบอต
แสดงกราฟคลื่นเสียง

- ENGLISH-
Camera background color transition
Edge bounce
Effect Fade Color
Fade Color
Float Text
Pass variable between class
Bot visible range and get object
Sound wave visualizer


แชร์โค้ด Unity : ส่งตัวแปรข้ามคลาส

ตัวอย่างโค้ดการส่งตัวแปรข้ามคลาส
ส่งตัวแปร score จากคลาส a ไปยังคลาส b1 และ b2 (ใช้คนละวิธีกัน)
หรืออาจจะบอกว่าเป็นการเรียกตัวแปร score จากคลาสอื่นก็ได้

โค้ดตัวแรก class a

using UnityEngine;
using System.Collections;

public class a : MonoBehaviour
{
public int score = 0;

void Update ()
    {
//Do something with score
        score++;
}
}

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

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



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

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

ฟีเจอร์ต่างๆที่ไม่สามารถใช้งานในแพลตฟอร์ม iOS แบ่งเป็นหัวข้อตามนี้เลยครับ

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

[Setup] เตรียมทำเกม Android บน Mac OS X



บทความนี้นะครับ ผมจะมาบอกขั้นตอนการเตรียมเครื่องมือที่จำเป็นสำหรับการ Build เกมจาก Unity ลงใน Android ด้วยเครื่อง Mac นะครับ (ฉบับมือใหม่แกะกล่องเพราะผมเองก็พึ่งแกะ)

วันอาทิตย์ที่ 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 ต้องมี ให้ทุกท่านได้รู้จักและนำไปใช้กัน

วันจันทร์ที่ 19 พฤษภาคม พ.ศ. 2557

เซฟเกมด้วย PlayerPrefs()



PlayerPrefs() เป็นฟังขั่นอีกตัวนึงที่ Unity ทำเอาไว้ให้ใช้กัน ฟังขั่นตัวนี้จะทำหน้าที่เก็บค่าของข้อมูลเอาไว้ในเครื่อง อย่างใน windows PlayerPrefs จะถูเก็บเอาไว้ใน registry ซึ่งจะไม่หายไปเมื่อปิดเปิดเกมใหม่

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

วันพฤหัสบดีที่ 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




วันเสาร์ที่ 22 กุมภาพันธ์ พ.ศ. 2557

สอน unity : พื้นฐานเกี่ยวกับ collider แบบต่างๆ



รายละเอียดเบื้องต้นเกี่ยวกับความหมายของ collider ลักษณะของ collider แบบต่างๆ 
ข้อดีข้อเสียของการใช้งาน วิธีเพิ่มประสิทธิภาพการใช้งาน collider และวิธีเช็คการชน

วันอังคารที่ 18 กุมภาพันธ์ พ.ศ. 2557

สอน blender : การทำ 3D animation ง่ายๆด้วย Blender [สำหรับการใช้งาน root motion ใน unity]



สอนวิธีการใส่แอนิเมชั่นให้กับ cube object ในโปรแกรม Blender
เป็นคลิปย่อยของคลิปสอนการทำ root motion ใน unity

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

สอน unity : เช็คและควบคุมวัตถุที่ถูกยิงด้วย RayCastHit สำหรับ FPS



วิธีการใช้ RayCast เช็ควัตถุที่อยู่ในวิถีของกระสุน 
เพื่อแก้ปัญหาการเบี่ยงองศาของกระสุนที่ทำให้ปลายทางของกระสุนไม่ใช่จุดกลางเป้าเล็ง

วันพฤหัสบดีที่ 13 กุมภาพันธ์ พ.ศ. 2557

ปรับแต่ง unity : การติดตั้ง Microsoft Visual Studio & Unity3D



วิธีเปลี่ยน IDE จาก monoDevelop เป็น MS Visual Studio ใน unity

วันเสาร์ที่ 8 กุมภาพันธ์ พ.ศ. 2557

สอน unity : การเช็ควัตถุในระยะด้วย RayCast



การเช็ควัตถุที่มี collider ในระยะที่กำหนด สำหรับการเคลื่อนที่หรือตอบสนองตามสภาพเเว้ดล้อม 
เช่น ระยะมองเห็นของมอนสเตอร์หรือ AI

วันพุธที่ 5 กุมภาพันธ์ พ.ศ. 2557

สอน unity : รู้จักกับ Event ต่างๆ Monobehavior



Monobehavior จะมีการตรวจจับ Event ที่เกิดขึ้นเเล้วทำคำสั่งที่เราเขียนไว้ใน Event นั้นๆ(หรือที่เรียกฟังชั่น/เมธอด) เช่น การคลิกบนวัตถุ การเริ่มเกม การชนของวัตถุ ฯลฯ

วันจันทร์ที่ 3 กุมภาพันธ์ พ.ศ. 2557

สอน unity : การ generate map อัตโนมัติ FPS



การเขียนคำสั่งสำหรับการสร้างสิ่งเเวดล้อมรอบทิศทางแบบอัตโนมัติ


สอน unity : หมุนและซูมมุมกล้องด้วยเมาส์



หมุนและซูมมุมกล้องด้วย transform จากค่าการรับ input การคลิกและตำเเหน่งของเมาส์

สอน unity : สร้างระบบยิง FPS + shooting effect



การสร้างระบบยิงกระสุน โดยใช้ prefab และ rigidbody
การใส่เอฟเฟกวิถีกระสุนด้วย trail renderer

สอน unity : สร้างการควบคุมตัวละครแบบบ FPS




วิธีใช้ character controller ในการควบคุมผู้เล่นมุมมอง FPS (หมุนตัว เดิน กระโดด)
และใส่ปืนให้อยู่ในมุมมองแบบ First Person

สอน unity : สร้างการควบคุมด้วยคีย์บอร์ด





ตัวอย่างการควบคุมด้วยคีย์รูปแบบนึง (ใช้ translate ทำให้เคลื่อนที่) 
สามารถประยุกต์ใช้ได้อีกหลายแบบทั้งการคลิกเมาส์เเละสัมผัส


โปรแกรมมิ่ง สิ่งที่โรงเรียนส่วนใหญ่ไม่ได้สอน!


คงจะดีไม่น้อยถ้าเมืองไทยมีสอนวิชานี้ในหลักสูตรมัธยม



สอน unity : วิธีเปิด unity doc สารานุกรม unity แบบ offline




ปุ่มเปิด unity documentation แบบ offline หากดได้จากแทป inpector

ข้างในจะมีข้อมูลเกี่ยวกับ component นั้นๆ ว่าคืออะไรมีฟังชั่นอะไรบ้าง ถ้ากดจากสคริปจะขึ้น script reference ข้างในจะรวบรวมคำสั่งเเละฟังชั่นทั้งหมด รวมทั้งตัวอย่าง js c#

เว็บเปิดเเล้วจ้าาา~~~~~~


ที่ผ่านมาผมได้ทำการเเชร์วิธีการใช้งานและข้อมูลที่น่าสนเกี่ยวกับ engine เกมที่ชื่อว่า unity3d ผ่านแฟนเพจ “มือใหม่หัดใช้ unity” บน facebook ซึ่งก็มีผู้ให้ความสนใจอยู่มาก ( ซึ่งไม่คิดว่าจะมากขนาดนี้ ตอนเเรกเปิดกะเอาความรู้ )


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


ผมจะทยอยๆย้ายข้อมูลต่างๆมาไว้ในบล้อกนี้ อาจใช้เวลาซักหน่อยนะครับ