[Unity] วิธีเพิ่ม frameworks หรือ library ให้กับ XCode โดยอัตโนมัติ by

30
Nov
0

เคยไหมที่ Build project Unity for iOS แล้วต้องมา add framework/library เพิ่มเอง? Build กี่ทีก็ต้องมา add เองทุกครั้ง วันนี้ผมมีวิธีช่วยให้ไม่ต้องทำอย่างนั้นแล้ว :)

หมายเหตุ: ก่อนอื่นต้องบอกก่อนว่าผมใช้ Library Facebook for Unity ในการทำอยู่แล้วจึงสามารถทำแบบนี้ได้ หากใครไม่ได้ใช้อาจจะต้องดึงไฟล์บางส่วนมาใช้เอง หรือใช้ Library mod-pbxproj แทน แต่ผมลองแล้วมันไม่สำเร็จ (ฮ่าๆ)

วิธีการก็ง่ายมาก ถ้าใช้ Library Facebook for Unity อยู่แล้ว ให้เข้าไปแก้ไฟล์ Assets/Facebook/Editor/iOS/fixup.projmods โดยหน้าตาจะเป็นดังนี้


{
"group": "Facebook",
"patches": [],
"libs": [
"libsqlite3.0.dylib:weak",
"Facebook/Editor/iOS/FacebookSDK/FacebookSDK.a:",
],
"librarysearchpaths": [
"Facebook/Editor/iOS/FacebookSDK/",
],
"frameworks": [
"Accounts.framework:weak",
"AdSupport.framework:weak",
"Social.framework:weak",
"Security.framework:weak",
],
"headerpaths": [
"Facebook/Editor/iOS",
"Facebook/Scripts"
],
"files": [
"Facebook/Editor/iOS/FbUnityInterface.mm",
"Facebook/Editor/iOS/FbUnityInterface.h",
"Facebook/Scripts/NativeDialogModes.cs",
],
"folders": [],
"excludes": ["^.*\\.meta$", "^.*\\.mdown^", "^.*\\.pdf$"]
}

จะเป็นไฟล์ JSON เรามาดูทีละส่วน

  • libs : ให้ใส่พวกไฟล์ .a หรือ .dylib (อย่าลืมใส่ :weak, : ตามตัวอย่าง)
  • frameworks: ใส่พวก .framework (อย่าลืมใส่ :weak ตามตัวอย่าง)
  • files: ใส่พวก .mm, .h, .cs

เพียงเราเพิ่ม comma เขียนต่ออีกบรรทัดในแต่ละส่วน แล้วสั่ง Build เราก็จะได้ Project XCode ที่ไม่ต้องมา add library เองให้เมื่อยอีกต่อไป ง่ายมากๆ เลยใช่ไหม :) ตัวอย่างสิ่งที่ผมเพิ่มเข้าไปตามด้านล่าง


{
"group": "Facebook",
"patches": [],
"libs": [
"libsqlite3.0.dylib:weak",
"libz.dylib:weak",
"Facebook/Editor/iOS/FacebookSDK/FacebookSDK.a:",
],
"librarysearchpaths": [
"Facebook/Editor/iOS/FacebookSDK/",
],
"frameworks": [
"Accounts.framework:weak",
"AdSupport.framework:weak",
"Social.framework:weak",
"Security.framework:weak",
"CoreTelephony.framework:weak",
"MessageUI.framework:weak",
"EventKitUI.framework:weak",
"EventKit.framework:weak",
"CoreData.framework:weak"
],
"headerpaths": [
"Facebook/Editor/iOS",
"Facebook/Scripts"
],
"files": [
"Facebook/Editor/iOS/FbUnityInterface.mm",
"Facebook/Editor/iOS/FbUnityInterface.h",
"Facebook/Scripts/NativeDialogModes.cs",
],
"folders": [],
"excludes": ["^.*\\.meta$", "^.*\\.mdown^", "^.*\\.pdf$"]
}

การเซพ Screenshot ใน Unity3D by

2
Jul
0

บทความนี้จะแนะนำการเซพ screenshot จาก Unity3D พร้อมส่งขึ้น Server เสร็จสรรพด้วย Code ด้านล่างนี้


using UnityEngine;
using System.Collections;
using System.IO;
public class HiResScreenShots : MonoBehaviour {
public int resWidth = 400;
public int resHeight = 400;
private bool takeHiResShot = false;
public static string ScreenShotName(int width, int height) {
return string.Format("{0}/screenshots/screen_{1}x{2}_{3}.png",
Application.dataPath,
width, height,
System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
}
public void TakeHiResShot() {
takeHiResShot = true;
}
void LateUpdate() {
takeHiResShot |= Input.GetKeyDown("k");
if (takeHiResShot) {
StartCoroutine(take ());
}
}
IEnumerator take() {
RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
camera.targetTexture = rt;
Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.ARGB32, false);
camera.Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);
camera.targetTexture = null;
RenderTexture.active = null; // JC: added to avoid errors
Destroy(rt);
byte[] bytes = screenShot.EncodeToPNG();
DestroyImmediate(screenShot);
string filename = ScreenShotName(resWidth, resHeight);
System.IO.File.WriteAllBytes(filename, bytes);
// Create a Web Form
var form = new WWWForm();
form.AddBinaryData("fileUpload",bytes);
// Upload to a cgi script
var w = new WWW("http://mywebsite.com/save_image.php", form);
yield return w;
Debug.Log (w.text);
Debug.Log(string.Format("Took screenshot to: {0}", filename));
takeHiResShot = false;
}
}

ss1

ss2

ss3

  1. Copy code ด้านบนไปสร้างไฟล์ชื่อ HiResSreenShots.cs แล้ว attach script ไปที่ camera ที่ต้องการจะเซพ screenshot โดยคุณสามารถ attach กับ main camera ถ้าต้องการเซพทั้งจอ หรือ attach กับ secondary camera เพื่อเซพภาพเฉพาะส่วน(ไม่ทั้งจอ) ที่ secondary camera มองเห็นได้
  2. Camera ที่ต้องการจะใช้งาน ต้องเซ็ตกล้อง Clear Flags เป็น Skybox และใส่ Background เป็นสีขาว (เมื่อ save screenshot แล้วสี background จะตามมาจางๆ ถ้าเป็น transparent ซึ่งตรงนี้ผมเองก็ยังไม่เข้าใจนัก) ไม่อย่างนั้นการเซพรูปหลายๆ ครั้งภาพเก่าจะไม่ถูกล้างไปจาก memory
  3. เลือก Culling Mask ของ Camera ให้เห็นเฉพาะ Layer ที่ต้องการจะเซพ screenshot
  4. เลือก GameObject ที่ต้องการจะเซพ screenshot แล้วเลือก Layer ใน Inspector เป็นอันเดียวกันกับข้อ 3
  5. ส่วนของ Res Width และ Res Height คือขนาดของรูปภาพที่จะเซพออกมา โดยอ้างอิงจากมุมมองของกล้องเป็นหลัก ซึ่งสามารถทดลองดูภาพที่จะเซพออกมาได้ด้วยการปรับขนาดจอที่หน้า Game ให้เท่ากับขนาด Res Width/Height
  6. สร้าง Directory screenshots ใน Assets เพื่อรองรับรูปที่จะเซพออกมา (หากไม่ต้องการเซพลงเครื่องให้ comment ส่วนของ System.IO.File.WriteAllBytes(filename, bytes); ออกไป)
  7. แก้ http://mywebsite.com/save_image.php เป็นเว็บที่จะเก็บรูป
  8. กด Play แล้วกด k เพื่อเซพ ระหว่างนั้นสามารถทดลองขยับกล้องเพื่อปรับภาพที่จะเซพได้

ss4

มุมมองกล้องที่จะเห็นหลังเซพ

เท่านี้เราก็จะได้รูป png ออกมาสวยงามครับ :)

(Unity3d) NGUI 3.6 Anchor กับการทำ UI บนจอหลายขนาด by

31
May
0

การทำเกมบนมือถือ ปัญหาใหญ่ที่สุดปัญหาหนึ่งคือการทำเกมบนหน้าจอหลายขนาด ซึ่งวันนี้เราจะมาดูว่าการทำ UI ให้รองรับหลายหน้าจอนั้นทำอย่างไรกัน เราจะใช้ NGUI 3.6 ซึ่งมีวางขายใน Asset Store ของ Unity มาช่วยทำงานนี้ (หากใครไม่มีเงิน ก็สามารถใช้ NGUI 2.7 หัวข้อ Free Version ได้ แต่จะต้องทำอีกวิธีซึ่งยากกว่าพอสมควร) ในบทความนี้อ้างอิงจาก Example 1 – Anchor ใน NGUI Example ที่มีติดมากับ package อยู่แล้วนะครับ

1

จากรูปด้านบนเปิด Example 1 มาจะเป็นดังภาพ เลือก Top Right แล้วดูที่ Inspetor จะเห็นค่าที่เซ้ตไว้ดังรูปด้านล่าง

2

จะเห็นว่า Target เป็น UI Root หมายถึงใช้หน้าจอมือถือ(กรอบใหญ่สุด)เป็นตัวอ้างอิง และมี Left, Right, Bottom, Top อยู่โดยตรงนี้ โดยอธิบายได้ดังนี้

  • Left เลือกเป็น Target’s Right + (-180) อันนี้แปลว่าให้ขอบซ้ายของปุ่มเริ่มนับจาก Target’s Right หรือก็คือขอบจอมือถือทางขวาถอยมาทางซ้าย 180 pixel
  • Right เลือกเป็น Target’s Right + (0) คือให้ขอบขวาของปุ่มเริ่มที่สุดขอบจอขวาของมือถือพอดี  ทำให้ได้ปุ่มยาว 180 pixel อยู่ทางขวาของจอ
  • Bottom เลือกเป็น Target’s Top + (-70) คือให้ขอบล่างของปุ่มเริ่มที่ขอบจอด้านบนของมือถือลดลงมา 70 pixel
  • Top เลือกเป็น Target’s Top + (0) คือให้ขอบบนของปุ่มเริ่มที่ขอบจอด้านบนของมือถือพอดี คือชิดขอบจอบน ทำให้ได้ปุ่มสูง 70 pixel อยู่ด้านบนของจอมือถือ

3

ถัดมาลองคลิกที่ Label ที่อยู่ด้านใน Top Right อีกที แล้วเลือก Anchors เป็น Unified จะเห็นว่า Target เป็น Top Right หมายความว่าการเซ็ต Left, Right, Bottom, Top ของ Label ตัวนี้จะสามารถทำได้เช่นเดียวกับรูปที่แล้ว แต่ใช้การอ้างอิงกับขอบปุ่มแทนที่จะเป็นขอบจอมือถือ ทำให้สามารถกำหนดให้ตัวหนังสือหด-ขยายตามปุ่มได้โดยง่าย

5

ทีนี้ผมลองแก้ไขปุ่มให้เป็นดังภาพ คือจากจอซ้าย 20 pixel จอขวา 20 pixel และจากตรงกลางอย่างละ 50 pixel ทำให้สุดท้ายผมได้ปุ่มที่มีความยาวยืดตามขนาดหน้าจอ โดยห่างจากขอบ 20 pixel เสมอไม่ว่าจอจะขนาดเท่าใด โดยมีความสูงของปุ่ม 100 pixel ได้ผลเป็นภาพด้านล่าง

4

เป็นอย่างไรบ้างครับ ง่ายใช่ไหมครับ ไม่ต้องเขียน Code สักบรรทัดก็สามารถทำ Responsive Design ได้ในตัว Unity ตั้งแต่แรก โยนงานให้ฝั่ง Designer จัดการได้เลยโดยที่ลดแรงของ Programmer ไปได้มาก :) ขอให้สนุกกับการทำ ui ในมือถือด้วย unity นะครับ

วิธีสร้าง Alpha Animation ใน Unity by

30
Apr
0

เนื่องจาก Unity ไม่สามารถแก้ไขค่า alpha จากตัว Unity ได้โดยตรง ต้องเขียน code ใน monodev เพื่อแก้ค่า alpha เท่านั้น ผมจึงต้องหาทางแก้ไขปัญหานี้ โดยวิธีแก้มีดังนี้

สร้าง script (C#) ขึ้นมาดังนี้


using UnityEngine;
using System.Collections;
public class test11 : MonoBehaviour {
public float alpha = 0f;
void setColor(float num) {
Color color = this.renderer.material.color;
color.a = num;
this.renderer.material.color = color;
}
void update() {
setColor (alpha);
}
}

โดยหลักการก็ไม่มีอะไรมาก แค่ตัวแปร alpha ซึ่งเซ็ตเป็น public จะปรากฏใน Inspector ของ Unity ให้เซ็ตค่าได้ และสิ่งสำคัญคือต้องกำหนดเป็น float ไม่อย่างนั้นจะไม่สามารถนำตัวแปรนี้ไปใส่ทำ Animation ได้ดังภาพด้านล่าง

หลังจากใส่ลงไปแล้ว คลิก Add curve ตามรูปเพื่อเลือก Alpha โดยจะสามารถกำหนดเลข alpha ได้ตั้งแต่ 0, 0.1 ไปจนถึง 1 ซึ่ง 0 คือโปร่งใสไม่เห็นอะไรเลย และ 1 คือเห็นภาพครบถ้วนปกติ จะสามารถสร้าง animation alpha ได้โดยง่าย ซึ่งหลักการก็คือนำตัวแปร alpha ที่เราประกาศ public ไว้ไป set ค่า alpha ใน function update ตลอดเวลาเพื่อให้การแสดงผลค่าโปร่งใสเปลี่ยนทุก frame เท่านี้ก็เรียบร้อย :)

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