บทความนี้จะเห็นแต่ Code เป็นหลักนะครับ
ใครที่เคยใช้ Linq ก็สามารถข้ามบทความนี้ได้นะครับ
เรามาเริ่มกันเลย
1. ให้ทำการสร้าง C# Script (EnemyArea.cs) ขึ้นมาครับ
2. ผมจะทำการสร้าง Struct เพือเอามาเก็บค่า position และ healPoint (ซึ่งการใช้งานจริงอาจจะเป็น GameObject ที่มีการใช้ Data ลงไป) โดยทำการเพิ่มโค้ด
public class EnemyArea : MonoBehaviour
{
[Serializable]
public struct Enemy
{
public Vector3 position;
public int healPoint;
}
public Vector3 playerPosition;
public Enemy[] enemy;
private Vector3 target; // สำหรับเกมศัตรูที่ใกล้ที่สุด
}
void Update()
{
// normal loop
target = GetClosetEnemy();
Debug.Log("Loop Target : " + target);
// Linq
target = enemy.Where(s => s.healPoint > 0)
.OrderBy(o => Mathf.Min(Vector3.Distance(playerPosition, o.position))).Select(s => s.position)
.First();
Debug.Log("Linq Target : " + target);
}
Vector3 GetClosetEnemy()
{
Vector3 position = Vector3.zero;
float closetDistance = 1000.0f;
for (int i = 0; i < enemy.Length; ++i)
{
float distance = Vector3.Distance(playerPosition, enemy[i].position);
// enemy not dead and closet to player
if (distance < closetDistance && enemy[i].healPoint > 0)
{
closetDistance = distance;
position = enemy[i].position;
}
}
return position;
}
ผลลัพธ์ก็จะได้ดังรูป ซึ่งจะเห็นได้ว่าการเขียน Code สั้นกว่าและเข้าใจง่ายกว่ามาก แต่ได้ผลลัพธ์ที่เหมือนกัน
มีอะไรแนะนำได้นะครับ
NO GAME NO DREAM!!!!