[Unity][NGUI] เคยเจอปัญหาใช้ Anchor แล้วมันเลื่อนๆไหม?? by

31
Dec
0

เคยเจอปัญหาใช้ Anchor แล้วพอสั่ง play มันก็เลื่อนๆๆ สักพัก กว่าจะเข้าที่ไหม เวลาเปลี่ยนหน้าไปมา มันก็เลือนๆๆ อยู่อย่างนั้นแหละ ทำให้ UI เราไม่สวยเลยย วันนี้จะมาบอกวิธีแก้กันนะฮ้าฟฟฟ

  • ก่อนอื่นให้เราลองดู Anchor ของ Object ที่มันเลือนๆ กันก่อนว่าใช้ Anchor Type เป็น Advanced รีเปล่า
  • ถัดไปให้ดูว่ามีการ Set ฝั่งไหนเป็น None รึเปล่า ถ้ามี นี่แหละ เป็นตัวการที่ทำให้ Object ของเรา เลื่อนนๆๆๆๆๆ
  • หากว่าเราอยากให้ส่วนบนของ Object A ติดกับส่วนล่างของ Object B แล้วปล่อยให้ ส่วนล่างของ Object A ไม่กำหนด (ที่เมื่อก่อนเราปล่อยตรงนี้ไว้เป็น None) ให้เราทำอย่างนี้

 

ปรับ Pivot ดังนี้

  • ถ้าอยากให้ชิดบน Pivot บน
  • ถ้าอยากให้ชิดล่าง Pivot ล่าง
  • ถ้าอยากให้ชิดซ้าย Pivot ซ้าย
  • ถ้าอยากให้ชิดขวา Pivot ขวา

ปรับ Anchor ดังนี้

  • ถ้าอยากให้ชิดบน ทำ Anchor ล่างให้เหมือน Anchor บน
  • ถ้าอยากให้ชิดล่าง ทำ Anchor บนให้เหมือน Anchor ล่าง
  • ถ้าอยากให้ชิดซ้าย ทำ Anchor ขวาให้เหมือน Anchor ซ้าย
  • ถ้าอยากให้ชิดขวา ทำ Anchor ซ้ายให้เหมือน Anchor ขวา

จบแล้วคร้าฟฟฟฟ ทีนี้ Object ของเราก็จะไม่วิ่งๆ เลื่อนๆ อีกต่อไป

[UNITY][Shader][White Overlay] วิธีการทำให้ Sprite เป็นสีขาวทึบ by

30
Nov
0

วันนี้จะมาสอนทำ Sprite ให้เป็นสีขาวทึบนะครับ สำหรับทำ Effect ต่างๆ

  • สมมุติเรามี Sprite รูปแบบนี้นะครับ1
  • ให้เรา New Material ใหม่ขึ้นมานะครับ ตามรูปนี้ครับ2
  • แล้วให้เรา Shader ที่ชื่อ DefaultColorFlash แปะใส่ Material ที่เราสร้างมาใหม่เมื่อกี้นะครับ3
  • จะได้ Material หน้าตาแบบนี้ครับ4
  • กลับไปที่ Sprite ของเรา ให้ Select Material ให้ Sprite ของเราเป็น Material ที่เราสร้างเมื่อกี้นะครับ5
  • เมื่อเลือกแล้วใน Inspector จะมีตัวแปรเพิ่มขึ้นมานะครับ ตัวแปร Flash Amount ใช้สำหรับปรับสีขาวของ Sprite ครับ6
  • เมื่อลองปรับดูแล้วก็จะเป็นแบบนี้ครับ7

Tip: หากต้องการแก้ค่าตัวแปร Flash Amount ด้วย Code ขณะ Run Time ละก็ให้ใช้คำสั่งนี้
gameObject.GetComponent().material.SetFloat(“_FlashAmount”, 1f);

Tip2: หากแก้ค่าตัวแปร Flash Amount ด้วย Code ขณะ Run Time แล้วไม่เกิดผล ให้เพิ่มคำสั่ง
SetActive(fault);
SetActive(true);ลงไป

[UNITY][NGUI]วิธีทำ Scroll View แบบหมุนได้ไม่รู้จบ (Loop) by

31
Oct
0

ใน NGUI นั้นมี Script สำหรับทำ Scroll View แบบหมุนได้ไม่รู้จบ หรือ Loop Scroll View ซึ่ง Script นั้นมีชื่อว่า UIWrapContent ครับ เราสามารถใช้ UIWrapContent ได้ดังนี้

  • สร้าง Scroll View และ Grid ดังรูป
    1
  • Set ค่าต่างๆใน UIScrollView ดังรูป
    2
  • Add Component และ Set ค่าต่างๆใน UIGrid, UIWrapContent ดังรูป
    3
  • หากต้องการให้ Center on Child ด้วยก็ให้ Add Component UICenterOnChild และ Set ค่าตามรูปในข้อที่แล้ว
  • Add ของลงใน Grid ตามใจเลย หรือจะใส่ Code ให้ Add ของใน Grid ตอน Run Time ก็ได้ทั้งนั้น

Unity Debug Tips ตอนที่ 1 by

29
Oct
0

เคยไหมเวลาที่ตัวแปรซักตัวหนึ่ง ถูกเรา set เป็นค่าหนึ่ง แล้วมันไม่ยอมเปลี่ยน(อันที่จริงแล้ว ต้องบอกว่ามันเปลี่ยนแล้ว แต่โดน code ส่วนอื่นแก้ทับลงไปอีกรอบ) เป็นสาเหตุให้โปรแกรมของเรามันทำงานไม่เหมือนกับที่เราตั้งใจไว้

วันนี้จะมานำเสนอวิธีแก้ปัญหา ที่จะทำให้การ debug ปัญหาทำนองนี้เร็วขึ้นมากกกครับ

วิธีนี้จะแนะนำให้ใช้ get set ให้เป็นประโยชน์ครับ สมมุติว่าตัวแปรเจ้าปัญหาของเราประกาศไว้ว่าอย่างนี้

public int myVar;

ให้เราแก้เป็น

public int temp;
public int myVar{
get{
return temp;
}
set{
Debug.Log("myVer is set to "+value);
temp = value;
}
}

ทีนี้เมื่อมีการแก้ตัวแปร myVar เมื่อไหร่ มันก็จะ Debug.Log ออกมาให้เราเห็นพร้อมกับ stack trace ด้วย ทำให้เรารู้แล้วว่า code ส่วนไหนที่แก้ตัวแปรนี้ไปบ้างงงง

[Unity][Thread] Thread Ninja by

31
Aug
0

“Unity’s coroutine is great, but it’s not a real thread. And a background thread is not allowed to access Unity’s API.” ผู้สร้าง Thread Ninja ได้กล่าวไว้

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

วันนี้ผมจึงมานำเสนอ Thread Ninja ที่จะทำให้ชึวิตเราง่ายขึ้นมากกกกกในการเขียนโปรแกรมแบบ Multithread บน Unity ครับ

เจ้า Thread Ninja นี้มีวิธีใช้ง่ายแสนง่ายครับ

  • ก่อนอื่น หาโหลด Package Thread Ninja ได้จาก Unity Asset Store ครับ แล้วก็ Import เข้าไปใน Project เรา เราก็ได้จะได้ โฟลเดอร์ชื่อ CielaSpike มาอยู่ใน Project ครับ
  • ก่อนใช้ต้อง using CielaSpike; ก่อนครับ
  • ใช้ Thread Ninja ให้เหมือนใช้ Coroutine ธรรมดาเลยครับ คือปกติ เรียก Coroutine แบบนี้ใช่ไหมครับ StartCoroutine(Func()); แค่เปลี่ยนไปเรียกแบบนี้ this.StartCoroutineAsync(Func()); จบครับ
  • เปลี่ยนจาก yield return StartCoroutine(Func()); เป็น
    Task task; this.StartCoroutineAsync(YourRoutine(), out task); // do sth else. // wait task to complete. yield return StartCoroutine(task.Wait()); // task has done. if (task.State == TaskState.Error) { // … }
  • ข้อสำคัญครับ “background thread is not allowed to access Unity’s API” ครับ ดังนั้นถ้าเราอยากใช้ Unity API ในระหว่างที่มันอยู่ใน background thread เราก็ทำอย่างนี้ครับ
    IEnumerator YourAsyncRoutine() { // now on background;
    yield return Ninja.JumpToUnity; //=> here’s our ninja, following code runs on main thread.
    Destory(gameObject); // OK!
    yield return Ninja.JumpBack; //=> go back to background.
    // continue doing some heavy computing without blocking the main thread. // … }

 

ง่าาาายมากใช่ไหม เย่ๆ มาทำ Multithread Programming กันเถอะ

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน