[C#] วิธีการ Overload ตัว Operator (+ – * / > = <= == !=) by Ziah
Aug0
เนื่องจากได้เขียน Class ค่าเงินขึ้นมา ซึ่งทำไว้รองรับปริมาณหน่วยเงินจำนวนมากๆ ทำให้ต้องมีการเขียน Overload พวกตัวคำนวน ตัวเปรียบเทียบทั้งหลายขึ้นมาใหม่ เพราะค่าของค่าเงินไม่ได้เก็บไว้ในตัวแปรเพียงตัวเดียว วิธีการ Overload ก็ไม่ยาก ตัวอย่างดังนี้ฮะ ( Currency เป็นชื่อ Class ใหม่)
Overload ตัวคำนวน +, -, *, /
public static Currency operator +(Currency c1, Currency c2)
{
Currency cResult = new Currency();
/**
คำนวนค่า
*/
return cResult; //ส่งค่ากลับ
}
Overload ตัวเปรียบเทียบ >, <, >=, <=, ==, !=
public static Currency operator >(Currency c1, Currency c2)
{
if (/* เงื่อนไขใหม่ที่เปรียบเทียบค่า */)
return true;
else
return false;
}
ง่ายๆเท่านี้แหละครับ
วิธีใส่แสงประกอบฉากให้กับตัว Spine (Unity) by Ziah
Jul0
Spine นั้นจะรับแต่ Point Light เท่านั้น ดังนั้นต้องเลือกให้ถูกนะ ขั้นตอนการใส่แสง Ambient ก็มีดังนี้
- เลือกส่วนประกอบของ Spine ของเรา ที่มี Skeleton Parts Renderer
- ที่สคริปท์ Skeleton Parts Renderer เปลี่ยน Shader เป็น Spine/Skeleton Lit
- จากนั้น Spine ที่เราเลือกจะดำมืดไป ไม่ต้องตกใจเพราะเรายังไม่ได้ใส่แสงให้มันนั่นเอง
- วิธีการใส่แสง ก็ไปที่เมนู GameObject -> Light -> Point Light
- สร้างเสร็จก็จัดตำแหน่งให้เรียบร้อย และปรับค่าของแสงได้ที่สคริปท์ Light
Type – ให้ใช้เป็น Point ไว้ แบบอิ่นจะไม่มีผลกับ Spine
Range – ระยะของแสงของเราที่จะให้มีผล
Color – ปรับสีของแสง Ambient
Intensity – ปรับความเข้มของแสง เวลามีหลายๆแสงชนกัน Intensity สูงจะแสดงผลชัดกว่า
- หลังจากตั้งค่าเสร็จก็จะได้รูปดังนี้ ชมพูชวิ้งแว้บ เท่านี้ก็เรียบร้อย
- อันนี้เป็นตัวอย่างหลังจากใส่จุดกำเนิดแสงเพิ่ม
การหลีกเลี่ยงการใช้ List แบบ Public ที่ต้องการกำหนดค่าในโค๊ด by Ziah
Jun0
เป็นปัญหาที่พบล่าสุด โดยปกติแล้วถ้าเรามีตัวแปร Global ที่อยากให้ไฟล์อื่นเรียกใช้โดยที่ไม่ต้องการแก้ไขใน Inspector ของ Unity เราก็จะสร้างตัวแปร Public ไว้ให้ไฟล์อื่นๆเรียกใช้ โดยเราจะสั่ง [HideInInspector] ไว้เพื่อไม่ให้มันโชว์ใน Inspector
แต่ทีนี้ตัวแปร List ที่เราสร้างไว้ เรายังสามารถแก้ไขในโค๊ดยังไงก็ได้ แต่ว่าถ้าเมื่อไหร่ตัว GameObject ของเราเข้าไปอยู่ใน Scene ที่ทำการ Save แล้ว ค่านั้นจะถูกแช่ไว้โดย Unity ทำให้ไม่ว่าเราจะแก้ไขในโค๊ดเท่าไรมันจะไม่เปลี่ยนตาม
วิธีแก้ปัญหาก็มีได้ 2 วิธี
1. สร้างตัวแปรมาไว้ก่อนแล้ว Init ค่าตอน Awake() หรือ Start()
2. วิธีที่ควรจะเป็นคือ ใช้ตัวแปรเป็น private
ex.
private List TestPublicList = new List()
แล้วถ้าต้องการให้ไฟล์อื่นมาเรียกใช้ก็สร้าง function public มาดึงข้อมูลตัวนี้อีกทีเท่านั้นเอง
ข้อควรระวังในการใช้ SimpleJSON by Ziah
May0
เนื่องจากทีมได้ใช้ SimpleJSON กันมานานระดับนึงแล้ว แต่ก็ยังมีบั๊คโผล่มาจากการเขียนโค้ดเพิ่มอยู่บ้างบางครั้ง จากเจ้า SimpleJSON ซึ่งมันง่ายสมชื่อ จนทำให้การใช้งานมันสร้างบั๊คแบบไม่รู้ตัวได้ง่ายมากๆ คือการ .Asใดๆ ก็ตามของมัน (ie. .AsInt .AsFloat) ที่มันจะสร้างตัวแปรใหม่มากำหนดค่าเริ่มต้นมาให้เลยทั้งๆที่มันไม่มี index นี้อยู่หรือเป็น null ส่วนมากมักเกิดจากการเช็คเงื่อนไข if ทั่วๆไปที่จะชอบเผลอใส่ .AsInt เข้ามา ทำให้มันมีค่าขึ้นมาเองทันที และการเข้าถึงตัวแปรชั้นลึกๆแล้ว .AsInt โดยที่ไม่เช็คก่อนว่ามีหรือเปล่า ก็จะสร้างขึ้นมาให้เช่นกัน และอีกเรื่องคือการเช็คว่าเป็น JSONClass เปล่าๆ หรือ JSONArray เปล่าๆหรือไม่ ถ้าเช็คไม่ครบก็จะผิดเงื่อนไขเอาง่ายๆ
- เรามาเริ่มที่เรื่องแรกก่อน
สิ่งที่ควรหลีกเลี่ยงเลยคือการใช้ .Asใดๆ (หลังจากนี้จะใช้ .AsInt เป็นหลัก) เพื่อดึงค่าตัวเลขที่เราไม่แน่ใจว่ามี index นี้หรือยัง จะทำให้ข้อมูลผิดพลาด
แบบที่ควรหลีกเลี่ยง
JSONNode test = new JSONClass();
int id = test["id"].AsInt; //จะทำให้ index ที่ชื่อ id เป็น 0 ทั้งๆที่ไม่เคยกำหนดค่ามาก่อน
if (test["number_id"].AsInt >= 0){
//ถ้าเช็คแบบนี้เงื่อนไขนี้จะถูกเสมอเพราะโดนกำหนดค่า 0 ตอน .AsInt
}
สิ่งที่ควรทำ
JSONNode test = new JSONClass();
int id = -1;
if (test["id"] != null)
id = test["id"].AsInt //จะทำให้ id ถูกต้องโดยจะเป็น -1 ถ้าไม่มี index ดังกล่าว
if (test["number_id"] !=null && test["number_id"].AsInt >= 0){
//ถ้าเช็คแบบนี้เงื่อนไขนี้จะไม่พลาดเข้าเงื่อนไขเมื่อไม่ได้กำหนด index number_id มา
}
- ถัดมาเรื่องการเช็ค JSONArray และ JSONClass เปล่า ทั้งคู่นี้ใช้การเช็ค Empty ต่างกัน
JSONArray testArray = new JSONArray();
//ใช้
if (testArray.AsObject == null)
JSONClass testObject = new JSONClass();
//ใช้
testObject.AsObject != null && testObject.AsObject.Count > 0
จากที่เห็นผิดนิดเดียวก็เกิดบั๊คกระจุยกระจายได้ ดังนั้นระมัดระวังกันด้วยนะครับ SimpleJSON ใช้ง่าย บั๊คก็ง๊ายง่ายเช่นกัน
วิธีแบ่งครึ่งหน้าจอซ้ายขวาเพื่อดูโค็ดไฟล์เดียว! (Sublime / Visual Studio) by Ziah
Apr0
ปกติแล้วเวลาผมเขียนโค็ดผมมักใช้ฟังก์ชั่นแยกบ่อยๆ ทำให้ต้องกระโดดข้ามไปมาในไฟล์เดียวกันเพื่่อเขียนหรือแก้อะไรใกล้ๆกัน ทำให้ต้องใช้การแบ่งจอ ซ้ายขวา มองไฟล์เดียวกันตลอด จริงๆ Sublime ใช้มาตลอดอยู่แล้วแต่เพิ่งเจอของ Visual Studio (ซึ่งจริงๆทำง่ายกว่าอีก //ฮา) เลยมาบอกต่อครับ
Sublime
- ไปที่ View -> Layout -> Columns: 2 หรือกด Alt+Shift+2 ได้เลยครับ
- จอก็แบ่งออกเป็นสองข้างแล้ว ถัดไปก็ต้องสร้างจอที่ซ้ำไฟล์มา
- ไปที่ File -> New View into File
- เท่านี้ก็จะสามารถเขียนโค้ดสองจอได้แล้ววว
Visual Studio
- ไปที่ Window -> New Vertical Tab Group
- หรือ จะลากจอไปชิดด้านขวา แบบในรูปนี้ก็ได้ฮะ
- ทีนี้จอก็แบ่งจอได้แล้ว ที่เหลือก็เปิดไฟล์ซ้ำ
- เลือกหน้าที่ต้องการแยกไว้ แล้วไปที่ Window -> New Window
- เท่านี้ก็จะได้โค้ดสองจอใน VS แล้ววว